hashicorp_vault.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package rules
  2. import (
  3. "github.com/zricethezav/gitleaks/v8/cmd/generate/config/utils"
  4. "github.com/zricethezav/gitleaks/v8/cmd/generate/secrets"
  5. "github.com/zricethezav/gitleaks/v8/config"
  6. "regexp"
  7. )
  8. func VaultServiceToken() *config.Rule {
  9. // define rule
  10. r := config.Rule{
  11. RuleID: "vault-service-token",
  12. Description: "Identified a Vault Service Token, potentially compromising infrastructure security and access to sensitive credentials.",
  13. Regex: utils.GenerateUniqueTokenRegex(`(?:hvs\.[\w-]{90,120}|s\.(?i:[a-z0-9]{24}))`, false),
  14. Entropy: 3.5,
  15. Keywords: []string{"hvs", "s."},
  16. Allowlist: config.Allowlist{
  17. Regexes: []*regexp.Regexp{
  18. // https://github.com/gitleaks/gitleaks/issues/1490#issuecomment-2334166357
  19. regexp.MustCompile(`s\.[A-Za-z]{24}`),
  20. },
  21. },
  22. }
  23. // validate
  24. tps := []string{
  25. // Old
  26. utils.GenerateSampleSecret("vault", "s."+secrets.NewSecret(utils.AlphaNumeric("24"))),
  27. `token: s.ZC9Ecf4M5g9o34Q6RkzGsj0z`,
  28. // New
  29. utils.GenerateSampleSecret("vault", "hvs."+secrets.NewSecret(utils.AlphaNumericExtendedShort("90"))),
  30. `-vaultToken hvs.CAESIP2jTxc9S2K7Z6CtcFWQv7-044m_oSsxnPE1H3nF89l3GiYKHGh2cy5sQmlIZVNyTWJNcDRsYWJpQjlhYjVlb1cQh6PL8wEYAg"`, // longer than 100 chars
  31. }
  32. fps := []string{
  33. // Old
  34. ` credentials: new AWS.SharedIniFileCredentials({ profile: '<YOUR_PROFILE>' })`, // word boundary start
  35. `INFO 4 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean`, // word boundary end
  36. `s.xxxxxxxxxxxxxxxxxxxxxxxx`, // low entropy
  37. `s.THISSTRINGISALLUPPERCASE`, // uppercase
  38. `s.thisstringisalllowercase`, // lowercase
  39. `s.AcceptanceTimeoutSeconds `, // pascal-case
  40. `s.makeKubeConfigController = args`, // camel-case
  41. // New
  42. `hvs.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`, // low entropy
  43. }
  44. return utils.Validate(r, tps, fps)
  45. }
  46. func VaultBatchToken() *config.Rule {
  47. // define rule
  48. r := config.Rule{
  49. Description: "Detected a Vault Batch Token, risking unauthorized access to secret management services and sensitive data.",
  50. RuleID: "vault-batch-token",
  51. Regex: utils.GenerateUniqueTokenRegex(`hvb\.[a-z0-9_-]{138,212}`, true),
  52. Keywords: []string{"hvb"},
  53. }
  54. // validate
  55. tps := []string{
  56. utils.GenerateSampleSecret("vault", "hvb."+secrets.NewSecret(utils.AlphaNumericExtendedShort("138"))),
  57. }
  58. return utils.Validate(r, tps, nil)
  59. }