Skip to content

fix(deps): raise litellm floor to 1.84.0 and exclude hijacked 1.107.0 - #71

Merged
myui merged 4 commits into
mainfrom
fix/litellm-supply-chain
Oct 21, 2026
Merged

myui merged 4 commits into
mainfrom
fix/litellm-supply-chain

Conversation

@myui

@myui myui commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator

What

Updates the litellm requirement from litellm>=1.79.1,!=1.82.7,!=1.82.8 to litellm>=1.84.0,!=1.107.0.

Why

litellm 1.107.0 on PyPI was hijacked (JFrog write-up, BerriAI/litellm#47826). All platform wheels drop a .pth startup hook and sitecustomize.py into site-packages. On every Python start (pip included, no import litellm needed) they collect env vars, SSH/cloud/Kubernetes credentials, AI-assistant tokens, and send them to an attacker host.

Our previous range >=1.79.1 still allowed 1.107.0, so a plain pip install graflow during the window could have resolved to the bad wheel.

While here, the floor is raised to 1.84.0:

Impact on existing installs

  • uv.lock isn't tracked in this repo, so only the declared specifier changes.
  • PyPI has already removed 1.107.0, but mirrors and caches (Artifactory, pip caches) may still serve it. This exclusion stops the resolver from picking it.
  • Users pinned to litellm < 1.84.0 will need to upgrade.

Anyone who installed graflow with pip and got litellm 1.107.0 should treat the host as compromised and rotate credentials (see the JFrog post for IOCs).

Testing

  • uv pip compile pyproject.toml: resolves, picking litellm 1.105.1.

🤖 Generated with Claude Code

myui and others added 3 commits October 22, 2026 00:24
litellm 1.107.0 on PyPI shipped backdoored wheels with a .pth startup
hook that steals credentials on every Python start, even without
importing litellm. Our previous range (>=1.79.1) still admitted it.

- Raise the floor to 1.84.0 for the SSRF fix in 1.83.7
  (GHSA-xqmj-j6mv-4862) and CVE-2026-49468 fixed in 1.84.0. This also
  skips the earlier compromised lines 1.80.16 / 1.82.3 / 1.82.7 / 1.82.8.
- Explicitly exclude 1.107.0 (BerriAI/litellm#47826).

Refs: https://research.jfrog.com/post/litellm-hijacked-again/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Recent ruff releases started reporting PLR0917 under the "PL" selection,
which breaks CI on existing public APIs (up to 14 positional args).
PLR0913 (too-many-arguments) is already ignored, so ignore PLR0917 for
consistency.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Recent ruff releases also format Python code blocks embedded in
Markdown, so `ruff format --check .` in CI started failing on 59
README/docs files. Docs don't need code formatting checks; exclude
*.md from formatting only (lint is unaffected).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@myui myui added the security Fix security and/or vuls related. label Oct 21, 2026
CI started failing after the latest dependency releases were resolved:

- redis-py 8 stores pool-internal entries (e.g. himport_registry) in
  connection_pool.connection_kwargs, which Redis.__init__ rejects.
  GraphStore._ensure_binary_client now passes only constructor
  parameters when recreating a binary-safe client.
- Starlette 1.x removed the legacy TemplateResponse(name, {"request": ...})
  signature. Use TemplateResponse(request, name, context) instead
  (supported since Starlette 0.29).
- redis-py 8 sets socket_timeout=5 by default; update the round-trip test
  to expect the original client's socket_timeout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@myui
myui merged commit 80af2a8 into main Oct 21, 2026
7 checks passed
@myui
myui deleted the fix/litellm-supply-chain branch October 21, 2026 16:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security Fix security and/or vuls related.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant