マイクロソフトが警告。PyPI mistralai汚染、import時に全消去の罠

マイクロソフトが警告。PyPI mistralai汚染、import時に全消去の罠

Mistral AI公式のPyPIパッケージv2.4.6が侵害された。importしただけで認証情報が抜かれ、特定の国にいると6分の1の確率で rm -rf / が走る。マイクロソフトが日本時間5月12日に警告した。


マイクロソフトが日本時間5月12日に警告

Mistral AI公式のPython SDK、mistralai パッケージv2.4.6が侵害されている。pip経由でインストールしてLinux環境でimportした瞬間、悪意あるコードが裏で動き出す。

注入箇所は mistralai/client/__init__.py の冒頭。パッケージを使うコードがimport文を書いた段階で、ユーザーが何かをクリックする前に処理が走る。

Microsoft Threat Intelligenceがこの事実を投稿で公開した。

接続先IPは 83.142.209.194。ここから transformers.pyz というファイルを /tmp/ 配下にダウンロードして実行する。ファイル名は Transformers にわざと似せてある。Hugging Faceが公開するこの機械学習ライブラリは開発者のマシンで広く使われており、/tmp/transformers.pyz が出ていても、ML開発の文脈で見慣れたファイル名なので疑われにくい。

ファイルの拡張子 .pyz はPython zipapp形式で、Pythonインタプリタで直接実行できる単一ファイルのアーカイブだ。攻撃者は start_new_session=True 付きで起動するため、元のPythonセッションを閉じてもバックグラウンドで動き続ける。


6分の1で全消去、ロシア語環境では何もしない

第2段ペイロードの本体は認証情報窃取マルウェアだ。GitHub Personal Access Token、npmトークン、AWS認証情報、Vaultトークン、Kubernetesサービスアカウント、1PasswordやBitwardenのボルト情報まで対象に含まれる。

ここまでなら他の供給網攻撃と大差ない。問題はその先にある。

マルウェアはシステムのロケール設定を確認する。タイムゾーンと言語設定からイスラエルまたはイランにいると判断された場合、random.randint(1, 6) を実行する。結果が2なら、音量を最大にしてMP3を再生し、rm -rf でファイルシステムを削除しようとする。

つまり 6分の1でロシアン・ルーレット が回る。当たれば、開発者のマシン上のファイルがすべて消える。

逆に、システムのロケール設定がロシア語の場合、マルウェアは何もせず終了する。Wizはこの挙動を「以前のMini Shai-Hulud変種と同じ」と分析している。

地理的な選別と確率的な破壊。組み合わせとして攻撃者の意図がにじむ。

mistralai v2.4.6マルウェアのロケール判定フロー
import mistralai Linux環境で発火 ロケール設定を 判定 ロシア語 その他 イスラエル/イラン 何もせず終了 無害化 認証情報を窃取 トークン/API鍵/ボルト 外部C2へ送信 窃取のみで終了 認証情報を窃取 +追加判定へ random (1,6) = 2? 5/6 1/6 破壊は発動せず 窃取のみで終了 rm -rf を実行 ファイルシステム消去
※ Microsoft Threat IntelligenceおよびWizの解析を基に作成。タイムゾーンと言語からシステムの所在地を推定し、`random.randint(1, 6) == 2` の場合のみ破壊ルーチンが発動する。

TeamPCPによる広域キャンペーン「Mini Shai-Hulud」

mistralai v2.4.6単体の事件ではない。日本時間5月11日から12日にかけて、npmとPyPIの両エコシステムで同時多発的に汚染パッケージが公開された。

クラウドセキュリティ企業Wizが TeamPCP と呼ばれる攻撃者グループに高い確度で帰属させている。同グループは過去にもAqua SecurityのTrivy、Bitwarden CLI、SAPやIntercomのnpmパッケージを侵害してきた。今回のキャンペーン名は「Mini Shai-Hulud」。SF小説『デューン/砂の惑星』に登場する巨大な砂虫(シャイ=フルード)から取られている。

被害範囲はnpm側で重い。

TanStack/router周辺で42パッケージ・84バージョン、UiPath系統、Mistral AI公式TypeScriptクライアント @mistralai/mistralai、OpenSearchプロジェクト、guardrails-ai (PyPI)。Aikidoの集計では合計373の悪意あるパッケージ・バージョンが169のnpmパッケージ名にわたっている。

