ラボまとめコラムニュース
堀川 慎 | フリーランスエンジニア/ブログ/記事一覧/【続報】Telnyx PyPI侵害、WAVファイルにマルウェアを隠すTeamPCPの新手口
telnyx-pypi-supply-chain-teampcp-wav-cover

【続報】Telnyx PyPI侵害、WAVファイルにマルウェアを隠すTeamPCPの新手口

LiteLLMに続き、Telnyx Python SDKがTeamPCPに乗っ取られた。今度はWAV音声ファイルにマルウェアを隠す新手口。影響バージョン・確認方法・対処法をまとめる。

ニュース
kkm-horikawa

kkm

Backend Engineer / AWS / Django

2026.03.288 min9 views
この記事のポイント

LiteLLMに続き、Telnyx Python SDKがTeamPCPに乗っ取られた。今度はWAV音声ファイルにマルウェアを隠す新手口。影響バージョン・確認方法・対処法をまとめる。

Telnyx PyPIパッケージに何が起きたのか

2026年3月27日午前3時51分(UTC)、通信APIプラットフォームTelnyxのPython SDK(月間約74万ダウンロード)に、マルウェアが仕込まれたバージョン4.87.1が公開されました。16分後には修正版ペイロードを含むバージョン4.87.2も公開されています。

セキュリティ研究者のkiran-secがGitHub Issue #235で報告したのが午前6時51分。PyPIが両バージョンを隔離・削除したのが午前10時13分。悪意あるパッケージが公開されていた時間は約6時間22分でした。

犯人は、3日前にLiteLLMを襲ったのと同じ攻撃グループ「TeamPCP」です。暗号化に使われたRSA-4096公開鍵が完全に一致しています。

Telnyxは公式セキュリティ通知で、自社のプラットフォーム・API・インフラは侵害されておらず、被害はPyPI配布チャネルのみに限定されると発表しています。

項目内容
影響バージョン4.87.1 / 4.87.2
(いずれも隔離済み)
安全なバージョン4.87.0(3月26日公開)
月間ダウンロード数約742,000
悪意あるバージョンの
公開時間
約6時間22分
攻撃者TeamPCP

WAV音声ファイルの中にマルウェアを隠す手口とは

今回の攻撃で使われたのは「ステガノグラフィ」と呼ばれる手法です。ステガノグラフィとは、一見無害なファイルの中にデータを隠す技術のこと。今回はWAV形式の音声ファイルの中に、暗号化されたマルウェア本体を埋め込んでいました。

仕組みはこうです。telnyx/_client.pyに74行の悪意あるコードが注入されており、import telnyxした時点で自動的に動き出します。まず攻撃者のサーバー(83.142.209.203:8080)からWAVファイルをダウンロードし、Pythonのwaveモジュールでオーディオフレームを読み取ります。フレームデータをbase64でデコードし、先頭8バイトをXOR鍵として使い、残りのデータを復号すると、本当のマルウェアが出てきます。

ネットワーク監視ツールの多くは、音声ファイルのダウンロードを「正常な通信」と判断します。ファイルタイプの検査でも「WAV音声」と出るだけです。見た目は完全に無害な音声ファイルで、セキュリティスキャナをすり抜けるために設計された手口です。

WindowsとLinux/macOSでは、隠されているマルウェアの挙動が異なります。

Windowsの場合: hangup.wavというファイルをダウンロードし、復号した実行ファイルをスタートアップフォルダにmsbuild.exeという名前で配置します。Microsoftのビルドツールに偽装しているわけです。PCを再起動するたびにマルウェアが自動で起動します。

Linux/macOSの場合: ringtone.wavをダウンロードし、復号した第2段階のスクリプトを実行します。SSH秘密鍵、クラウドトークン(AWS/GCP/Azure)、暗号通貨ウォレット、環境変数、bash履歴を収集し、AES-256-CBCで暗号化した上でHTTPで外部に送信します。Kubernetes環境が検出された場合は特権Podをデプロイしてクラスタ全体にアクセスを試みます。

LiteLLMと同じ犯人「TeamPCP」とは何者なのか

TeamPCPは2026年3月に入ってから、わずか10日間で少なくとも4つのプロジェクトを侵害しています。

← スワイプで移動

TelnyxへのアトリビューションがTeamPCPに高い確度で結びつく根拠は3つあります。LiteLLMの侵害で使われたのと同一のRSA-4096公開鍵が使われていること。データ送出時のアーカイブ名が同じtpcp.tar.gzであること。そして暗号化ワークフロー(AES-256-CBC + RSA-4096 OAEP)が一致していることです。

