gitlab.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. "github.com/zricethezav/gitleaks/v8/regexp"
  7. )
  8. // overview with all GitLab tokens:
  9. // https://docs.gitlab.com/ee/security/tokens/index.html#token-prefixes
  10. func GitlabCiCdJobToken() *config.Rule {
  11. r := config.Rule{
  12. RuleID: "gitlab-cicd-job-token",
  13. Description: "Identified a GitLab CI/CD Job Token, potential access to projects and some APIs on behalf of a user while the CI job is running.",
  14. Regex: regexp.MustCompile(`glcbt-[0-9a-zA-Z]{1,5}_[0-9a-zA-Z_-]{20}`),
  15. Entropy: 3,
  16. Keywords: []string{"glcbt-"},
  17. }
  18. tps := utils.GenerateSampleSecrets("gitlab", "glcbt-"+secrets.NewSecret(utils.AlphaNumeric("5"))+"_"+secrets.NewSecret(utils.AlphaNumeric("20")))
  19. return utils.Validate(r, tps, nil)
  20. }
  21. func GitlabDeployToken() *config.Rule {
  22. r := config.Rule{
  23. Description: "Identified a GitLab Deploy Token, risking access to repositories, packages and containers with write access.",
  24. RuleID: "gitlab-deploy-token",
  25. Regex: regexp.MustCompile(`gldt-[0-9a-zA-Z_\-]{20}`),
  26. Entropy: 3,
  27. Keywords: []string{"gldt-"},
  28. }
  29. tps := []string{
  30. utils.GenerateSampleSecret("gitlab", "gldt-"+secrets.NewSecret(utils.AlphaNumeric("20"))),
  31. }
  32. return utils.Validate(r, tps, nil)
  33. }
  34. func GitlabFeatureFlagClientToken() *config.Rule {
  35. r := config.Rule{
  36. RuleID: "gitlab-feature-flag-client-token",
  37. Description: "Identified a GitLab feature flag client token, risks exposing user lists and features flags used by an application.",
  38. Regex: regexp.MustCompile(`glffct-[0-9a-zA-Z_\-]{20}`),
  39. Entropy: 3,
  40. Keywords: []string{"glffct-"},
  41. }
  42. tps := utils.GenerateSampleSecrets("gitlab", "glffct-"+secrets.NewSecret(utils.AlphaNumeric("20")))
  43. return utils.Validate(r, tps, nil)
  44. }
  45. func GitlabFeedToken() *config.Rule {
  46. r := config.Rule{
  47. RuleID: "gitlab-feed-token",
  48. Description: "Identified a GitLab feed token, risking exposure of user data.",
  49. Regex: regexp.MustCompile(`glft-[0-9a-zA-Z_\-]{20}`),
  50. Entropy: 3,
  51. Keywords: []string{"glft-"},
  52. }
  53. tps := utils.GenerateSampleSecrets("gitlab", "glft-"+secrets.NewSecret(utils.AlphaNumeric("20")))
  54. return utils.Validate(r, tps, nil)
  55. }
  56. func GitlabIncomingMailToken() *config.Rule {
  57. r := config.Rule{
  58. RuleID: "gitlab-incoming-mail-token",
  59. Description: "Identified a GitLab incoming mail token, risking manipulation of data sent by mail.",
  60. Regex: regexp.MustCompile(`glimt-[0-9a-zA-Z_\-]{25}`),
  61. Entropy: 3,
  62. Keywords: []string{"glimt-"},
  63. }
  64. tps := utils.GenerateSampleSecrets("gitlab", "glimt-"+secrets.NewSecret(utils.AlphaNumeric("25")))
  65. return utils.Validate(r, tps, nil)
  66. }
  67. func GitlabKubernetesAgentToken() *config.Rule {
  68. r := config.Rule{
  69. RuleID: "gitlab-kubernetes-agent-token",
  70. Description: "Identified a GitLab Kubernetes Agent token, risking access to repos and registry of projects connected via agent.",
  71. Regex: regexp.MustCompile(`glagent-[0-9a-zA-Z_\-]{50}`),
  72. Entropy: 3,
  73. Keywords: []string{"glagent-"},
  74. }
  75. tps := utils.GenerateSampleSecrets("gitlab", "glagent-"+secrets.NewSecret(utils.AlphaNumeric("50")))
  76. return utils.Validate(r, tps, nil)
  77. }
  78. func GitlabOauthAppSecret() *config.Rule {
  79. r := config.Rule{
  80. RuleID: "gitlab-oauth-app-secret",
  81. Description: "Identified a GitLab OIDC Application Secret, risking access to apps using GitLab as authentication provider.",
  82. Regex: regexp.MustCompile(`gloas-[0-9a-zA-Z_\-]{64}`),
  83. Entropy: 3,
  84. Keywords: []string{"gloas-"},
  85. }
  86. tps := utils.GenerateSampleSecrets("gitlab", "gloas-"+secrets.NewSecret(utils.AlphaNumeric("64")))
  87. return utils.Validate(r, tps, nil)
  88. }
  89. func GitlabPat() *config.Rule {
  90. r := config.Rule{
  91. RuleID: "gitlab-pat",
  92. Description: "Identified a GitLab Personal Access Token, risking unauthorized access to GitLab repositories and codebase exposure.",
  93. Regex: regexp.MustCompile(`glpat-[\w-]{20}`),
  94. Entropy: 3,
  95. Keywords: []string{"glpat-"},
  96. }
  97. // validate
  98. tps := utils.GenerateSampleSecrets("gitlab", "glpat-"+secrets.NewSecret(utils.AlphaNumeric("20")))
  99. fps := []string{
  100. "glpat-XXXXXXXXXXX-XXXXXXXX",
  101. }
  102. return utils.Validate(r, tps, fps)
  103. }
  104. func GitlabPatRoutable() *config.Rule {
  105. r := config.Rule{
  106. RuleID: "gitlab-pat-routable",
  107. Description: "Identified a GitLab Personal Access Token (routable), risking unauthorized access to GitLab repositories and codebase exposure.",
  108. Regex: regexp.MustCompile(`\bglpat-[0-9a-zA-Z_-]{27,300}\.[0-9a-z]{2}[0-9a-z]{7}\b`),
  109. Entropy: 4,
  110. Keywords: []string{"glpat-"},
  111. }
  112. // validate
  113. tps := utils.GenerateSampleSecrets("gitlab", "glpat-"+secrets.NewSecret(utils.AlphaNumeric("27"))+"."+secrets.NewSecret(utils.AlphaNumeric("2"))+secrets.NewSecret(utils.AlphaNumeric("7")))
  114. fps := []string{
  115. "glpat-xxxxxxxx-xxxxxxxxxxxxxxxxxx.xxxxxxxxx",
  116. }
  117. return utils.Validate(r, tps, fps)
  118. }
  119. func GitlabPipelineTriggerToken() *config.Rule {
  120. r := config.Rule{
  121. RuleID: "gitlab-ptt",
  122. Description: "Found a GitLab Pipeline Trigger Token, potentially compromising continuous integration workflows and project security.",
  123. Regex: regexp.MustCompile(`glptt-[0-9a-f]{40}`),
  124. Entropy: 3,
  125. Keywords: []string{"glptt-"},
  126. }
  127. // validate
  128. tps := utils.GenerateSampleSecrets("gitlab", "glptt-"+secrets.NewSecret(utils.Hex("40")))
  129. fps := []string{
  130. "glptt-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  131. }
  132. return utils.Validate(r, tps, fps)
  133. }
  134. func GitlabRunnerRegistrationToken() *config.Rule {
  135. r := config.Rule{
  136. RuleID: "gitlab-rrt",
  137. Description: "Discovered a GitLab Runner Registration Token, posing a risk to CI/CD pipeline integrity and unauthorized access.",
  138. Regex: regexp.MustCompile(`GR1348941[\w-]{20}`),
  139. Entropy: 3,
  140. Keywords: []string{"GR1348941"},
  141. }
  142. tps := utils.GenerateSampleSecrets("gitlab", "GR1348941"+secrets.NewSecret(utils.AlphaNumeric("20")))
  143. fps := []string{
  144. "GR134894112312312312312312312",
  145. "GR1348941XXXXXXXXXXXXXXXXXXXX",
  146. }
  147. return utils.Validate(r, tps, fps)
  148. }
  149. func GitlabRunnerAuthenticationToken() *config.Rule {
  150. r := config.Rule{
  151. RuleID: "gitlab-runner-authentication-token",
  152. Description: "Discovered a GitLab Runner Authentication Token, posing a risk to CI/CD pipeline integrity and unauthorized access.",
  153. Regex: regexp.MustCompile(`glrt-[0-9a-zA-Z_\-]{20}`),
  154. Entropy: 3,
  155. Keywords: []string{"glrt-"},
  156. }
  157. tps := utils.GenerateSampleSecrets("gitlab", "glrt-"+secrets.NewSecret(utils.AlphaNumeric("20")))
  158. return utils.Validate(r, tps, nil)
  159. }
  160. func GitlabScimToken() *config.Rule {
  161. r := config.Rule{
  162. RuleID: "gitlab-scim-token",
  163. Description: "Discovered a GitLab SCIM Token, posing a risk to unauthorized access for a organization or instance.",
  164. Regex: regexp.MustCompile(`glsoat-[0-9a-zA-Z_\-]{20}`),
  165. Entropy: 3,
  166. Keywords: []string{"glsoat-"},
  167. }
  168. tps := utils.GenerateSampleSecrets("gitlab", "glsoat-"+secrets.NewSecret(utils.AlphaNumeric("20")))
  169. return utils.Validate(r, tps, nil)
  170. }
  171. func GitlabSessionCookie() *config.Rule {
  172. r := config.Rule{
  173. RuleID: "gitlab-session-cookie",
  174. Description: "Discovered a GitLab Session Cookie, posing a risk to unauthorized access to a user account.",
  175. Regex: regexp.MustCompile(`_gitlab_session=[0-9a-z]{32}`),
  176. Entropy: 3,
  177. Keywords: []string{"_gitlab_session="},
  178. }
  179. // validate
  180. tps := utils.GenerateSampleSecrets("gitlab", "_gitlab_session="+secrets.NewSecret(utils.AlphaNumeric("32")))
  181. return utils.Validate(r, tps, nil)
  182. }