/

CVE-2026-55675

Severity:

CRITICAL RISK

(10.0)

CI Code Injection (CWE-94) in Salty Docs CI Workflows

CVE-2026-55675

Deferred

Vulnerability type

Category:

CI/CD Pipeline Code Injection

CWE:

CWE-94, CWE-829, CWE-1357

Impact:

Arbitrary Code Execution and Secret Disclosure

Severity:

CRITICAL RISK

(10.0)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

A GitHub Actions workflow in the Salty documentation repository can execute attacker-controlled code from a fork pull request within a privileged base-repository workflow. If the workflow installs dependencies from the checked-out fork content, that code may access repository and deployment secrets and use write-capable tokens for further compromise.

A GitHub Actions workflow in the Salty documentation repository can execute attacker-controlled code from a fork pull request within a privileged base-repository workflow. If the workflow installs dependencies from the checked-out fork content, that code may access repository and deployment secrets and use write-capable tokens for further compromise.

Affected context

The issue occurs in documentation build workflows that process fork pull requests through a separate workflow_run job with access to sensitive credentials. Risk arises when an untrusted fork commit is selected for checkout and package installation runs against attacker-controlled project files before the workflow's secrets and token permissions have been sufficiently isolated.

The issue occurs in documentation build workflows that process fork pull requests through a separate workflow_run job with access to sensitive credentials. Risk arises when an untrusted fork commit is selected for checkout and package installation runs against attacker-controlled project files before the workflow's secrets and token permissions have been sufficiently isolated.

Exploit preconditions

  • Attack surface: GitHub Actions workflows triggered by fork pull requests
  • Required access: Ability to submit and control content in a fork pull request
  • Trigger point: Dependency installation or build initialization in the privileged workflow
  • Why exploitation is possible: Attacker-controlled repository metadata causes a fork commit to be checked out, allowing package installation logic and build hooks from that commit to execute with workflow privileges and exposed secrets
  • Attack surface: GitHub Actions workflows triggered by fork pull requests
  • Required access: Ability to submit and control content in a fork pull request
  • Trigger point: Dependency installation or build initialization in the privileged workflow
  • Why exploitation is possible: Attacker-controlled repository metadata causes a fork commit to be checked out, allowing package installation logic and build hooks from that commit to execute with workflow privileges and exposed secrets

Why this happens

The workflow crosses a trust boundary by combining untrusted fork content with a secret-bearing workflow_run execution context. Installing Python dependencies from the checked-out content can invoke attacker-controlled packaging code, such as build configuration or backend hooks, before the workflow has established that the code is trusted. This maps primarily to CWE-94: Improper Control of Generation of Code, with related concerns involving execution of untrusted functionality and unsafe CI/CD workflow design.

The workflow crosses a trust boundary by combining untrusted fork content with a secret-bearing workflow_run execution context. Installing Python dependencies from the checked-out content can invoke attacker-controlled packaging code, such as build configuration or backend hooks, before the workflow has established that the code is trusted. This maps primarily to CWE-94: Improper Control of Generation of Code, with related concerns involving execution of untrusted functionality and unsafe CI/CD workflow design.

Potential impact

  • Attacker-controlled code could execute with the permissions of the workflow runner
  • Deployment, repository, or third-party service secrets may be disclosed
  • Write-capable tokens could enable repository or artifact tampering
  • Documentation and supply-chain content could be poisoned
  • Additional systems may be compromised through exposed credentials or workflow permissions
  • Attacker-controlled code could execute with the permissions of the workflow runner
  • Deployment, repository, or third-party service secrets may be disclosed
  • Write-capable tokens could enable repository or artifact tampering
  • Documentation and supply-chain content could be poisoned
  • Additional systems may be compromised through exposed credentials or workflow permissions

General mitigation guidance

Mitigation generally focuses on maintaining a strict separation between untrusted pull-request content and privileged workflow contexts.

Common defensive patterns include:

  • Avoiding execution or dependency installation from fork-controlled commits in secret-bearing jobs
  • Using trusted, repository-controlled workflow inputs for privileged builds
  • Separating untrusted validation jobs from release, deployment, and publication jobs
  • Applying least-privilege permissions and withholding secrets from untrusted execution paths
  • Pinning and reviewing dependencies while using isolated, disposable build environments
  • Treating artifact metadata as untrusted and validating commit ownership and provenance before checkout

Mitigation generally focuses on maintaining a strict separation between untrusted pull-request content and privileged workflow contexts.

Common defensive patterns include:

  • Avoiding execution or dependency installation from fork-controlled commits in secret-bearing jobs
  • Using trusted, repository-controlled workflow inputs for privileged builds
  • Separating untrusted validation jobs from release, deployment, and publication jobs
  • Applying least-privilege permissions and withholding secrets from untrusted execution paths
  • Pinning and reviewing dependencies while using isolated, disposable build environments
  • Treating artifact metadata as untrusted and validating commit ownership and provenance before checkout

How teams detect issues like this

Organizations can identify similar risks through:

  • Static analysis of workflows for workflow_run, fork pull-request handling, checkout references, and secret exposure
  • Code review checks for dependency installation or build commands after checkout of untrusted revisions
  • Policy enforcement that blocks secrets and write permissions in jobs processing fork content
  • Detection rules for privileged workflows whose inputs or artifacts determine source revisions
  • Audit-log monitoring for unusual token use, secret access, repository writes, or deployment activity from documentation jobs

Automated CI security scanners and workflow policy tools can help flag these trust-boundary violations during review.

Organizations can identify similar risks through:

  • Static analysis of workflows for workflow_run, fork pull-request handling, checkout references, and secret exposure
  • Code review checks for dependency installation or build commands after checkout of untrusted revisions
  • Policy enforcement that blocks secrets and write permissions in jobs processing fork content
  • Detection rules for privileged workflows whose inputs or artifacts determine source revisions
  • Audit-log monitoring for unusual token use, secret access, repository writes, or deployment activity from documentation jobs

Automated CI security scanners and workflow policy tools can help flag these trust-boundary violations during review.

Sources

SourceLink
github.comgithub.com/saltyorg/docs/commit/649c9aea2daef1168eeb0415b44e65dbbde9f220
github.comgithub.com/saltyorg/docs/security/advisories/GHSA-wr2h-fpxm-ff4x

Frequently asked

questions

Yes. A fork pull request can provide the untrusted repository content, although exploitation depends on the repository accepting or processing that pull request through the affected workflow path.

No. The relevant prerequisite is control of a fork and the ability to submit content that the workflow later checks out and processes.

Do not run attacker-controlled packaging or build code in a workflow that has secrets or write-capable tokens. Keep untrusted validation isolated and perform privileged operations only on explicitly trusted source revisions.

Model every workflow input and artifact as untrusted, minimize token permissions, restrict secret availability, validate source provenance, and review checkout and dependency-installation steps across workflow boundaries.

Yes. A fork pull request can provide the untrusted repository content, although exploitation depends on the repository accepting or processing that pull request through the affected workflow path.

No. The relevant prerequisite is control of a fork and the ability to submit content that the workflow later checks out and processes.

Do not run attacker-controlled packaging or build code in a workflow that has secrets or write-capable tokens. Keep untrusted validation isolated and perform privileged operations only on explicitly trusted source revisions.

Model every workflow input and artifact as untrusted, minimize token permissions, restrict secret availability, validate source provenance, and review checkout and dependency-installation steps across workflow boundaries.

Find out what's already
exploitable in your codebase.