NOW LET US – AI RAG SaaS Studio TP.HCM
NOW LET US
Digital Product Studio
Back to news
DEV-TOOLS...1 min read

My minute-by-minute response to the LiteLLM malware attack

Share
NOW LET US Article – My minute-by-minute response to the LiteLLM malware attack

A technical analysis reveals that the suspected malware attack was actually a runaway process loop caused by Claude Code, not a malicious intrusion.

Now I have the full picture. Here's my analysis:

What 2.1.81 is: Claude Code v2.1.81. You had

5 Claude Code instancesrunning at shutdown time.

Shutdown timeline:

01:36:33â Force shutdown initiated01:36:36â Shutdown stall captured (162 processes still running, 21 of them Python)01:37:11â System booted

Process tree at shutdown:

Normal Claude Code MCP servers (2 instances):

Claude Code [82193] â python3.13 [88842] â node [88854] (416MB)
Claude Code [35621] â python3.13 [45088] â node [45091] (228MB)

These are MCP server bridges â Python wraps a Node.js MCP server. Normal behavior.

A uv run

chain:

zsh â uv [74172] (deadlocked) â python3.13 [74174] (running a .py file)
â python3.13 [74180] (python -c "...", reading pipe)
â python3.13 [86263] (running .py file, sleeping + os.stat)
â python3.13 [86264] (python -c "...", reading pipe)

14 orphaned python -c processes (two batches of 7):

  • PIDs 89759-89765 (~38 hours old)
  • PIDs 67956-67962 (different age)
  • All running _PyRun_SimpleStringFlagsWithName

â this ispython -c "exec(base64.b64decode(...))"

  • All orphaned (parent died, reparented to launchd)
  • All stuck reading from a dead pipe

What likely happened:

The exec(base64.b64decode('...'))

pattern is not malware â it's how Python tooling (including Claude Code's Bash tool) passes code snippets to python -c

while avoiding shell escaping issues. The base64 encoding is just a safe transport mechanism.

The 11k process storm was likely a runaway spawning loop from one of these sources:

  • A Claude Code tool/agent interaction that got stuck in a loop spawning python -c

processes - A uv run

script (the 74174 chain) that had a subprocess spawning bug

Good news:

No persistence mechanisms foundâ no suspicious crontabs, launch agents, or launchd jobsNo suspicious Python processes running nowâ clean after rebootAll processes used your local uv Pythonâ nothing from unknown pathsNo malicious indicatorsâ all parents trace back to Claude Code, uv, or zsh

Recommendations:

  • Check if you had a Claude Code agent running in a loop before the incident
  • If it happens again, try killall python3.13

before force-shutting down - Consider setting a process limit: ulimit -u 2048

in your.zshrc

to prevent fork bombs

Initial theory was completely wrong, Claude blaming Claude

© 2026 Now Let Us. All rights reserved.

Source: Hacker News

Advertisement
Ad slot ready: 5887729102

More in this category

EXPLORE TOPICS

Discover All Categories

Deep dive into the specific technology sectors that matter most to you.