GHSA-98x5-vq43-vc5p: semantic-router: unpinned litellm dep pulls malware wheel
GHSA-98x5-vq43-vc5p CRITICALsemantic-router versions 0.1.8 through 0.1.14 declared litellm>=1.61.3 with no upper bound, so a fresh `pip install` during the window that litellm 1.82.8 sat on PyPI could silently pull that compromised wheel instead of a legitimate release. The malicious wheel shipped a `.pth` file that executes at Python interpreter startup — no import, no user action required — harvesting cloud credentials, SSH keys, Kubernetes configs, database secrets and crypto wallets, then AES/RSA-encrypting and exfiltrating them to an attacker-controlled domain. There is no CVSS/EPSS scoring and it is not in CISA KEV, but the payload class (full credential theft plus silent exfiltration) makes actual impact severe wherever an affected install landed during the compromise window; with only 6 known downstream dependents the blast radius is narrow but not zero, and semantic-router's OpenSSF Scorecard of 6/10 and 34 other historical CVEs in the package suggest broader dependency-hygiene gaps worth reviewing. Upgrade to semantic-router 0.1.15 (which floors litellm at >=1.83.7) immediately, and separately audit any environment that ran `pip install` against affected versions for a lingering `litellm_init.pth` in site-packages, rotating every credential reachable from that environment (cloud, SSH, DB, CI/CD, wallets) as a precaution regardless of whether the file is found.
What is the risk?
Rated critical by the advisory, but exploitation was time-bounded rather than persistent: the malicious litellm 1.82.8 wheel was only resolvable while it was the latest matching release on PyPI, so exposure is limited to installs (or CI/CD builds, or container rebuilds) that ran during that specific window — not every historical install of semantic-router 0.1.8–0.1.14. No public exploit tooling or Nuclei template exists (none is needed; the vector is a legitimate-looking package publish), and it is not in CISA KEV or scored for EPSS since this is a supply-chain compromise rather than a remotely triggerable vulnerability. The real risk driver is CWE-506 (Embedded Malicious Code) combined with zero-interaction execution at interpreter startup — any host, CI runner, or developer machine that resolved the bad wheel should be treated as fully compromised (credentials, not just the process, are the asset at risk).
How does the attack unfold?
What systems are affected?
How severe is it?
What should I do?
1 step-
1) Upgrade to semantic-router >=0.1.15, which raises the litellm floor to >=1.83.7, excluding the compromised release. 2) If immediate upgrade isn't possible, explicitly pin
litellm>=1.83.7,!=1.82.8in your own project's dependency file to override the floating range. 3) Auditsite-packages/on any host or image that ranpip installfor semantic-router 0.1.8–0.1.14 during the exposure window for alitellm_init.pthfile; delete it if present and treat the host as compromised. 4) Rotate every credential reachable from that environment: cloud IAM keys, SSH keys, kubeconfigs, DB credentials, CI/CD secrets, and any crypto wallets. 5) Review CI/CD build logs and container image build timestamps to determine which artifacts were built during the exposure window and rebuild/redeploy them from a clean, patched dependency tree. 6) Going forward, pin transitive dependencies (or use lockfiles with hash verification) for AI/ML packages to prevent floating ranges from silently pulling a compromised release.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is GHSA-98x5-vq43-vc5p?
semantic-router versions 0.1.8 through 0.1.14 declared litellm>=1.61.3 with no upper bound, so a fresh `pip install` during the window that litellm 1.82.8 sat on PyPI could silently pull that compromised wheel instead of a legitimate release. The malicious wheel shipped a `.pth` file that executes at Python interpreter startup — no import, no user action required — harvesting cloud credentials, SSH keys, Kubernetes configs, database secrets and crypto wallets, then AES/RSA-encrypting and exfiltrating them to an attacker-controlled domain. There is no CVSS/EPSS scoring and it is not in CISA KEV, but the payload class (full credential theft plus silent exfiltration) makes actual impact severe wherever an affected install landed during the compromise window; with only 6 known downstream dependents the blast radius is narrow but not zero, and semantic-router's OpenSSF Scorecard of 6/10 and 34 other historical CVEs in the package suggest broader dependency-hygiene gaps worth reviewing. Upgrade to semantic-router 0.1.15 (which floors litellm at >=1.83.7) immediately, and separately audit any environment that ran `pip install` against affected versions for a lingering `litellm_init.pth` in site-packages, rotating every credential reachable from that environment (cloud, SSH, DB, CI/CD, wallets) as a precaution regardless of whether the file is found.
Is GHSA-98x5-vq43-vc5p actively exploited?
No confirmed active exploitation of GHSA-98x5-vq43-vc5p has been reported, but organizations should still patch proactively.
How to fix GHSA-98x5-vq43-vc5p?
1) Upgrade to semantic-router >=0.1.15, which raises the litellm floor to >=1.83.7, excluding the compromised release. 2) If immediate upgrade isn't possible, explicitly pin `litellm>=1.83.7,!=1.82.8` in your own project's dependency file to override the floating range. 3) Audit `site-packages/` on any host or image that ran `pip install` for semantic-router 0.1.8–0.1.14 during the exposure window for a `litellm_init.pth` file; delete it if present and treat the host as compromised. 4) Rotate every credential reachable from that environment: cloud IAM keys, SSH keys, kubeconfigs, DB credentials, CI/CD secrets, and any crypto wallets. 5) Review CI/CD build logs and container image build timestamps to determine which artifacts were built during the exposure window and rebuild/redeploy them from a clean, patched dependency tree. 6) Going forward, pin transitive dependencies (or use lockfiles with hash verification) for AI/ML packages to prevent floating ranges from silently pulling a compromised release.
What systems are affected by GHSA-98x5-vq43-vc5p?
This vulnerability affects the following AI/ML architecture patterns: LLM routing/gateway layers, RAG pipelines, agent frameworks, CI/CD build pipelines.
What is the CVSS score for GHSA-98x5-vq43-vc5p?
No CVSS score has been assigned yet.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001 AI Software AML.T0011.001 Malicious Package AML.T0025 Exfiltration via Cyber Means AML.T0055 Unsecured Credentials AML.T0109 AI Supply Chain Rug Pull Compliance Controls Affected
What are the technical details?
Original Advisory
## Impact semantic-router versions 0.1.8 through 0.1.14 declare `litellm>=1.61.3` with no upper bound. During the window in which `litellm==1.82.8` was the latest release on PyPI, a fresh install of any affected semantic-router version could resolve to that compromised wheel. The malicious `litellm==1.82.8` wheel ships a `litellm_init.pth` file that executes on Python interpreter startup — no import required. It collects and exfiltrates: - Process environment variables - AWS / GCP / Azure credentials - SSH keys, Kubernetes configs, shell history - Database credentials and CI/CD secrets - Cryptocurrency wallets Stage-two payload encrypts the collected data (AES-256 + embedded RSA pubkey) and POSTs it to `https://models.litellm.cloud/`. See upstream: [BerriAI/litellm#24512](https://github.com/BerriAI/litellm/issues/24512) and [CVE-2026-42208](https://www.cve.org/CVERecord?id=CVE-2026-42208). ## Patches Fixed in **semantic-router 0.1.15**, which raises the floor to `litellm>=1.83.7`. ## Workarounds If developers cannot upgrade immediately: - Pin `litellm>=1.83.7,!=1.82.8` explicitly in their own project. - Audit `site-packages/` for `litellm_init.pth` and delete if present. - Rotate any credentials reachable from environments where an affected install ran. ## Credit Upstream report and triage by the litellm maintainers — see issue [#24512](https://github.com/BerriAI/litellm/issues/24512). One caveat before publishing CVE-2026-42208 specifically names 1.82.8. Pip's resolver picks "latest matching", so the real affected blast radius for semantic-router is users who ran pip install during the window that 1.82.8 was on PyPI — not everyone who ever installed 0.1.8–0.1.14. The advisory is still correct (an affected install could have pulled the bad wheel), but consider whether a Severity: Critical / Exploitability: time-bounded note would help downstream readers understand the exposure model.
Exploitation Scenario
A developer or CI pipeline runs `pip install semantic-router==0.1.12` (or any affected 0.1.8–0.1.14 version) during the window that litellm 1.82.8 is the latest matching release on PyPI. pip's resolver silently pulls litellm 1.82.8 to satisfy the unbounded `litellm>=1.61.3` constraint. The wheel installs a `litellm_init.pth` file, which Python's site module auto-executes the next time any Python interpreter starts in that environment — no explicit `import litellm` required. The payload immediately harvests environment variables, cloud provider credentials, SSH keys, Kubernetes configs, shell history, database credentials, CI/CD secrets, and any crypto wallets present, encrypts the haul with AES-256 plus an embedded RSA public key, and exfiltrates it via HTTPS POST to `models.litellm.cloud`. If this occurred inside a CI/CD runner, the attacker gains a path to every secret and deployment credential exposed to that pipeline, not just the local developer's data.
Weaknesses (CWE)
CWE-506 — Embedded Malicious Code: The product contains code that appears to be malicious in nature.
- [Implementation, Operation] Remove the malicious code and start an effort to ensure that no more malicious code exists. This may require a detailed review of all code, as it is possible to hide a serious attack in only one or two lines of code. These lines may be located almost anywhere in an application and may have been intentionally obfuscated by the attacker.
Source: MITRE CWE corpus.
References
Timeline
Related Vulnerabilities
CVE-2026-42208 9.8 LiteLLM: SQL injection exposes LLM API credentials
Same package: litellm CVE-2026-30623 9.8 LiteLLM: RCE via unsanitized MCP server config
Same package: litellm CVE-2026-54352 9.6 Budibase: zip symlink bypass exposes all server secrets
Same package: litellm CVE-2026-35030 9.1 LiteLLM: auth bypass via JWT cache key collision
Same package: litellm CVE-2026-35029 8.8 LiteLLM: auth bypass allows RCE and full takeover
Same package: litellm