@tanstack/react-router だけで週1270万ダウンロード。Mini Shai-Hulud感染パッケージの累計DL数は5億1800万を超える。

Mini Shai-Hulud第二波:エコシステム別の侵害パッケージ数
※ Wiz、StepSecurity、SecurityWeek、Mend、OX Securityの集計より。2026年5月12日時点で確認された主要スコープのパッケージ数を抜粋(全体は170超)。Mistral AIは@mistralai/mistralai、@mistralai/mistralai-azure、@mistralai/mistralai-gcp(npm)とmistralai(PyPI)の合計4パッケージ。

SLSA Build Level 3で署名済み、それでも汚染

TanStack側の侵入経路はGitHub Actionsの脆弱性連鎖だ。

攻撃者はTanStack/routerのフォークを zblgg/configuration という名前に変更してフォーク検索を回避し、 pull_request_target ワークフローを発火させるプルリクエストを開いた。攻撃者管理下のフォークコードが実行され、GitHub Actionsキャッシュが汚染pnpmストアで上書きされた。

正規メンテナのPRが後にmainへマージされると、リリースワークフローが汚染キャッシュを復元する。攻撃者バイナリは /proc/<pid>/mem からOIDCトークンを直接抽出し、そのトークンで正規パッケージを公開した。npmトークン窃取は不要 だった。

結果として、今回汚染されたパッケージは SLSA署名つき で配布された。SLSA(Supply-chain Levels for Software Artifacts、ビルドレベル3)は「正規ビルドパイプラインから出たことの暗号学的証明」だが、StepSecurityが指摘するように、署名は「ビルドパイプラインが意図通りに動いた」ことを保証するものではない。乗っ取られたパイプラインが正規署名付きの悪意あるパッケージを生み出した、史上初の事例として記録された。

CVE番号:CVE-2026-45321、CVSSスコア9.6(Critical)。GitHub Advisory Databaseは「2026年5月11日に該当バージョンをインストールした開発者・CI環境はすべて侵害された前提で対応すべき」としている。

トークン取り消しで自壊するnpm版ワーム

PyPI版とは別経路で、npm側のMini Shai-Huludにはもう一つ厄介な仕掛けがある。

@tanstack系などのnpmパッケージに感染した開発者マシンに、 gh-token-monitor という常駐デーモンが仕込まれる。macOSではLaunchAgent、LinuxではsystemdユーザーサービスとしてインストールされてGitHub APIを60秒ごとに叩く。

監視対象のトークンが取り消されると、デーモンは rm -rf ~/ を実行する。 インシデント対応の第一手 であるトークン無効化が、そのまま開発者のホームディレクトリを消去するトリガーになる。

Wizの公式アドバイザリは「トークンを取り消す前に、まずデーモンを除去せよ」と順序を明示している。これを逆にやると被害が拡大する。

デーモンは24時間後に自動終了するため、感染から1日経てば破壊ルーチンは無効化される。ただし24時間以内にトークンを取り消した管理者だけが標的になる。


影響を受けたら何を確認すべきか

pip install mistralai==2.4.6 または pip install --upgrade mistralai を日本時間5月12日0時5分以降にLinux環境で実行した場合、感染している可能性がある。

確認すべきファイルは次の通り。PyPI版(mistralai v2.4.6)の痕跡として、Linux上で /tmp/transformers.pyzpgmonitor.py、systemdユニットファイル pgsql-monitor.service の有無を確認する。npm版(@tanstack/@mistralai系列)を介して感染した場合は、macOSで ~/Library/LaunchAgents/com.user.gh-token-monitor.plist、Linuxで ~/.config/systemd/user/gh-token-monitor.service も探す。これらが残っていれば、認証情報の流出と破壊デーモン常駐の双方を疑う必要がある。

ネットワーク側では 83.142.209.194 および git-tanstack.com への通信ログを過去に遡って確認する必要がある。これらのIPおよびドメインへのアウトバウンド通信は遮断対象だ。

Mistral AI公式は5月7日にv2.4.5を最後の正規版として公開していて、v2.4.6は同社のGitHubリポジトリにタグもコミットも存在しない。PyPI側の認証情報が どこから漏れたか不明 だ。

公式リポジトリにコミットがなく、署名はBuild Level 3で揃っている。それでもパッケージは汚染されていた。次に信頼を置く先は、もうライブラリのバージョン番号ではなく、CI環境そのものになる。


参照元

他参照

関連記事

この記事を共有する