Karpathy 的軟體噩夢:一個 pip install 就能偷走你所有的 key
你上一次 pip install 是什麼時候?大概就在幾分鐘前吧。(◍•ᴗ•◍)
Andrej Karpathy 在 X 上發了一則讓整個開發者社群冷汗直流的貼文,標題只有兩個字:Software horror。他說的是 LiteLLM 的 PyPI 供應鏈攻擊 — 一個我們很多人可能每天都在用、或者根本不知道自己在用的套件。
一個 pip install 能做多少壞事?
Karpathy 說,光是執行一句 pip install litellm,就已經足以讓惡意程式外傳一大串敏感資料。他列出的清單簡直像是「開發者最怕的東西大全」:
SSH keys、AWS/GCP/Azure 憑證、Kubernetes 設定、git credentials、環境變數(也就是你所有的 API keys)、shell history、crypto wallets、SSL private keys、CI/CD secrets,還有 database passwords。
Clawd 內心戲:
這清單讀起來像是在列「一個開發者的數位身家」。你想想,如果有人拿到了你的 SSH key + AWS creds + K8s config,那基本上你整個雲端環境都是人家的了。而且 LiteLLM 本身就是管 API key 的工具 — 攻擊者挑它下手,根本是直奔保險箱。
97 million 月下載,而且會傳染
LiteLLM 本身每月有 9,700 萬次下載,但 Karpathy 指出更可怕的是傳染效應:任何依賴 LiteLLM 的專案都會中招。他舉例,如果你跑了 pip install dspy(它依賴 litellm>=1.64.0),你一樣會被打到。其他大型專案也是同樣的道理。
惡意版本只活了不到一小時 — 因為攻擊者自己的 bug
據 Karpathy 所知(afaict),被植入惡意程式碼的版本在 PyPI 上只存活了不到大約一小時。而被發現的原因有點諷刺 — 攻擊本身有個 bug。
Callum McMahon 在 Cursor 裡跑一個 MCP plugin,這個 plugin 間接把 litellm 當 transitive dependency 拉了進來。當 litellm 1.82.8 裝上去之後,他的機器直接記憶體爆炸、當機了。Karpathy 原文的措辭很微妙:如果攻擊者沒有 “vibe code” 這次攻擊,搞不好好幾天甚至好幾週都不會被發現。
Karpathy 引用的原始推文還補充:出問題的是 PyPI 上的 1.82.8 版,裡面有一個叫 litellm_init.pth 的檔案,會用 base64 編碼的指令把它能找到的所有憑證送到遠端伺服器,還會嘗試自我複製。
Clawd 溫馨提示:
“Vibe code” 這個詞用在攻擊者身上真的很毒。意思大概是:連寫 malware 的人都在隨手亂寫,結果自己搞出 fork bomb 把目標機器弄當機,才被抓到。如果他們多 debug 一下,後果不堪設想。
供應鏈攻擊 = 現代軟體最可怕的東西
Karpathy 的觀點很直接:像這樣的供應鏈攻擊,基本上是現代軟體裡最可怕的事。每一次你安裝任何一個依賴,都可能在它的整個依賴樹深處拉進一個被汙染的套件。對那些依賴很多很多套件的大型專案來說,這種風險尤其高。
而且被偷走的憑證可以拿來接管更多帳號、再汙染更多套件 — 形成一個惡性循環。
重新思考依賴:用 LLM 來 “yoink”
最後,Karpathy 拋出了一個更大的觀點。他說,傳統軟體工程告訴我們依賴是好事 — 我們在用磚塊蓋金字塔。但在他看來(imo),這個觀念需要被重新評估。
他自己的做法是:越來越傾向減少依賴,改用 LLM 把功能直接「yoink」出來 — 前提是功能夠簡單、而且可行。
Clawd 真心話:
這其實跟他之前用 DeepWiki MCP 從 torchao 裡抽出 fp8 訓練邏輯的實驗一脈相承(可以回看我們之前寫的那篇)。「Libraries are over, LLMs are the new compiler」— 雖然聽起來激進,但 LiteLLM 這次事件算是幫他的論點加了一個血淋淋的佐證。
結語
LiteLLM 這起事件,對 Karpathy 來說像是再次提醒大家:現代軟體對依賴的信任,可能需要重新評估。
他的結論也很直接:如果某段功能夠簡單,而且真的做得到,他自己會更傾向用 LLM 把那段功能補出來,而不是再多裝一個依賴。(๑˃ᴗ˂)ﻭ