Executive Summary
CVE-2026-53942 is a critical "pwn request" vulnerability (CWE-94, code injection) in the conda/infrastructure repository, the centralized infrastructure code for the Conda organization. The workflow .github/workflows/update.yml runs on issue_comment events containing @conda-bot render or @conda-bot recreate, and checks out the head repository and branch of a pull request, which is untrusted, while holding a highly privileged secret named SYNC_TOKEN.
CVSS Score: 9.9 (Critical)
The external template-files action reads its configuration and templates from the checked-out working directory and renders them in an unsandboxed Jinja2 environment. An attacker who opens a pull request with crafted templates and triggers the workflow by comment can execute code in a job that has access to SYNC_TOKEN. The flaw was published on 2026-10-23 and fixed in commit 9c0f238. No public proof of concept and no confirmed exploitation were listed at the time of writing.
Vulnerability Overview
| Attribute | Value |
|---|---|
| CVE ID | CVE-2026-53942 |
| CVSS Score | 9.9 (Critical) |
| Weakness | CWE-94 Improper Control of Generation of Code |
| Attack Vector | Network (via pull request and comment) |
| Affected Component | .github/workflows/update.yml |
| Patch Available | Yes — commit 9c0f238 |
| Known Exploited | Not reported |
Affected Products
| Product | Affected Versions | Fixed Version |
|---|---|---|
conda/infrastructure (update.yml) | Before commit 9c0f238 | Commit 9c0f238 and later |
The advisory notes the pattern appeared to remain present in conda/conda until the fix, since that repository consumes the same shared infrastructure workflow.
Technical Analysis
The vulnerable chain has three parts:
- Untrusted trigger. Any
issue_commenton a pull request containing the trigger phrase starts the workflow. - Untrusted checkout. The workflow resolves the PR head repository and branch from the API and checks that ref out in a job that has
SYNC_TOKENavailable. - Unsandboxed rendering. The template-files action loads its default config and templates from the working directory and renders them with Jinja2 without a sandbox, so template content becomes executable code.
This is the classic pwn request pattern: privileged workflow context combined with attacker-controlled checkout contents. Anything reachable with SYNC_TOKEN — typically write access across the organization's repositories — becomes a supply chain risk for downstream consumers.
Impact Assessment
| Impact Area | Description |
|---|---|
| Secret Theft | SYNC_TOKEN can be exfiltrated from the runner |
| Repository Tampering | A stolen token could push changes to synced repositories |
| Supply Chain | Compromised repositories could affect downstream package consumers |
| CI Abuse | Runner resources and other secrets in the job are exposed |
Immediate Remediation
If you maintain the conda infrastructure or copied this workflow pattern:
- Pull commit
9c0f238or later into any fork or copy of the workflow. - Rotate
SYNC_TOKENand review its recent use if the old workflow was active. - Add a trusted-maintainer gate (author association check) before checkout and render.
- Render templates only from trusted base-branch files, never from the PR head.
- Do not pass personal access tokens into jobs that process untrusted content.
- Update
conda/actions/template-filesto use a sandboxed Jinja2 environment.
# Example gate: only act on comments from trusted authors
jobs:
render:
if: contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.comment.author_association)Detection Indicators
| Indicator | Description |
|---|---|
@conda-bot render or @conda-bot recreate comments from non-maintainers | Trigger attempt |
| Workflow runs checking out fork branches with write-scoped tokens | Vulnerable pattern in use |
Unexpected pushes or API calls using SYNC_TOKEN | Possible token theft |
| Outbound network connections from the render job to unfamiliar hosts | Exfiltration |