TeamPCPがtelnyx Python SDKをPyPI汚染、WAVオーディオに埋め込んだペイロードでAPI認証情報を窃取
2026年3月27日、音声通話APIで広く使われるtelnyx Python SDK(月間742,000ダウンロード)のバージョン4.87.1と4.87.2がPyPIで汚染された。AikidoのセキュリティリサーチャーがCanisterWormのコードシグネチャに基づいて検出したもので、TeamPCPがWAVオーディオファイルにペイロード(悪意あるコード本体)を隠蔽する新手法を導入し、OpenAI・Anthropic・AWS・GCPの認証情報を収集する仕組みが確認されている。
多段階攻撃の流れ
telnyx汚染は、Trivyの脆弱性(CVE-2026-33634、CVSS 9.4)に端を発するTeamPCPの多段階攻撃の最新フェーズだ。
graph TD
A[Trivy CI/CD脆弱性<br/>CVE-2026-33634 CVSS9.4<br/>2026-03-19] -->|CI認証情報窃取| B[npm 46+パッケージ汚染<br/>CanisterWorm展開<br/>2026-03-20]
B -->|C2: checkmarx.zone| C[OpenVSX・GitHub Actions汚染<br/>2026-03-23]
C -->|PyPIトークン窃取| D[LiteLLM 1.82.7/1.82.8汚染<br/>2026-03-24]
D -->|telnyx PyPIトークン窃取| E[telnyx 4.87.1/4.87.2汚染<br/>2026-03-27]
E -->|WAVステガノグラフィ| F[API認証情報収集<br/>C2: 83.142.209.203:8080]
以前のフェーズについてはLiteLLM PyPI汚染の記事で詳述している。LiteLLMではCI/CDの設定ミス(Trivyをバージョン固定なしにインストール)がPyPIトークン窃取の起点となった。GlassWormによるOpenVSX拡張機能サプライチェーン攻撃も同じ攻撃者グループによるものだ。
注入箇所とWAVステガノグラフィの仕組み
マルウェアはインストールフックではなく、telnyx/_client.py のモジュールインポート時に実行される。setup.pyのフックを監視するセキュリティ対策を回避する設計だ。
ペイロードの隠蔽には、WAVオーディオファイルを使うステガノグラフィ(情報隠蔽技術)が採用されている。
| ステップ | 処理内容 |
|---|---|
| 1 | 有効なWAVファイル構造を作成(コンテンツフィルタを回避) |
| 2 | Base64エンコードしたペイロードをオーディオフレームデータに格納 |
| 3 | フレームの先頭8バイトをXORキーとして抽出 |
| 4 | 残りのバイト列にXOR暗号を適用してペイロードを復元 |
| 5 | 復元したコードを実行 |
セキュリティツールはWAVファイルを正規のオーディオとして扱う傾向があるため、内容ベースの検査をすり抜けやすい。ゼロ幅Unicode文字をC2 URLの隠蔽に使うStegaBinの手口と異なり、WAVステガノグラフィはバイナリレベルで実行可能コードを埋め込む手法だ。
プラットフォーム別ペイロード
WindowsとLinux/Macで別々のペイロードが動作する。
Windowsの場合
hangup.wavをダウンロードし、XOR復号して得た実行ファイルをmsbuild.exeとして配置する。永続化(パーシステンス)の場所は%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\で、システム起動時に自動実行される。12時間ごとに再ドロップするクールダウンが設定されており、削除後も復活する。
Linux/Macの場合
_client.pyの459行目にBase64エンコードされたPythonスクリプトがハードコードされている。実行時にringtone.wavをフェッチし、第三段階のコレクター(情報収集モジュール)を復号・起動する。収集した認証情報はRSA-4096公開鍵を使ってAES-256-CBCで暗号化された上で、C2(Command & Control、攻撃者の指令サーバー)である83[.]142[.]209[.]203:8080に送信される。このHTTPリクエストにはX-Filename: tpcp.tar.gzヘッダーが付く。
攻撃対象のAPI認証情報はOpenAI・Anthropic・AWS・GCPに及ぶ。AIアプリケーション開発でtelnyxを音声機能として組み込んでいるプロジェクトが、主要AIプロバイダーの認証情報ごと窃取されるリスクがある。
影響範囲と侵害インジケーター
汚染されたバージョンは2つ。
| バージョン | SHA256(先頭) |
|---|---|
| telnyx==4.87.1 | 7321caa303fe96ded… |
| telnyx==4.87.2 | cd08115806662469… |
安全なバージョンは4.87.0以前。4.87.3以降がリリースされた場合は個別に確認が必要だ。
侵害インジケーター(IoC)は以下のとおり。
| 種別 | 値 |
|---|---|
| C2サーバー | 83[.]142[.]209[.]203:8080 |
| 流出識別ヘッダー | X-Filename: tpcp.tar.gz |
| Windowsパーシステンス | %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\msbuild.exe |
対処方法
telnyxを4.87.0以前にダウングレードまたはピン固定する。汚染バージョン(4.87.1/4.87.2)をインストールしていた期間があった場合は、以下を即時実施する。
- OpenAI・Anthropic・AWS・GCPのAPIキーをローテーション
- データベース認証情報とSSHキーをローテーション
- アウトバウンドHTTP接続のログから
83[.]142[.]209[.]203への通信を確認
また、CI/CD環境でtelnyxに依存するパイプラインがあるなら、ビルドログを遡って該当バージョンのインストール有無を確認する。
TeamPCPの手口の進化
TeamPCPは各フェーズで手口を更新している。LiteLLMではフォークボム(無限プロセス生成)の副作用で意図せず発覚した。telnyx版ではその反省からか実行ロジックが整理されており、12時間クールダウンなど永続化を重視した設計に変わっている。
CI/CDを踏み台にした正規トークンによるパッケージアップロードは、PyPIの署名検証だけでは防げない。依存関係のバージョンをロックし、CI環境のシークレットへのアクセス権を最小化することが現時点での有効な対策だ。