Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessControl feedstock recipe or upstream source
-
DeliveryAutotick bot captures payload into published status JSON
-
ExploitVictim loads conda-forge.org/status page and expands entry
-
ExecutiondangerouslySetInnerHTML injects markup into origin
-
ImpactExecute JavaScript for phishing or same-origin theft
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the attacker to control a conda-forge feedstock recipe or the upstream source a feedstock pulls from (achievable by creating a feedstock via a reviewed staged-recipes PR, after which the maintainer controls their recipe and upstream releases), and to cause an autotick-bot version-update or migration step to FAIL in a way that captures attacker-chosen build/patch/traceback output - containing an executing HTML payload such as '<img src=x onerror=...>' or '<svg onload=...>' - into the errors[name] field of version_status.v2.json or the pre_pr_migrator_status field of a migration_json file. The victim side needs no authentication but requires UI:R: a user must visit https://conda-forge.org/status/ (Version Updates panel) or the migration status page and expand the affected entry. LIMITING FACTORS: reliably landing an executing event-handler payload in captured program output is non-trivial and was not demonstrated end-to-end; attacker needs ecosystem-level access to a feedstock/upstream; and impact is confined to the conda-forge.org origin (C:L/I:L/A:N). |
| Impact | This is a medium-severity stored/DOM XSS (CWE-79) with multiple mitigating factors that keep real-world risk moderate rather than urgent. The vuln.today decision label is 'this_month' (not act_now/emergency), no CISA KEV listing is present, and no EPSS probability was supplied in the input - so widespread or automated exploitation is not indicated by any decision signal. The two supplied CVSS vectors CONFLICT and this should be verified: the top-level input vector is CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N (AC:L), while the GHSA advisory itself scores AC:H. The AC:H reading is better supported by the advisory's own 'honest caveat' that severity hinges on reliably landing an executing payload in bot-captured output, which was not demonstrated end-to-end. Either way the vector requires attacker privilege in the ecosystem (PR:L - control of a feedstock) plus victim interaction (UI:R - a user must visit/expand the status entry), both of which blunt mass exploitation. The absence of sanitization is PROVEN with live production data (unescaped '<frozen _collections_abc>' reaching the DOM), but weaponization is characterized by the reporter as plausible, not demonstrated. Net: a legitimate issue worth fixing on a normal patch cadence for a high-trust package-distribution origin, but not a drop-everything emergency given PR:L, UI:R, limited (C:L/I:L/A:N) impact, and no evidence of active exploitation. |
| Exploit ScenarioDerived | An attacker who controls a conda-forge feedstock recipe (obtainable via a reviewed staged-recipes PR) or an upstream source tarball crafts content - e.g. a filename or build/patch output containing '<img src=x onerror=...>' - that the autotick bot captures as error/status output and publishes verbatim into the status JSON. When any visitor loads conda-forge.org/status/ and expands that entry, dangerouslySetInnerHTML injects the markup and the attacker's JavaScript executes in the conda-forge.org origin. No working exploit code was supplied; the GHSA advisory proves the sink is unsanitized with live data but explicitly notes end-to-end weaponization was not demonstrated. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
Stored/DOM cross-site scripting exists in the conda-forge.org website, where two React components render bot-generated status strings as raw HTML, so a feedstock maintainer who can influence captured autotick-bot output could execute script in the conda-forge.org origin for any visitor who expands the affected entry on the public status or migration pages. The flaw is confirmed in the current main branch (commits 85748ad2368a and prior) and affects a rolling deployment with no tagged releases; at time of analysis there is no vendor-released patch, no confirmed public exploit code, and no CISA KEV listing. The assessed severity is Medium (CVSS 3.1 AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N): the missing sanitization is proven against live production data, but end-to-end weaponization was not demonstrated and reliable delivery of an executing payload into captured build or traceback output is non-trivial.
RemediationAI
No vendor-released patch was identified at time of analysis: the upstream advisory states there are no publicly available patches and lists the issue as not yet fixed, so the main-branch deployment remains exposed. The advisory's preferred fix is to stop rendering HTML entirely - replace <pre dangerouslySetInnerHTML={{ __html: message }} /> with <pre>{message}</pre> in src/components/StatusDashboard/version_updates.jsx:100 and the equivalent sink at src/pages/status/migration/index.jsx:597 - and reconstruct the one legitimately embedded 'bot CI job' link from a separate structured field such as a run_url rather than trusting embedded markup; this removes the injection primitive completely but changes how that link is displayed. If HTML rendering must be retained, pass both values through DOMPurify with a strict allowlist (ALLOWED_TAGS ['a','br','pre','code'], ALLOWED_ATTR ['href'], and an href scheme/host allowlist restricting to https://github.com) before handing them to dangerouslySetInnerHTML; the trade-off is a new runtime dependency and the risk that legitimate future markup breaks silently. As defense in depth, the producer side (regro/cf-scripts) should HTML-escape captured build, patch and traceback output before writing it into the status JSON fields, and conda-forge.org should ship a Content-Security-Policy without unsafe-inline for scripts, which blunts event-handler payloads but requires auditing inline scripts on the site first. Until a fix is deployed, the exposure is limited to visitors who open the Version Updates panel or a migration status page on the public site, and no confirmed public exploit code exists at time of analysis. Details and updates: https://github.com/conda-forge/conda-forge.github.io/security/advisories/GHSA-r5vj-wgjv-r524.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected code is a Docusaurus/React front end served from https://conda-forge.org. Two sinks pass externally sourced strings to React's dangerouslySetInnerHTML with no sanitization layer: src/components/StatusDashboard/version_updates.jsx line 100 injects the message value of each entry in the errors object, and src/pages/status/migration/index.jsx line 597 injects the pre_pr_migrator_status details value inside a table cell. The data is fetched at runtime from raw.githubusercontent.com - version_status.v2.json and per-feedstock migration_json files in conda-forge/conda-forge-bot-data - which are written automatically by the conda-forge autotick bot (regro/cf-scripts) as it processes every feedstock and its upstream source artifacts. Those JSON fields embed raw captured program output: build logs, patch output and Python tracebacks. The project has no DOMPurify or sanitize-html dependency anywhere in src/ or package.json, and live production data already contains unescaped angle-bracket content such as File "<frozen _collections_abc>", proving the sink is unescaped; the only legitimate markup currently relied upon is an embedded 'bot CI job' anchor tag. This is CWE-79 (improper neutralization of input during web page generation), specifically the stored/DOM variant: the trust boundary runs from feedstock maintainers and upstream release tarballs, through bot-captured output, into a privileged same-origin rendering context. Cross-checks in the advisory ruled out the PR-preview editUrl path in docusaurus.config.js because preview builds are never deployed (deploy is gated on github.ref == 'refs/heads/main'). Note that the upstream advisory rates the vector AC:H while the NVD-style vector supplied with the CVE record shows AC:L; the higher-complexity AC:H rating is the one used here because landing an executing event-handler payload in captured program output is not straightforward and was not demonstrated end to end.
Know when Conda Forge Github Io gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N
AV:N (web origin) but AC:H because reliably landing an executing payload in bot-captured output is non-trivial and undemonstrated; PR:L for required feedstock control; UI:R as a victim must view the status entry.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
conda-forge is a GitHub organization containing repositories of conda recipes. In commits 85748ad2368a and prior, two React components render externally-sourced strings directly as HTML using dangerouslySetInnerHTML, with no sanitization (the project has no DOMPurify or equivalent dependency). JSON files are produced automatically by the conda-forge autotick bot (regro/cf-scripts) while it processes every conda-forge feedstock and its upstream source artifacts. The error/status strings embed raw output captured from those processes (build logs, patch output, tracebacks). The website renders them verbatim as HTML. At time of publication, there are no publicly available patches.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
EUVD-2026-108820
NVD
CVE.org
EPSS
GitHub
Exploit-DB