| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- package rules
- import (
- "regexp"
- "github.com/zricethezav/gitleaks/v8/cmd/generate/config/utils"
- "github.com/zricethezav/gitleaks/v8/config"
- "github.com/zricethezav/gitleaks/v8/cmd/generate/secrets"
- )
- // overview with all GitLab tokens:
- // https://docs.gitlab.com/ee/security/tokens/index.html#token-prefixes
- func GitlabCiCdJobToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-cicd-job-token",
- 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.",
- Regex: regexp.MustCompile(`glcbt-[0-9a-zA-Z]{1,5}_[0-9a-zA-Z_-]{20}`),
- Entropy: 3,
- Keywords: []string{"glcbt-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "glcbt-"+secrets.NewSecret(utils.AlphaNumeric("5"))+"_"+secrets.NewSecret(utils.AlphaNumeric("20")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabDeployToken() *config.Rule {
- r := config.Rule{
- Description: "Identified a GitLab Deploy Token, risking access to repositories, packages and containers with write access.",
- RuleID: "gitlab-deploy-token",
- Regex: regexp.MustCompile(`gldt-[0-9a-zA-Z_\-]{20}`),
- Entropy: 3,
- Keywords: []string{"gldt-"},
- }
- tps := []string{
- utils.GenerateSampleSecret("gitlab", "gldt-"+secrets.NewSecret(utils.AlphaNumeric("20"))),
- }
- return utils.Validate(r, tps, nil)
- }
- func GitlabFeatureFlagClientToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-feature-flag-client-token",
- Description: "Identified a GitLab feature flag client token, risks exposing user lists and features flags used by an application.",
- Regex: regexp.MustCompile(`glffct-[0-9a-zA-Z_\-]{20}`),
- Entropy: 3,
- Keywords: []string{"glffct-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "glffct-"+secrets.NewSecret(utils.AlphaNumeric("20")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabFeedToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-feed-token",
- Description: "Identified a GitLab feed token, risking exposure of user data.",
- Regex: regexp.MustCompile(`glft-[0-9a-zA-Z_\-]{20}`),
- Entropy: 3,
- Keywords: []string{"glft-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "glft-"+secrets.NewSecret(utils.AlphaNumeric("20")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabIncomingMailToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-incoming-mail-token",
- Description: "Identified a GitLab incoming mail token, risking manipulation of data sent by mail.",
- Regex: regexp.MustCompile(`glimt-[0-9a-zA-Z_\-]{25}`),
- Entropy: 3,
- Keywords: []string{"glimt-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "glimt-"+secrets.NewSecret(utils.AlphaNumeric("25")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabKubernetesAgentToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-kubernetes-agent-token",
- Description: "Identified a GitLab Kubernetes Agent token, risking access to repos and registry of projects connected via agent.",
- Regex: regexp.MustCompile(`glagent-[0-9a-zA-Z_\-]{50}`),
- Entropy: 3,
- Keywords: []string{"glagent-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "glagent-"+secrets.NewSecret(utils.AlphaNumeric("50")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabOauthAppSecret() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-oauth-app-secret",
- Description: "Identified a GitLab OIDC Application Secret, risking access to apps using GitLab as authentication provider.",
- Regex: regexp.MustCompile(`gloas-[0-9a-zA-Z_\-]{64}`),
- Entropy: 3,
- Keywords: []string{"gloas-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "gloas-"+secrets.NewSecret(utils.AlphaNumeric("64")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabPat() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-pat",
- Description: "Identified a GitLab Personal Access Token, risking unauthorized access to GitLab repositories and codebase exposure.",
- Regex: regexp.MustCompile(`glpat-[\w-]{20}`),
- Entropy: 3,
- Keywords: []string{"glpat-"},
- }
- // validate
- tps := utils.GenerateSampleSecrets("gitlab", "glpat-"+secrets.NewSecret(utils.AlphaNumeric("20")))
- fps := []string{
- "glpat-XXXXXXXXXXX-XXXXXXXX",
- }
- return utils.Validate(r, tps, fps)
- }
- func GitlabPatRoutable() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-pat-routable",
- Description: "Identified a GitLab Personal Access Token (routable), risking unauthorized access to GitLab repositories and codebase exposure.",
- Regex: regexp.MustCompile(`\bglpat-[0-9a-zA-Z_-]{27,300}\.[0-9a-z]{2}[0-9a-z]{7}\b`),
- Entropy: 4,
- Keywords: []string{"glpat-"},
- }
- // validate
- tps := utils.GenerateSampleSecrets("gitlab", "glpat-"+secrets.NewSecret(utils.AlphaNumeric("27"))+"."+secrets.NewSecret(utils.AlphaNumeric("2"))+secrets.NewSecret(utils.AlphaNumeric("7")))
- fps := []string{
- "glpat-xxxxxxxx-xxxxxxxxxxxxxxxxxx.xxxxxxxxx",
- }
- return utils.Validate(r, tps, fps)
- }
- func GitlabPipelineTriggerToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-ptt",
- Description: "Found a GitLab Pipeline Trigger Token, potentially compromising continuous integration workflows and project security.",
- Regex: regexp.MustCompile(`glptt-[0-9a-f]{40}`),
- Entropy: 3,
- Keywords: []string{"glptt-"},
- }
- // validate
- tps := utils.GenerateSampleSecrets("gitlab", "glptt-"+secrets.NewSecret(utils.Hex("40")))
- fps := []string{
- "glptt-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
- }
- return utils.Validate(r, tps, fps)
- }
- func GitlabRunnerRegistrationToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-rrt",
- Description: "Discovered a GitLab Runner Registration Token, posing a risk to CI/CD pipeline integrity and unauthorized access.",
- Regex: regexp.MustCompile(`GR1348941[\w-]{20}`),
- Entropy: 3,
- Keywords: []string{"GR1348941"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "GR1348941"+secrets.NewSecret(utils.AlphaNumeric("20")))
- fps := []string{
- "GR134894112312312312312312312",
- "GR1348941XXXXXXXXXXXXXXXXXXXX",
- }
- return utils.Validate(r, tps, fps)
- }
- func GitlabRunnerAuthenticationToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-runner-authentication-token",
- Description: "Discovered a GitLab Runner Authentication Token, posing a risk to CI/CD pipeline integrity and unauthorized access.",
- Regex: regexp.MustCompile(`glrt-[0-9a-zA-Z_\-]{20}`),
- Entropy: 3,
- Keywords: []string{"glrt-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "glrt-"+secrets.NewSecret(utils.AlphaNumeric("20")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabScimToken() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-scim-token",
- Description: "Discovered a GitLab SCIM Token, posing a risk to unauthorized access for a organization or instance.",
- Regex: regexp.MustCompile(`glsoat-[0-9a-zA-Z_\-]{20}`),
- Entropy: 3,
- Keywords: []string{"glsoat-"},
- }
- tps := utils.GenerateSampleSecrets("gitlab", "glsoat-"+secrets.NewSecret(utils.AlphaNumeric("20")))
- return utils.Validate(r, tps, nil)
- }
- func GitlabSessionCookie() *config.Rule {
- r := config.Rule{
- RuleID: "gitlab-session-cookie",
- Description: "Discovered a GitLab Session Cookie, posing a risk to unauthorized access to a user account.",
- Regex: regexp.MustCompile(`_gitlab_session=[0-9a-z]{32}`),
- Entropy: 3,
- Keywords: []string{"_gitlab_session="},
- }
- // validate
- tps := utils.GenerateSampleSecrets("gitlab", "_gitlab_session="+secrets.NewSecret(utils.AlphaNumeric("32")))
- return utils.Validate(r, tps, nil)
- }
|