Skip to main content

Generic CLI Secret

Description#

General#

The Generic CLI Option Secret detector aims at catching any secret that is embedded in a CLI command option. Note that in some cases this type of secret is already caught by specific database CLI detectors, in some other cases the generic high entropy detector would not be sufficient to catch them. Indeed, the space character is not considered a valid assignment character. That is to say --secret mySup3rs3cret is not matched by the generic high entropy detector.
The Generic CLI Option Secret detector handles this kind of secret.

Specifications#

To avoid raising many false alerts, this detector focuses on a list of given options that are very likely to be followed by secrets. Here is the exhaustive list of concerned options:

  • secret(-key)?
  • token
  • api[_-]?key
  • cred(entials)?
  • password
  • pwd

Then the value specified for the option must respect the following rules:

  • it must follow this regex: [a-zA-Z0-9_\\.+/~-][a-zA-Z0-9_\\.+/=~-]{5,128}.
  • it cannot be a file name or a file path.
  • Some values that are considered as common example values for passwords or apikeys are eventually discarded.

Revoke the secret#

This detector catches generic credentials, hence GitGuardian cannot infer the concerned service. To properly revoke the credentials:

  1. Understand what service is impacted by looking at the command preceding the match.
  2. Refer to the corresponding documentation to know how to revoke and rotate the credentials.

Examples#

Examples that WILL be caught

- text: >    aws secretsmanager create-secret --name testing/secret --secret ImAsEcReTpAsSw0rD  apikey: ImAsEcReTpAsSw0rD

Examples that WILL NOT be caught

  • The option is not considered sensitive enough
- text: >    another_command secretsmanager --secret-sauce=ketchup  apikey: ketchup
  • The password is not considered sensitive.
- text: >    another_command secretsmanager --secret=123456  apikey: 123456

Details for Generic CLI Option Secret#

  • High Recall: False

  • Validity Check: False

  • Minimum Number of Matches: 1

  • Occurrences found for one million commits: 50.1

  • Prefixed: False

  • PreValidators:

- type: FilenameBanlistPreValidator- type: ContentWhitelistPreValidator  patterns:    - "--(secret|token|api[_-]?key|cred|auth|password|pwd)"
- type: CommonPasswordBanlistPostValidator- type: ValueBanlistPostValidator  patterns:    - "^(?-i:[A-Z_]+)$" # Uppercase words    - "[a-z]*[_-][a-z]*"    - ^--    - option    - parameter    - argument    - x{6}    - y{6}    - ^password$    - token    - abc$    - test    - ^sha256$    - ^source=    - ^id=    - ^\./    - ^~/    - \.$    - "a0b1c2d3e4f5"    - "123456"    - \.psk$    - \.keycp$    - foobar    - dbuser # considered not sensitive enough    - consumerKey=$    - string    - multiple    - something    - without    - individual    - specify    - usertype    - console- type: EntropyPostValidator  entropy: 1- type: HeuristicPostValidator  filters:    - file_path    - file_name