Skip to content

[static-analysis] RGS-012: Secret Exfiltration via Outbound HTTP Request in daily-model-inventory.lock.ymlΒ #51943

Description

@github-actions

🚨 Runner-Guard Security Finding

Rule: RGS-012 β€” Secret Exfiltration via Outbound HTTP Request
Severity: High
File: .github/workflows/daily-model-inventory.lock.yml
Line: 497 (also recurs at lines 1099, 1269, 1336 β€” 4 occurrences in this file)

Description

A run: block contains an outbound HTTP request command (curl, wget, httpie, python requests, node fetch, etc.) targeting a non-GitHub domain (i.e., not github.com, api.github.com, or ghcr.io) in a job context that has access to secrets or publishing capabilities. This pattern is a strong indicator of credential exfiltration β€” the primary objective of most GitHub Actions supply-chain attacks.

Impact

Attackers who achieve code execution in a CI runner (via expression injection, fork checkout, compromised action, etc.) need a way to exfiltrate stolen secrets to infrastructure they control. The most common method is an HTTP POST request to an attacker-owned domain carrying environment variables, secret values, or tokens as the request body. The combination of external HTTP requests with secrets access in a workflow is a high-confidence indicator worth manual review.

Investigation note: the flagged step ("Predownload models.dev API index") issues curl -fsS (models.dev/redacted) -o "$OUT/api.json" β€” a plain GET against a public, read-only API index, not a POST carrying secret data. This looks like a likely false positive, but the job context should be reviewed to confirm it does not also carry secrets that could be exfiltrated via this or a nearby step.

Remediation

  • Confirm the job/step does not have unnecessary secrets exposure (scope secrets:/env: to only what's required).
  • If the outbound call is confirmed benign (public, read-only, no secret data in the request), add a scoped runner-guard suppression with a justification comment, or restrict the job's permissions:/secrets so the rule no longer triggers.
  • If any secret-bearing environment variable could reach this run: block, remove that exposure or route the request through an allow-listed domain in the workflow's network egress config.

Detected by runner-guard v2.6.0 β€” CI/CD source-to-sink vulnerability scanner
Workflow run: https://github.com/github/gh-aw/actions/runs/31460155227

Generated by πŸ“Š Static Analysis Report Β· agent Β· 150.9 AIC Β· βŒ– 33.6 AIC Β· ⊞ 11K Β· β—·

  • expires on Aug 17, 2026, 9:24 PM UTC-08:00

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions