CVE-2025-51464
Description
Cross-site Scripting (XSS) in aimhubio Aim 3.28.0 allows remote attackers to execute arbitrary JavaScript in victims browsers via malicious Python code submitted to the /api/reports endpoint, which is interpreted and executed by Pyodide when the report is viewed. No sanitisation or sandbox restrictions prevent JavaScript execution via pyodide.code.run_js().
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
A stored XSS in Aim 3.28.0 lets attackers execute arbitrary JavaScript via Python code in /api/reports, using Pyodide's unrestricted JS bridge.
Vulnerability
Description
CVE-2025-51464 is a stored cross-site scripting (XSS) vulnerability in aimhubio Aim version 3.28.0, an open-source ML experiment tracker [1]. The flaw exists in the "/api/reports" endpoint, which accepts user-supplied Python code in the code field of POST requests. This code is stored in the database without sanitization and later embedded into a React component when a report is viewed. The markdown renderer interprets code blocks with the "aim" language tag and passes them to the Board component for execution via Pyodide [3].
Exploitation
An attacker can submit a malicious report containing Python code that calls pyodide.code.run_js() to execute arbitrary JavaScript in the victim's browser. Since there are no restrictions on the JavaScript bridge, an attacker can break out of the intended Python sandbox [3]. The attack requires no authentication beyond regular access to the API, and the malicious payload is executed automatically when any user views the affected report [2]. A proof-of-concept demonstrates using fetch() to exfiltrate data from the application's API to an attacker-controlled server [3].
Impact
Successful exploitation allows remote attackers to execute arbitrary JavaScript in the context of the Aim application. This can lead to session hijacking, data theft (including other reports), and further malicious actions within the victim's browser session [2]. The vulnerability is classified as stored XSS because the payload persists in the database and impacts all viewers of the crafted report.
Mitigation
The issue has been addressed in a pull request (PR #3333) on the aimhubio/aim repository [4]. Users should update Aim to a patched version that restricts Pyodide's JavaScript bridge (e.g., by removing or sandboxing run_js) and sanitizes user-supplied code in reports. No official advisory with a new release version has been published as of the CVE publication date [1][4].
AI Insight generated on May 19, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
aimPyPI | <= 3.30.0.dev20250611 | — |
Affected products
2- aimhubio/Aimdescription
Patches
0No patches discovered yet.
Vulnerability mechanics
AI mechanics synthesis has not run for this CVE yet.
References
4- github.com/advisories/GHSA-gmvv-rj92-9w35ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2025-51464ghsaADVISORY
- github.com/aimhubio/aim/pull/3333ghsaWEB
- www.gecko.security/blog/cve-2025-51464ghsaWEB
News mentions
0No linked articles in our index yet.