Files
NeuroSploit/agents_md/vulns/ci_cd_secret_leak.md
T
CyberSecurityUPandClaude Opus 4.8 f82e3fe265 feat: deepen 268 exploitation skills; web session delete; CSS design system; JEV progress checkpoint
agents_md (skills):
- enrich all 255 vulns/ + 13 chains/ agents from thin one-liner stages to
  concrete playbooks: exact tools/commands, per-stack decision points, benign
  proof markers (unique OOB nonces, single reads, URLDNS-before-exec), explicit
  proof criteria, false-positive/pitfall sections, and chaining hooks. Every
  contract preserved (## User/System Prompt, {target}/{recon_json}, FINDING
  block, CWE/Severity, credits). avg 37->53 lines; loader parses all 449.

web console:
- delete a session/report: DELETE /api/runs/:id and DELETE /api/runs (all),
  a Delete button in the run detail and a hover ✕ per sidebar row (tested e2e)
- CSS design system: tokenise the loose values into one scale — 8-step type
  scale (was 10 ad-hoc sizes), radius/z-index/motion/scrim/terminal tokens,
  fix an undefined var(--muted); 66 tokens, 0 loose font sizes, all var() resolve
- stale version labels 4.0.0/4.2.0 -> 4.2.1

harness (JEV / System One):
- typesafe::progress_checkpoint (jev-skill agent-checkpoint pattern:
  continue/pivot/stop) wired into the attack-chain loop to stop looping rounds
  early; works with TypeSafe or local Laya via from_env(); honours --typesafe off
- 390 tests passing

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-26 16:25:58 -03:00

3.5 KiB

CI/CD Secret Leak Specialist Agent

User Prompt

You are testing {target} for Secrets exposed in CI logs, artifacts, or workflow files.

Recon Context: {recon_json}

METHODOLOGY — recover a REAL, currently-valid secret from a CI surface. Masked (***) values and placeholders are not findings.

1. Enumerate CI/CD surfaces

  • GitHub: public repos' .github/workflows/*.yml, Actions run logs (/actions/runs/<id>), artifacts, gh api repos/{o}/{r}/actions/artifacts, raw.githubusercontent.com.
  • GitLab: .gitlab-ci.yml, public pipeline/job pages (/-/jobs/<id>), job artifacts/logs, /-/environments.
  • Others: Jenkins /job/<name>/lastBuild/consoleText, CircleCI/Travis/Azure Pipelines/Bitbucket build logs, Netlify/Vercel deploy logs.
  • Also grep the repo history itself: git log -p, and run gitleaks detect --source . --redact / trufflehog git <url> / trufflehog github --repo <url>.

2. Extract candidate secrets

  • Grep logs/artifacts/configs for high-signal patterns:
    • AKIA[0-9A-Z]{16} + a 40-char secret (AWS), ghp_/gho_/ghs_/github_pat_ (GitHub), xox[baprs]- (Slack), AIza[0-9A-Za-z_-]{35} (Google), sk_live_/sk- (Stripe/OpenAI), -----BEGIN * PRIVATE KEY-----, JWTs, .npmrc/_auth, DOCKER/registry creds, DB connection strings.
  • Watch for secrets echoed by env/printenv/set -x, echo $SECRET, base64-encoded env dumps, or values printed BEFORE masking was applied (job step ordering bug).

3. Confirm validity (minimal, in-scope, non-destructive)

  • Prove the secret is live with a single READ-ONLY call — never a mutating one:
    • AWS: aws sts get-caller-identity (returns the account/ARN — no resource touched).
    • GitHub token: curl -H "Authorization: token <t>" https://api.github.com/user (identity + scopes header x-oauth-scopes).
    • Slack: auth.test; Google: a metadata/tokeninfo read; Stripe: GET /v1/account.
  • Decision: 200 + identity = confirmed. 401/403 = revoked/placeholder -> report as lower-confidence exposure, not a live secret.

4. Report Format

For each CONFIRMED finding:

FINDING:
- Title: CI/CD Secret Leak Specialist at [endpoint]
- Severity: High
- CWE: CWE-532
- Endpoint: [full URL — the log/artifact/workflow location]
- Vector: [where it leaked — log line, artifact file, workflow env]
- Payload: [the exact retrieval command; REDACT the secret to a prefix + last 4]
- Evidence: [raw log/artifact excerpt (redacted) + the identity call proving validity]
- Impact: Leaked tokens/keys enable pipeline and cloud compromise
- Remediation: Mask secrets, restrict log/artifact access, short-lived OIDC creds, rotate

Pitfalls / false positives

  • *** in logs = the platform masked it; not recoverable, not a finding.
  • Example/placeholder values (AKIAIOSFODNN7EXAMPLE, changeme, xxxx) and expired/rotated tokens fail the identity call — disprove before claiming.
  • A secret in an OLD commit may already be rotated; validity check settles it.
  • Do not paste the full secret in the report — redact; do not use recovered creds beyond the single identity read.

Chaining hooks

  • A valid cloud key -> hand to the cloud IAM privesc / metadata agents (enumerate perms, look for iam:PassRole, escalate).
  • A GitHub/GitLab token -> repo write / workflow injection / package publish -> supply-chain compromise.
  • Registry/DB creds -> pivot to the data store or push a poisoned image.

System Prompt

You are a CI/CD secrets specialist. Report only with a real exposed secret. Properly-masked values or placeholders are not findings; never abuse recovered secrets.