PyPIに悪性パッケージ39件、入れるだけで動く手口も

Python の
脆弱性の概要
- 対象
- PyPI
- 悪用
- あり(確認済み)
- 影響
- 入れると情報を盗まれ、外から操作されるおそれ
- 修正版
- 修正なし
- 公表元
- GitHub Advisory Database / OpenSSF
| 製品 | 対象のバージョン | 修正版 |
|---|---|---|
| reqnest / reqnests | 0.1.0(reqnests は 0.1.1 も) | なし(削除する) |
| rainbowcolors | 0.1.0 | なし(削除する) |
| chromacli | 0.1.0〜0.1.4 | なし(削除する) |
| bundyfed | 1.0.0、1.0.1 | なし(削除する) |
| qzc690382 | 1.0.0 | なし(削除する) |
| mcp-teamviewer / teamviewer-mcp-server | 0.0.1 | なし(削除する) |
やること
PyPI は Python の部品(パッケージ)を配る公式のサイトです。pip install で入れる部品の多くはここから取ってきます。誰でも部品を登録できるので、悪意のある部品が紛れ込むことがあります。
社内で Python を使っている人がいれば、端末やサーバーで pip list を実行し、下の「対象」や GitHub の勧告に載った名前がないかを確かめてもらってください。開発会社に作ってもらったシステムが Python で動いている場合は、開発会社にも同じことを頼んでください。
見つかった部品に修正版はありません。勧告は、部品そのものがマルウェアで修正したバージョンはないとしています。消してください。
何が起きたのか
GitHub の勧告のデータベース(GitHub Advisory Database)には、悪性の部品の情報も載ります。世界時の11月4日から9日までに、PyPI の部品について39件の勧告が出ました。どれも OpenSSF(オープンソースの安全を進める団体)の悪性パッケージの一覧に基づいています。報告したのは、個人の研究者や Amazon Inspector、OpenSSF の自動の分析です。
39件の中には侵入テストのような実験とみられる被害の小さいものも含まれます。勧告で「たぶんペネトレーションテスト」と分類されたものは7件です。残りの多くは、情報を盗む、外から命令を受け付けるといった、はっきり悪意のある動きをすると分類されています。
11月9日の時点で、勧告に載った17件の名前を PyPI で調べると、16件は取得できない状態でした。1件(twitch-stream-py)は、勧告に載ったバージョンをまだ取得できました。
主な手口
勧告に書かれた動きから、主なものを紹介します。
一つ目はよく使われる部品に似た名前の部品です。reqnest や reqnests は勧告で打ち間違いを狙ったもの(タイポスクワッティング)に分類されています。読み込んだだけで、端末にある Telegram の大事なファイルを外部へ送ります。
二つ目は文字に色を付ける部品を装ったものです。rainbowcolors や chromacli は Windows で色付けの機能を初めて呼んだときに、匿名のファイル共有サービスから実行ファイルを取ってきて動かします。その前に PowerShell を使い、保存先のフォルダーと実行ファイルを Microsoft Defender の検査の対象から外します。同じ攻撃に使われた部品について、勧告は情報を盗むマルウェアを入れるものと分類しています。
三つ目は pip install を実行しただけで動くものです。bundyfed はインストールの処理の中で情報を盗むマルウェアを取ってきます。qzc690382 はインストールのときに小さな Web サーバーを立ち上げ、9998 や 9999 などのポートで外からの命令を待ち受けます。合言葉が合えば、送られた命令はそのまま実行されます。
四つ目は有名な製品の名前を借りたものです。mcp-teamviewer と teamviewer-mcp-server は MCP(生成 AI に外部の道具をつなぐ仕組み)の部品のような名前です。OpenSSF の自動の分析は、悪意のある活動に関わるドメインと通信するとして悪性と判定しました。
対象
上の表に載せた部品のほか、GitHub Advisory Database で種類を malware、対象を pip にして検索すると一覧が出ます。名前とバージョンが勧告と一致する部品を入れていれば対象です。
中小企業が確かめること
悪性の部品は入れた人の権限で動きます。開発者の端末にはクラウドの管理画面の鍵やデータベースのパスワードが置かれていることがあり、盗まれると被害が社外のサービスまで広がります。
見つかった場合は、部品を消すだけで終えないでください。その端末で使っていたパスワードや API の鍵を替え、Windows なら Defender の除外の設定に見覚えのないフォルダーがないかも見てください。これは勧告の案内ではありませんが、上の手口のように、部品を消したあとも取ってきたマルウェアや待ち受けのサーバーが残るおそれがあるためです。
部品の名前を手で打つと、打ち間違いを狙った偽物を入れてしまうことがあります。名前は公式の説明から写し、入れる部品とバージョンを一覧のファイル(requirements.txt など)にまとめておくと、あとで確かめやすくなります。
自社で確かめること
- 入れた部品の名前を見るPython を使う端末やサーバーで pip list を実行し、勧告に載った名前がないかを見てください。
- 名前は写して入れる部品を入れるときは、公式の説明やプロジェクトのページから名前を写し、手で打たないようにしてください。
- 見つけたら端末ごと疑う入れていた場合は部品を消すだけで終えず、その端末にあったパスワードや鍵を替えてください。



コメント 0
まだコメントはありません。