VNX-SEC-078: Doppler API token
Reports a whole Doppler personal token (dp.pt. and 43 characters) in any file, excluding service, CLI and service-account tokens, placeholders, truncated tokens, environment references and test files.
| Field | Value |
|---|---|
| Rule ID | VNX-SEC-078 |
| Severity | Critical |
| SARIF level | error |
| Kind | secrets |
| Languages | Any file |
| CWE | CWE-798 |
| CAPEC | CAPEC-191 |
| ATT&CK | T1552.001 |
| CWSS vector | CWSS:1.0/TI:C/AP:A/AL:A/IC:N/FC:LT/RP:N/RL:A/AV:I/AS:N/IN:A/SC:A/BI:C/DI:H/EX:H/EC:N/P:W |
| Tags | secrets doppler credentials |
| Source | internal/sast/rules/vnx-sec-078.rego |
Overview
This rule reports a Doppler personal token, dp.pt. followed by 43 mixed-case alphanumeric characters, quoted, assigned (DOPPLER_TOKEN=...), passed to doppler --token or sent in an Authorization header. The token is redacted in the finding’s snippet.
Why This Matters
Hardcoded doppler api token values are routinely scraped by automated bots within minutes of a public push, and then used to access the account, exfiltrate data, or pivot into downstream services. Once the credential is in git history it is permanently in third-party hands.
What Gets Flagged
# FLAGGED
doppler run --token dp.pt.<43 characters> --project billing --config prd -- ./server
# FLAGGED: workflow env
env:
DOPPLER_TOKEN: "dp.pt.<43 characters>"
Not flagged:
- Service, CLI, service-account and audit tokens (
dp.st.,dp.ct.,dp.sa.,dp.audit.), which VNX-SEC-1022 to VNX-SEC-1025 report. - The bare prefix in a check (
token.startswith("dp.pt.")), truncated tokens and placeholders (dp.pt.xxxx...). - Environment references (
os.environ["DOPPLER_TOKEN"]). - Test, fixture, vendored and generated files.
Remediation
- Revoke the leaked credential in the provider’s console immediately.
- Replace with a short-lived alternative, OAuth 2.0 access tokens, IAM role assumption, OIDC federation, wherever the platform supports it.
- Store the new credential in a secrets manager (AWS Secrets Manager, HashiCorp Vault, GitHub Actions secrets, Doppler).
- Audit the provider’s access logs for activity you did not initiate between the leak and the revocation.
- Purge from git history with
git filter-repoor BFG, then re-scan with gitleaks/truffleHog to confirm no other secrets remain. - Enable push protection so future commits are blocked at the developer machine.
References
- CWE-798: Use of Hard-coded Credentials
- gitleaks
- truffleHog
- OWASP Credentials Management Cheat Sheet
- MITRE ATT&CK T1552.001 – Credentials In Files
- git-filter-repo
Suppressing this rule
Put a nosec comment on the line, or on line 1 to cover the whole file. Use the comment marker of the file’s language (#, //, -- or ;):
# nosec vnx-sec-078
// nosec vnx-sec-078
Or record an ignore rule: vulnetix ignore add --rule vnx-sec-078 --reason "...". See Suppressing findings.