Someone just poisoned the Python package that manages AI API keys for NASA, Netflix, Stripe, and NVIDIA.. 97 million downloads a month.. and a simple pip install was enough to steal everything on your machine.
The attacker picked the one package whose entire job is holding every AI credential in the organization in one place. OpenAI keys, Anthropic keys, Google keys, Amazon keys… all routed through one proxy. All compromised at once.
The poisoned version was published straight to PyPI.. no code on GitHub.. no release tag.. no review. Just a file that Python runs automatically on startup. You didn’t need to import it. You didn’t need to call it. The malware fired the second the package existed on your machine.
The attacker vibe coded it… the malware was so sloppy it crashed computers.. used so much RAM a developer noticed their machine dying and investigated. They found LiteLLM had been pulled in through a Cursor MCP plugin they didn’t even know they had.
That crash is the only reason thousands of companies aren’t fully exfiltrated right now. If the code had been cleaner nobody notices for weeks. Maybe months.
The attack chain is the part that gets worse every sentence.
TeamPCP compromised Trivy first. A security scanning tool. On March 19. LiteLLM used Trivy in its own CI pipeline… so the credentials stolen from the SECURITY product were used to hijack the AI product that holds all your other credentials.
Then they hit GitHub Actions. Then Docker Hub. Then npm. Then Open VSX. Five package ecosystems in two weeks. Each breach giving them the credentials to unlock the next one.
The payload was three stages.. harvest every SSH key, cloud token, Kubernetes secret, crypto wallet, and .env file on the machine.. deploy privileged containers across every node in the cluster.. install a persistent backdoor waiting for new instructions.
TeamPCP posted on Telegram after: “Many of your favourite security tools and open-source projects will be targeted in the months to come.. stay tuned.”
Every AI agent, copilot, and internal tool your company shipped this year runs on hundreds of packages exactly like this one… nobody chose to install LiteLLM on that developer’s machine. It came in as a dependency of a dependency of a plugin. One compromised maintainer account turned the entire trust chain into a credential harvesting operation across thousands of production environments in hours.
The companies deploying AI the fastest right now have the least visibility into what’s underneath it.
Live look at Malwarebytes engineers updating the Browser Guard extension every time Google makes a change to ad blocking.
Because we love you and ads, trackers, and scams suck. 😘
Let me let you in on a little secret about 1990s nostalgia: you don't miss Blockbuster or dine-in Pizza Hut. You miss analog life with other people who weren't distracted and were really present to enjoy mundane moments with you.
Check out my DADSONLY page. DADSONLY is the only site with exclusive pictures and videos of fathers taking out rubbish, connecting cables, lounging on chairs and wearing swimwear that is between 3 - 20 years old...
🥚 GIVEAWAY ALERT 🥚
Before you hunt for eggs this weekend, we hid an Easter egg in the latest version of Malwarebytes for Windows (MB5).
Post a screenshot of your high score for a chance to win 1 of 5 LIFETIME KEYS our intern found in the Malwarebytes basement.
Happy hunting!
@GuyDealership would have loved to lease one... but wow it's more expensive than a model y (and that's expensive too :P). I'm not sure who this car is for really at that price point.
@devongovett @darkhorizontal @zeddotdev You're right there is a config option. I got it to use eslint in my project with this:
```
"language_overrides": {
"JavaScript": {
"format_on_save": {
"external": {
"command": "eslint",
"arguments": []
}
}
}
```