ディスカッション (11件)
約1時間前、PyPIにLitellmの新しいバージョンがデプロイされましたが、非常に危険な状態です。
新規プロジェクトをセットアップしていたところ、マシンの挙動が明らかにおかしくなりました。RAMを異常に消費し、まるでフォーク爆弾(forkbomb)が実行されているような状態に陥ったのです。
調査した結果、proxy_server.py 内にBase64でエンコードされた謎のデータ塊(blob)が混入しているのを発見しました。これが別のファイルをデコード・書き出しし、そのまま実行する仕組みになっているようです。
現在、開発元へ報告中ですが、まずはコミュニティの皆さんに注意喚起として共有します。
この件については、以下のGitHub Issueでも報告されています:
https://github.com/BerriAI/litellm/issues/24512
ここにあるメインの問題以外にも、オーナーのアカウント自体が乗っ取られた可能性があって、さらに170件以上の低質なスパムコメントが書き込まれてる。GitHubにはもっとマシなスパム検知システムを期待したいよ。これじゃあ許容範囲外だ。
Harborをインストールした途端、CPUが100%に張り付いた…。システムが完全にロックする前にプロセスを確認できてラッキーだったよ。要するに、仮想通貨のウォレットとかを探そうとして grep -r rpcuser\rpcpassword プロセスをフォーク爆弾みたいに大量発生させてた。harnessから生成されてるのを見つけて、キルしたよ。バイナリを確認した限り、バックドアはインストールされてなかったみたいで助かった。
これはここ数週間のTeamPCPの活動に関連してる。俺の方でも対応して、最新のタイムラインを更新し続けてるよ。みんながこの事件を把握して状況を理解するのに役立つといいな:https://ramimac.me/trivy-teampcp/#phase-09 (https://ramimac.me/trivy-teampcp/#phase-09)
エージェント主導の侵害が一度でも起きて、Claudeが書いた悪意のあるCコードがllvmやlinuxなんかに紛れ込んだら、その時こそ俺たちは「信じることを信じる(Trusting Trust)」について、ようやく、そして永遠に考え直さなきゃいけなくなるだろうね。
依存関係や開発環境をもう信用することはできない。「もはや」って言いたいところだけど、最初から信用なんてできなかった。Dev containersも、使い勝手が悪くて隔離も不十分で、全然ダメだったし。もっと実用性の高い、防御を重ねたフルサンドボックスが必要だよ。VM隔離、コンテナプリミティブ、許可リスト、エグレスフィルタ、seccomp、gvisorとかを備えた、もっと使い勝手のいいやつ。エージェントのランタイムに求められてる要件と同じだし、この勢いを利用して開発環境をもっと安全にしようぜ。そういう環境ならコンテナがクラッシュして、違反が見つかったら削除すればいいだけで、心配する必要もない。これを「例外的なセキュリティ事件」じゃなくて、日常的に起こりうることとして扱うべきなんだ。
LiteLLMのメンテナです。状況はまだ進展中だけど、今わかっていることはこれ:
-
原因は俺たちのCI/CDで使ってたtrivyみたいだ - https://github.com/search?q=repo%3ABerriAI%2Flitellm%20trivy... (https://github.com/search?q=repo%3ABerriAI%2Flitellm%20trivy&type=code)
https://ramimac.me/trivy-teampcp/#phase-09 (https://ramimac.me/trivy-teampcp/#phase-09) -
プロキシのDockerを使ってるなら影響はない。requirements.txtでバージョンを固定してるからね。
-
パッケージはPyPIで隔離済み。これで全ダウンロードがブロックされる。
現在調査中で、対策を強化してるところ。本当に申し訳ない。
- Krrish
これ、Trivyを侵害したTeamPCPと同じっぽくないか。IssueがBotの返信だらけなのも、Trivyの時と同じだ。この攻撃者は盗んだ認証情報を活用するのがめちゃくちゃ早いな。作業の大部分にLLMを使ってるとしても驚かないよ。
しかも、LiteLLMのSOC2監査法人がDelveだったっていうのも、皮肉な話だよね。まさに想定通りというか。
こういうことが起きるのを待ってたよ。あまりにも実行が簡単すぎるからね。俺はここしばらく、依存関係のバージョンを全部ガチガチに固定して、新しいプロジェクトでも古いバージョンを使うようにしてる。それなら少なくとも検証されるだけの時間は経ってるから。でも、それもそれなりのリスクはあるけどね(間違えて脆弱なバージョンを固定しちゃうとか)。あるいは、依存関係も含めて全部フォークして、コードベースをLLMに投げて検証するかだ。
それでも、サードパーティの依存関係があるオープンソースはもう信用できない。依存チェーンが複雑で長すぎて、全部チェックするのは不可能だ。
今はオープンソースソフトをバラまくのが簡単すぎて、巧妙なサプライチェーン攻撃を仕込んだ何千ものリポジトリが作られかねない。それも、いつでも発動できるやつだ。LLMがこのリスクを100倍に膨らませちまった。
https://github.com/dweinstein/canary (https://github.com/dweinstein/canary)
macOS向けに、パッケージが触っちゃいけないものにアクセスしたのを検知するツールを作ったよ。依存関係のない小さなGoバイナリ(2000行以下)で、偽のシークレットを入れたWebDAV(root不要)かNFS(root必要)をマウントして、アクセスがあったら通知を飛ばす仕組み。めちゃくちゃシンプルだよ。カナリア/ハニーポット方式は昔から好きで、これなら何かがおかしい時に(LittleSnitchみたいに)気づけるチャンスがあるかも!
次は、今回みたいにパフォーマンスでバレるようなヘマはしないだろうしね。