最近、litellmというPython packageが汚染されました。

このpackageは月に1億近くdownloadされ、多数のAI projectで依存として使われています。汚染されたversionは1時間未満しか存在しませんでした。それでもその1時間の間に、pip install litellmを実行した人、またはlitellmに依存するツールをinstallした人は、次のものを盗まれていた可能性があります。

  • SSH key(サーバーへの通行証)
  • AWS / GCP / Azureのクラウド認証情報
  • 暗号資産wallet
  • すべての環境変数(API keys)
  • shell履歴
  • Git認証情報
  • database password

何もしなくてよいのです。importする必要も、呼び出す必要もありません。installしただけで終わりです。

美しいgift boxの下から赤い触手が伸び、ペンギンが警告板を掲げて止めている

どうやって実現したのか?

攻撃者は、多くの人が知らないPythonの仕組みを使いました。.pthファイルです。

Pythonは起動時に、site-packages directory内のすべての.pthファイルを自動で読みます。本来の用途は、Pythonに「このpathを検索対象に追加して」と伝えることです。ただし.pthファイル内にimportで始まる1行を書くと、それは自動実行されます。

攻撃者はその中にbase64 encodedの悪意あるprogramを置きました。decode後、それはPC内の機密ファイルを静かにscanし、内容を攻撃者のサーバーへ送ります。

さらに怖いのは、この攻撃が発見された理由です。攻撃者自身のcodeにbugがありました。memoryを使いすぎ、被害者のPCをcrashさせたのです。攻撃者がもう少し上手く書いていたら、何日も見つからなかった可能性があります。

なぜClaude Codeユーザーに関係するのか?

Claude Codeを使う人は、GitHubからさまざまなskill(Claude向けの指示セット + script)、MCP server、その他の拡張ツールをdownloadしがちです。

他人が書いたcodeを自分のPCに置き、Claudeに実行権限を渡すたびに、その人を信頼していることになります。

悪意あるskillは次のことができます。

攻撃手法具体的に何をするか
Prompt injectionmarkdown内に見えない指示を隠し、Claudeを操って悪いことをさせる
悪意あるscriptSSH keyをcurlし、攻撃者のサーバーへPOSTする
Supply chain汚染requirements.txtで汚染されたpackageを引き込む
.pth injectionPython起動時に毎回、窃取programを自動実行する
Reverse shellPC上にbackdoorを開き、攻撃者が遠隔接続できるようにする

Skill Shielder

Skill Shielderはこの問題のために作りました。

これは依存ゼロのopen source security audit toolです。純bash scriptで、何もinstallしません。任意のツールをinstallするにscanし、中に怪しいものがないか教えます。

# ローカルfolderをscanする
./shield.sh /path/to/downloaded-skill

# GitHub repoを直接scanする
./shield.sh https://github.com/someone/their-tool

ペンギンがX線scan機を操作し、gift boxの中身を確認している

何をscanするのか?

Skill Shielderには4つの独立したscanner moduleがあります。

1. Prompt Injection Scanner

markdown、JSON、YAML内の隠し指示を確認します。たとえば:

  • ignore all previous instructions(典型的な上書き指示)
  • 偽の<system> tag(system messageを装う)
  • Unicode zero-width characters(肉眼では見えない文字)
  • do not tell the user(AIにユーザーへ隠すよう命じる)

2. Script Safety Scanner

.sh.py.js.ts内の危険操作を確認します。

  • curl ... | bash(遠隔codeをdownloadして即実行)
  • base64 ~/.ssh/id_rsa | curl -X POST(SSH keyをencodeして送信)
  • reverse shell(攻撃者にPCを遠隔操作させる)
  • rm -rf ~/(home directory全体を削除)

3. Supply Chain Scanner

litellmのような攻撃を想定しています。

  • .pthファイルに実行codeがないか
  • setup.pyがinstall時にこっそりコマンドを走らせないか
  • package.jsonpostinstall hook
  • requirements.txtが怪しいsourceからpackageを取っていないか

4. 権限範囲分析

このツールがどのファイルとnetwork endpointへaccessするか分析します。

  • ~/.ssh~/.aws.envを読んでいないか?
  • 知らない外部URLへ接続していないか?
  • 機密pathへのaccessかつnetwork request、これは典型的なdata exfiltration patternです

