Skip to content

Commit bf3f7b8

Browse files
authored
Add support for custom severities (#281)
1 parent 0bf2f06 commit bf3f7b8

File tree

3 files changed

+44
-11
lines changed

3 files changed

+44
-11
lines changed

README.md

+14
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,20 @@ This will report all Medium severity issues and higher (Potential risks that are
410410
2. By default, the threshold is set to low.
411411
3. Any custom search patterns you add, are considered to be of high severity.
412412

413+
## Configuring custom severities
414+
415+
You can customize the [security levels](detector/severity/severity_config.go) of the detectors provided by Talisman in the .talismanrc file:
416+
417+
```yaml
418+
custom_severities:
419+
- detector: Base64Content
420+
severity: medium
421+
- detector: HexContent
422+
severity: low
423+
```
424+
425+
By using custom severities and a severity threshold, Talisman can be configured to alert only on what is important based on your context. This can be useful to reduce the number of false positives.
426+
413427
## Talisman as a CLI utility
414428

415429
If you execute `talisman` on the command line, you will be able to view all the parameter options you can pass

runner.go

+16-5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"talisman/checksumcalculator"
88
"talisman/detector"
99
"talisman/detector/helpers"
10+
"talisman/detector/severity"
1011
"talisman/gitrepo"
1112
"talisman/prompt"
1213
"talisman/report"
@@ -52,8 +53,9 @@ func (r *Runner) Scan(reportDirectory string, ignoreHistory bool) int {
5253
fmt.Printf("\n\n")
5354
utility.CreateArt("Running Scan..")
5455
additions := scanner.GetAdditions(ignoreHistory)
55-
ignores := &talismanrc.TalismanRC{}
56-
detector.DefaultChain(ignores).Test(additions, ignores, r.results)
56+
rcConfig := talismanrc.Get()
57+
setCustomSeverities(rcConfig)
58+
detector.DefaultChain(rcConfig).Test(additions, rcConfig, r.results)
5759
reportsPath, err := report.GenerateReport(r.results, reportDirectory)
5860
if err != nil {
5961
log.Printf("error while generating report: %v", err)
@@ -82,10 +84,19 @@ func (r *Runner) RunChecksumCalculator(fileNamePatterns []string) int {
8284
}
8385

8486
func (r *Runner) doRun() {
85-
rcConfigIgnores := talismanrc.Get()
87+
rcConfig := talismanrc.Get()
88+
setCustomSeverities(rcConfig)
8689
scopeMap := getScopeConfig()
87-
additionsToScan := rcConfigIgnores.IgnoreAdditionsByScope(r.additions, scopeMap)
88-
detector.DefaultChain(rcConfigIgnores).Test(additionsToScan, rcConfigIgnores, r.results)
90+
additionsToScan := rcConfig.IgnoreAdditionsByScope(r.additions, scopeMap)
91+
detector.DefaultChain(rcConfig).Test(additionsToScan, rcConfig, r.results)
92+
}
93+
94+
func setCustomSeverities(tRC *talismanrc.TalismanRC) {
95+
for _, cs := range tRC.CustomSeverities {
96+
severity.SeverityConfiguration[cs.Detector] = severity.Severity{
97+
Value: severity.SeverityStringToValue(cs.Severity),
98+
}
99+
}
89100
}
90101

91102
func getScopeConfig() map[string][]string {

talismanrc/talismanrc.go

+14-6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ var (
2626
currentRCFileName = DefaultRCFileName
2727
)
2828

29+
type CustomSeverityConfig struct {
30+
Detector string `yaml:"detector"`
31+
Severity string `yaml:"severity"`
32+
}
33+
2934
type FileIgnoreConfig struct {
3035
FileName string `yaml:"filename"`
3136
Checksum string `yaml:"checksum,omitempty"`
@@ -47,18 +52,20 @@ type TalismanRC struct {
4752
FileIgnoreConfig []FileIgnoreConfig `yaml:"fileignoreconfig,omitempty"`
4853
ScopeConfig []ScopeConfig `yaml:"scopeconfig,omitempty"`
4954
CustomPatterns []PatternString `yaml:"custom_patterns,omitempty"`
55+
CustomSeverities []CustomSeverityConfig `yaml:"custom_severities,omitempty"`
5056
AllowedPatterns []string `yaml:"allowed_patterns,omitempty"`
5157
Experimental ExperimentalConfig `yaml:"experimental,omitempty"`
5258
Threshold severity.SeverityValue `default:"1" yaml:"threshold,omitempty"`
5359
}
5460

5561
type TalismanRCFile struct {
56-
FileIgnoreConfig []FileIgnoreConfig `yaml:"fileignoreconfig,omitempty"`
57-
ScopeConfig []ScopeConfig `yaml:"scopeconfig,omitempty"`
58-
CustomPatterns []PatternString `yaml:"custom_patterns,omitempty"`
59-
AllowedPatterns []string `yaml:"allowed_patterns,omitempty"`
60-
Experimental ExperimentalConfig `yaml:"experimental,omitempty"`
61-
Threshold string `default:"low" yaml:"threshold,omitempty"`
62+
FileIgnoreConfig []FileIgnoreConfig `yaml:"fileignoreconfig,omitempty"`
63+
ScopeConfig []ScopeConfig `yaml:"scopeconfig,omitempty"`
64+
CustomPatterns []PatternString `yaml:"custom_patterns,omitempty"`
65+
CustomSeverities []CustomSeverityConfig `yaml:"custom_severities,omitempty"`
66+
AllowedPatterns []string `yaml:"allowed_patterns,omitempty"`
67+
Experimental ExperimentalConfig `yaml:"experimental,omitempty"`
68+
Threshold string `default:"low" yaml:"threshold,omitempty"`
6269
}
6370

6471
func SetFs(_fs afero.Fs) {
@@ -103,6 +110,7 @@ func NewTalismanRC(fileContents []byte) *TalismanRC {
103110
FileIgnoreConfig: talismanRCFile.FileIgnoreConfig,
104111
ScopeConfig: talismanRCFile.ScopeConfig,
105112
CustomPatterns: talismanRCFile.CustomPatterns,
113+
CustomSeverities: talismanRCFile.CustomSeverities,
106114
AllowedPatterns: talismanRCFile.AllowedPatterns,
107115
Experimental: talismanRCFile.Experimental,
108116
Threshold: severity.SeverityStringToValue(talismanRCFile.Threshold),

0 commit comments

Comments
 (0)