Free tech learning for everyone, from basics to pro

Photo: Juanjo Jaramillo on Unsplash

Security

The LiteLLM poisoned release: lessons for every dev team

Attackers used stolen GitHub tokens to push a credential-stealing version of a popular AI tool through its own release pipeline. What happened, and the controls that would have stopped it.

On 21 October 2026, a malicious version of LiteLLM, a widely used open-source library for connecting apps to AI models, was published to PyPI and as container images. It was live for roughly two hours. That was long enough for automated builds around the world to pull it in. The LiteLLM team published an unusually detailed incident report, and it is worth reading for anyone who runs a CI/CD pipeline.

How the attacker got in

According to the report, the attacker held GitHub CLI tokens for three developers. One belonged to an organisation owner. With it, the attacker:

  1. Overrode branch protection on the private release workflow.
  2. Pointed the release process at a lookalike repository they controlled.
  3. Used a second developer's token to satisfy the production approval gate.
  4. Let the official pipeline sign and publish the poisoned package and images.
  5. Used a third token to delete workflow run records, slowing the investigation.

The team suspects the tokens leaked from logs on an internal deployment that had been exposed to the internet. Release permissions had also been widened temporarily earlier that week for bugfix backports.

What the malware did

The poisoned package stole credentials from the environment and could load further remote code. It also re-ran every time Python started in that environment. The guidance was blunt: if you installed it on a machine with internet access, assume your secrets are gone and rotate everything it could reach, including cloud roles, AI provider keys and database passwords.

Five controls that matter

  • Short-lived, narrowly scoped tokens. Long-lived personal tokens with owner rights are a gift to attackers. Prefer short-lived credentials issued per job.
  • Approvals that one account cannot bypass. If a single owner token can disable branch protection, the protection is advisory. Alert on any change to rulesets.
  • Never log secrets. Scrub logs and restrict who can read them. Treat any exposed log as a leaked secret.
  • Pin and verify dependencies. Use lock files and hashes, and do not let production builds float to "latest".
  • Separate build secrets from runtime secrets. A build agent should not hold the keys to your production database.

If you consume open source

You cannot audit every package, but you can reduce blast radius. Pin versions, delay automatic adoption of brand-new releases for critical dependencies by a day or two where practical, watch security advisories for the packages you depend on most, and keep a software bill of materials so you can answer "are we affected?" in minutes. Our notes on supply chain security and secrets management go into the tooling.

The uncomfortable truth

Every individual control in the LiteLLM pipeline existed. The attacker simply had enough stolen identities to walk past each one. Identity is now the main battleground in software delivery, just as it is for firewalls and email. Protect developer accounts as carefully as production servers.

Sources

About the author

Mohamed Fayas

Founder of FM TecHub. CCNA certified, with a BTEC HND in Network Engineering, and BEng (Hons) in Computer Networking and Cloud Security. He writes practical, plain-English guides on networking, security and cloud.

More about the author

Written by Mohamed Fayas for FM TecHub. © 2026 FM TecHub. Share the link freely; please don't copy the text elsewhere without permission.

Stay up to date by email

New notes, tools and security news from FM TecHub, explained simply. Free.

We only use your email to send these updates. See our privacy policy.