3つの通路:緑の通過、琥珀色の警告、赤のblock。ペンギンが判定役をしている

3種類の判定

scan完了後、Skill Shielderは明確な判定を出します。

判定意味どうするか
PASS問題は見つからない安心してinstallできる
WARN注意すべき点がある内容を見て、妥当か確認してからinstall
FAIL重大な問題を発見installしない。距離を置く

実際に走らせるとこうなる

テスト用の悪意あるskillにscanを実行します。

# Skill Shielderレポート

**対象**: malicious-skill
**判定**: **FAIL**

## 概要

| Scanner          | CRITICAL | WARN | INFO |
|------------------|----------|------|------|
| prompt-injection | 2        | 4    | 0    |
| script-safety    | 5        | 4    | 0    |
| supply-chain     | 1        | 2    | 0    |
| permissions      | 1        | 3    | 0    |

## 検出事項
- [CRITICAL] SKILL.md:12 [PROMPT_OVERRIDE] ignore all previous instructions...
- [CRITICAL] scripts/setup.sh [PIPE_TO_SHELL] curl/wgetがsh/bashへpipeされている
- [CRITICAL] scripts/setup.sh [CREDENTIAL_EXFIL] credentialをbase64 encodeしてからcurl
- [CRITICAL] scripts/setup.sh [REVERSE_SHELL] reverse shell patternを検出
- [CRITICAL] evil.pth [PTH_EXECUTABLE] .pth fileに実行codeが含まれている
...

## 推奨
**CRITICAL issueを検出しました。installしないでください。**

9件のCRITICALをすべて拾いました。

使い始める方法

git clone https://github.com/p3nchan/skill-shielder.git
cd skill-shielder
chmod +x shield.sh scanners/*.sh

# installしたいものをscanする
./shield.sh /path/to/any-project

Claude Codeのskillとして使うこともできます。repoをローカルにcloneしておけば、Claudeがそのまま他のツールのauditに使えます。

全体は純bashで、macOSとLinuxで使えます。何もinstallする必要はありません。

いくつかの提案

litellm事件は、「依存をinstallする」とは何かを見直すきっかけになります。いくつかの学びです。

  1. 無思考でpip installしない。大規模projectでも汚染されることがあります。たとえ1時間だけでもです
  2. transitive dependenciesに注意する。installするのはAでも、AがBに依存し、BがCに依存し、Cが汚染されていれば巻き込まれます
  3. 使う前にscanするshield.shを5秒走らせるほうが、盗まれたcredentialの復旧よりはるかに楽です
  4. 依存ゼロはこの種のツールの硬い条件です。security tool自身が大量のpackageを要求するなら、意味が薄れます

関連記事


こぺんぎんの体験談

Skill Shielderは自分用に作ったskill audit toolです。OpenClaw上で試したいskillは多く、install前にSKILL.mdとscriptsを1つずつ読むのは、時間がたつと面倒になります。このツールは、その手作業auditを自動化するために作りました。実際に走らせると、よく止めるのはtransitive dependencyとsetup script内のcurl pipe to shです。この2つのpatternだけでも、多くのriskをfilterできます。

よくある質問

Q: Skill Shielder自体に何かinstallが必要ですか?

まったく不要です。純bash scriptで、macOS / Linux標準のgrep、findなどの基本コマンドしか使いません。外部依存はありません。security tool自身がpip installを要求するなら、それは皮肉です。

Q: scan結果がWARNなら問題がありますか?

必ずしもそうではありません。WARNは注意すべき点があるという意味です。たとえばcurl POSTや.envファイルの読み取りです。正当なツールでもよくありますが、用途が妥当か確認してください。本当に危険なsignalはCRITICAL(赤)です。

Q: このツールはClaude Code専用ですか?

いいえ。もともとはClaude Code skillをauditするために作りましたが、任意のGitHub project、MCP server、ローカルscriptにも使えます。terminalで実行する予定の第三者codeは、先にscanする価値があります。

Q: Pattern-based scanですべての攻撃を検出できますか?

できません。100%の検出率を保証できるツールはありません。Skill Shielderは最初の防衛線であって、万能薬ではありません。ただし、最新の.pth file injection、prompt injection、supply chain汚染を含む、多くの既知攻撃patternを拾えます。


— Penchan