ただし、手口は進化しています。LiteLLMでは侵害ドメイン(scan.aquasecurtiy[.]orgなど)をC2に使っていたのに対し、Telnyxでは生のIPアドレスを使用。ペイロードの隠蔽も.pthファイルからWAVステガノグラフィに変わっています。3日間で検出回避の能力を着実に上げてきています。

自分の環境は影響を受けるのか

以下のコマンドで確認できます。

# インストール済みバージョンの確認
pip show telnyx

# 影響バージョンか確認(4.87.1 または 4.87.2 が表示されたら影響あり)
pip show telnyx | grep -E "^Version: 4\.87\.[12]$"

バージョン4.87.1または4.87.2がインストールされている場合、その環境は侵害されたものとして扱ってください

Windowsの場合は、以下のパスにファイルがないかも確認します。

# Windowsの永続化ファイル確認
dir "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe"
dir "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe.lock"

Linux/macOSの場合は、ネットワークログでC2サーバーへの通信がないかを確認します。

# ネットワークログでC2への通信を確認
# IPアドレス 83.142.209.203 への通信がないか
grep "83.142.209.203" /var/log/syslog
# または接続中の通信を確認
ss -tnp | grep "83.142.209.203"

今すぐやるべきこと

影響バージョンがインストールされていた場合、最優先でやることは3つです。

まず、安全なバージョンへのダウングレードです。

pip install telnyx==4.87.0

次に、その環境で使っていた認証情報をすべてローテーションします。APIキー、データベースの接続情報、SSH鍵、クラウドプロバイダのトークン(AWS/GCP/Azure)、CI/CDで使っているシークレット、npm/PyPI/Dockerのトークン。すべてです。マルウェアはこれらを片っ端から収集して外部に送信しているため、「どれが盗まれたか」を判別するより、全部変えたほうが確実です。

最後に、Windowsの場合はスタートアップフォルダからmsbuild.exe.lockファイルを削除します。Linux/macOSの場合は、Kubernetes環境で不審な特権Podがデプロイされていないかを確認してください。

なぜPyPIは繰り返し狙われるのか

2026年3月だけで、TeamPCPはTrivy、LiteLLM、npm 46パッケージ、Checkmarx、そしてTelnyxを侵害しました。特にPyPIは繰り返し標的になっています。

理由は構造的です。PyPIのパッケージ公開は、アカウントの認証情報さえあれば誰でもできます。CI/CDパイプラインにPyPI公開トークンが保存されていて、そのCI/CD環境が侵害されれば、パッケージの乗っ取りは自動的に完了します。実際、LiteLLMはTrivyの侵害を起点にPyPIトークンが盗まれたことが分かっています。Telnyxの場合、具体的な侵入経路はまだ公開されていませんが、GitHubのリリースに対応するタグがないバージョンが公開されたことから、PyPI公開アカウントの認証情報が直接窃取されたと見られています。

厄介なのは、1つのツールの侵害が連鎖的に別のパッケージの侵害につながる点です。セキュリティスキャナであるTrivyが侵害されたことで、Trivyを使っていたLiteLLMのCI/CDからPyPIトークンが盗まれた。「守る側のツールが攻撃の入口になる」という、開発者にとって最も厄介なパターンが定着しつつあります。

今後どうなるのか

TeamPCPの攻撃は、3日ごとに手口を進化させています。LiteLLMでは.pthファイルでPythonの起動プロセスに入り込む手口を使い、Telnyxでは音声ファイルにマルウェアを隠すステガノグラフィに切り替えました。C2のインフラも、偽装ドメインから生IPアドレスに変更しています。次の標的で何を使ってくるかは分かりませんが、検出を回避する方向に進化し続けていることは間違いありません。

開発者にできることは限られていますが、いくつかあります。pip installするパッケージのバージョンをロックファイルで固定する。CI/CDのシークレットを定期的にローテーションする。パッケージの更新時にSocketAikidoのようなサプライチェーンセキュリティツールで差分を確認する。「信頼できるパッケージ」という前提が通用しなくなった以上、1つ1つのインストールを疑う習慣が必要です。

PyPIは2023年に二要素認証を必須化しましたが、CI/CDパイプラインに保存された公開トークンが盗まれるパターンには効きません。レジストリ側の対策だけでは限界があり、開発者自身がサプライチェーンのリスクと向き合う必要があります。TeamPCPの活動が止まる気配はありません。

参照元