Skip to content

Commit 46d5aba

Browse files
authored
fix(secret): convert severity for custom rules (aquasecurity#6500)
1 parent 34ab09d commit 46d5aba

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

pkg/fanal/secret/scanner.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,16 +286,32 @@ func ParseConfig(configPath string) (*Config, error) {
286286
}
287287
defer f.Close()
288288

289-
logger.Info("Loading the config file s for secret scanning...")
289+
logger.Info("Loading the config file for secret scanning...")
290290

291291
var config Config
292292
if err = yaml.NewDecoder(f).Decode(&config); err != nil {
293293
return nil, xerrors.Errorf("secrets config decode error: %w", err)
294294
}
295295

296+
// Update severity for custom rules
297+
for i := range config.CustomRules {
298+
config.CustomRules[i].Severity = convertSeverity(logger, config.CustomRules[i].Severity)
299+
}
300+
296301
return &config, nil
297302
}
298303

304+
// convertSeverity checks the severity and converts it to uppercase or uses "UNKNOWN" for the wrong severity.
305+
func convertSeverity(logger *log.Logger, severity string) string {
306+
switch strings.ToLower(severity) {
307+
case "low", "medium", "high", "critical", "unknown":
308+
return strings.ToUpper(severity)
309+
default:
310+
logger.Warn("Incorrect severity", log.String("severity", severity))
311+
return "UNKNOWN"
312+
}
313+
}
314+
299315
func NewScanner(config *Config) Scanner {
300316
logger := log.WithPrefix("secret")
301317

pkg/fanal/secret/scanner_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -916,6 +916,33 @@ func TestSecretScanner(t *testing.T) {
916916
Findings: []types.SecretFinding{wantFinding8},
917917
},
918918
},
919+
{
920+
name: "add unknown severity when rule has no severity",
921+
configPath: filepath.Join("testdata", "config-with-incorrect-severity.yaml"),
922+
inputFilePath: filepath.Join("testdata", "secret.txt"),
923+
want: types.Secret{
924+
FilePath: filepath.Join("testdata", "secret.txt"),
925+
Findings: []types.SecretFinding{wantFinding8},
926+
},
927+
},
928+
{
929+
name: "update severity if rule severity is not in uppercase",
930+
configPath: filepath.Join("testdata", "config-with-non-uppercase-severity.yaml"),
931+
inputFilePath: filepath.Join("testdata", "secret.txt"),
932+
want: types.Secret{
933+
FilePath: filepath.Join("testdata", "secret.txt"),
934+
Findings: []types.SecretFinding{wantFinding8},
935+
},
936+
},
937+
{
938+
name: "use unknown severity when rule has incorrect severity",
939+
configPath: filepath.Join("testdata", "config-with-incorrect-severity.yaml"),
940+
inputFilePath: filepath.Join("testdata", "secret.txt"),
941+
want: types.Secret{
942+
FilePath: filepath.Join("testdata", "secret.txt"),
943+
Findings: []types.SecretFinding{wantFinding8},
944+
},
945+
},
919946
{
920947
name: "invalid aws secrets",
921948
configPath: filepath.Join("testdata", "skip-test.yaml"),
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
rules:
2+
- id: rule1
3+
category: general
4+
title: Generic Rule
5+
severity: bad
6+
regex: (?i)(?P<key>(secret))(=|:).{0,5}['"](?P<secret>somevalue)['"]
7+
secret-group-name: secret
8+
disable-allow-rules:
9+
- tests
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
rules:
2+
- id: rule1
3+
category: general
4+
title: Generic Rule
5+
severity: uNknown
6+
regex: (?i)(?P<key>(secret))(=|:).{0,5}['"](?P<secret>somevalue)['"]
7+
secret-group-name: secret
8+
disable-allow-rules:
9+
- tests

0 commit comments

Comments
 (0)