A poisoned security scanner was used to steal PyPI publishing credentials, injecting a multi-stage credential stealer into one of the world's most downloaded AI libraries — 95 million times per month.
v0.69.4 into the trivy-action GitHub Action repository. Tags were rewritten to point at malicious commits containing a credential-harvesting payload and C2 exfiltration infrastructure. This became the root of the entire cascade.checkmarx.zone was registered — a convincing impersonation of the legitimate Checkmarx security company. PyPI tokens from CI environments began accumulating in attacker infrastructure.apt without a pinned version. The compromised Trivy action exfiltrated the PYPI_PUBLISH token from the runner environment. With this credential, attackers published v1.82.7 at 10:39 UTC and the escalated v1.82.8 at 10:52 UTC — uploaded directly to PyPI, bypassing GitHub releases entirely.#24512, attackers deployed 73 previously compromised developer accounts — flooding the thread in under two minutes to suppress disclosure. The hijacked krrishdholakia maintainer account closed the issue as "not planned." Researchers confirmed 76% account overlap with the Trivy suppression botnet. The community reopened tracking via issue #24518 and Hacker News (324 points).requirements.txt.node-setup-* to every node in the cluster. Extracts cluster secrets, service account tokens, and kubeconfig files to maximize blast radius across infrastructure.sysmon.service that polls checkmarx.zone for additional binaries. Survives reboots. Enables ongoing access long after initial compromise.litellm/proxy/proxy_server.py.
Payload executes on module import — decodes base64 blob and launches via subprocess.
Exfiltrates to checkmarx.zone.
litellm_init.pth to the Python environment's site-packages.
.pth files execute on every Python process start —
even if litellm is never imported. Payload now runs for all Python scripts on the machine.
Exfiltrates to models.litellm.cloud (attacker-controlled domain).
| TYPE | INDICATOR | SEVERITY |
|---|---|---|
| FILE | ~/.config/sysmon/sysmon.py | CRITICAL |
| SYSTEMD | ~/.config/systemd/user/sysmon.service | CRITICAL |
| PYTHON | litellm_init.pth in site-packages/ | CRITICAL |
| K8S POD | node-setup-* in kube-system namespace | CRITICAL |
| C2 DOMAIN | checkmarx.zone / checkmarx.zone/raw | HIGH |
| C2 DOMAIN | models.litellm.cloud | HIGH |
| PKG VERSION | litellm==1.82.7 or litellm==1.82.8 | CRITICAL |
| SNYK ID | SNYK-PYTHON-LITELLM-15762713 | REF |
pip show litellm. Affected if on 1.82.7 or 1.82.8. Also check transitive dependencies — MCP plugins, Cursor IDE, agent frameworks, and LLM orchestration tools may have pulled it in without explicit install.pip uninstall litellm then pip cache purge or rm -rf ~/.cache/uv to prevent reinstallation from cached wheels..env API keys (OpenAI, Anthropic, etc.), database passwords, GitHub tokens, Docker Hub credentials.~/.config/sysmon/sysmon.py, ~/.config/systemd/user/sysmon.service, and litellm_init.pth in site-packages. If K8s: audit kube-system for node-setup-* pods and cluster secrets.pip install litellm==1.82.6 — last confirmed clean release. Or upgrade to v1.82.9+ once your team has verified the release provenance.checkmarx.zone and models.litellm.cloud. Monitor for any historical connections to these domains in your DNS and proxy logs.