AIDEFEND in Action AIA-0100 Incident Published: Oct 23, 2026

LiteLLM 1.107.0: An Unrevoked Agent Key Reaches the Signed Release Pipeline

On October 21, LiteLLM, a Python library and gateway for accessing model providers, published a credential-stealing 1.107.0 release through its legitimate build and signing pipeline. The vendor's October 23 investigation traces entry to an unrevoked master key leaked from its experimental Agent Platform, followed by theft of an organization-owner GitHub token. Separate CI runs stole two maintainer tokens. Consumer-side admission of previously approved exact bytes, and revocation at each credential issuer, address boundaries that a valid release signature did not protect.

Supply Chain CompromiseCredential ExposurePackage VettingAI Infrastructure
5 applicable AIDEFEND defenses
Source: The attack chain behind the v1.107.0 LiteLLM release 
Authors: Oliver Jensen and Mateo Wang
Original article: Oct 23, 2026

Threat Analysis

The corrected entry point is an AI agent orchestration service. A master key committed publicly on May 27 stayed valid after the commit was hidden by force-push. On October 10 the attacker used it to retrieve agent configurations, including a human GitHub organization owner's CLI OAuth token. That token had broad owner authority and was already past multi-factor authentication. The vendor's October 23 investigation supersedes the earlier hypothesis that model response logs supplied the first token.

The owner identity enabled two separate throwaway CI runs to export two maintainers' tokens. On October 21 the attacker changed the release workflow to consume a lookalike repository, after an initial protected push failed and an owner override succeeded. The observed release used one compromised identity to trigger the pipeline and another to approve it. The vendor explicitly notes that owner authority could also have removed those restrictions, so the two-person gate was not independent of the compromise.

The real pipeline signed and published the malicious wheels and containers. On an affected consumer, cook.pth in site-packages executed during Python startup, loading cook.py and collecting accessible credentials. Wiz's analysis also identifies sitecustomize.py, a credential-database query and an encrypted HTTP exfiltration path. The remote loader was dormant; it is not evidence of a later executed command. Platform-specific failures mean not every code branch worked on every operating system.

The canonical timeline places wheel publication around 11:40 UTC on October 21, PyPI freezing at 13:23 UTC and container removal at 14:20 UTC. Download estimates describe distribution, not confirmed victims. Credential checks and Bedrock model enumeration after the theft support an abuse investigation, but do not establish paid inference consumption. This October incident is separate from the earlier malicious LiteLLM 1.82.x releases.

Applicable AIDEFEND Defenses (5)

AID-E-001.001
Root & Long-Lived Credential Object Eviction
Very High
Revoke the exact exposed Agent Platform master-key generation at its authoritative verifier when the public exposure is discovered, then probe the management API with the old value and reconcile every consumer. Removing a Git commit does not invalidate a key. G001 requires an Agent Platform-specific revocation/readback adapter; its AWS access-key example is not a built-in LiteLLM integration. Timely verified invalidation would remove the credential used for the October 10 entry.
AID-H-003.001
Software Dependency & Package Security
Very High
Require consumer builds and deployments to install only independently approved exact versions and hashes from a controlled mirror, including container digests and the complete dependency closure. A previously approved known-good artifact must remain pinned until a separate review authorizes new bytes; version 1.107.0 or a moving latest tag must not be admitted just because the official publisher signed it. This stops this distribution step only where implicit upgrades and direct registry bypasses are blocked.
AID-E-001.002
Issued Token, Authentication Session & Lease Revocation
High
After discovery, revoke all three stolen GitHub CLI OAuth token generations through GitHub and verify denied authenticated API probes for each identity and affected repository. Revoke the Agent Platform root key separately. Replacing that root key, resetting a password or enabling MFA does not invalidate the already exported post-MFA OAuth tokens. This is incident containment, not retroactive prevention of the published release.
AID-I-001.002
MicroVM & Low-Level Sandboxing
High
Run untrusted AI dependencies inside a separately enforced managed VM or supported OS sandbox without the developer home, browser stores, cloud credentials or a production credential database mounted into it. Apply the boundary before Python starts, because .pth code runs before a normal application import. This limits accessible assets but does not make the malicious package safe or protect credentials intentionally placed inside the same environment.
AID-H-003.005
Infrastructure as Code (IaC) Security Scanning for AI Systems
Medium
Scan current files, repository history and candidate changes for credentials before publication, including agent configuration formats such as opencode.json. A verified finding must trigger issuer-side revocation rather than just history rewriting. Pattern coverage and private/force-pushed commits need separate verification; scanning supports discovery and cannot itself invalidate the exposed key.

What Defenders Should Do Now

  • On a clean control host, determine whether the exact affected wheel or container digest was installed or executed. Treat affected environments as compromised. Do not start the affected Python interpreter to perform cleanup: startup itself can run the stealer.
  • Preserve evidence, replace the environment with independently verified clean artifacts, and revoke exposed cloud, model-provider, browser/developer and database credentials at their issuers. Handle previously issued tokens separately from their root credentials and verify rejection with old values.
  • Use an organization-controlled package mirror with exact approved versions, dependency hashes and container digests. Block direct-registry and automatic-upgrade paths. A valid official signature is useful provenance, not proof that these bytes were independently reviewed.
  • Remove human organization-owner tokens from agent configurations. Use service identities with repository/action scopes and prevent the agent-management API from returning reusable credential values.
  • Protect release-source selection and emergency overrides with an authority outside the same compromised administrator boundary. Preserve audit evidence outside the repository organization and investigate CI secret access as well as the final release.

Conclusion

AIDEFEND  identifies separate controls for the credential entry point, issued-token containment, admission of exact third-party bytes and isolation of code from secrets. For this incident, a signed release was still malicious: the consumer needs an independent approval boundary, while the producer must invalidate every exposed credential generation rather than merely erase its Git history.

Last updated: