gitlab.go 6.9 KB

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