Hackers Backdoor Telnyx Python SDK on PyPI to Steal Cloud and Dev Credentials
2026/03/30 CyberSecurityNews — 広く利用されている Python パッケージが、攻撃ツールへと密かに改変され、多くの開発者が被害に遭った事実に気づきにくい状況にある。 2026年3月27日に TeamPCP と呼ばれる脅威アクターが、Python の主要リポジトリである PyPI に、Telnyx Python SDK の 2 つの悪意のバージョンをアップロードした。それらの改竄されたバージョン 4.87.1/4.87.2 は、PyPI により隔離されるまでの、約 4 時間にわたり公開されていた。 なお、直前の正規バージョンである 4.87.0 (2026 年3月26日公開) は、侵害されていないことが確認されている。

この短時間の間に、パッケージ・インストールを実行した開発者やシステムには、警告/エラー/異常の兆候が一切表示されないまま、静かに感染した可能性がある。
Telnyx パッケージは著名なライブラリであり、月間で約 75 万件のダウンロード実績がある。そのため、影響範囲は直接のユーザーに留まらず、依存するすべてのプロジェクト/パイプライン/サービスにまで拡大する。この攻撃の特徴である巧妙さは、パッケージ内の単一のファイルのみを変更する点にあり、それ以外はクリーン版とバイト単位で完全に一致していた。
ライブラリのインポート時に、クリック/設定などのユーザー操作を一切必要とせずに、悪意のコードは即座に実行される。
HexaStrike のアナリストによると、TeamTNT に関連する TeamPCP が攻撃の主体であり、急速に展開されているサプライチェーン攻撃キャンペーンの一部であるという。研究者たちが指摘するのは、Aqua Security Trivy/Checkmarx/LiteLLM などの 46 以上の npm パッケージを、同一グループが 9日間で標的にしていたことだ。それぞれの攻撃は段階的に高度化しており、これまでの中で最も完成度が高いのが、今回の Telnyx 侵害となる。
この攻撃は、3 段階の構造を持っている。第一段階では、トロイ化されたパッケージがプラットフォームごとのローダーを起動する。第二段階では、ローダーがリモート・サーバーからペイロードを取得する。このペイロードは、ステガノグラフィにより WAV 音声ファイル内に隠蔽されている。第三段階では、復号されたペイロードが認証情報収集ツールを展開し、SSH キー/クラウド認証情報/Kubernetes シークレット/データベース設定/暗号資産ウォレット/環境ファイルなどを収集し、すべてを暗号化して攻撃者のサーバへ送信する。
このマルウェアは主要な OS 上で動作し、各ノードに特権 pod を展開することで Kubernetes クラスタ全体へ拡散可能である。
感染メカニズムの隠蔽方法
攻撃のエントリー・ポイントは、”_client.py” ファイルの改変である。Python が Telnyx ライブラリを読み込む際、このファイル内のコードが自動実行される。TeamPCP は、ファイルの末尾に Windows 用の setup()と、Linux/macOS 用の FetchAudio() を追加している。これらの関数は OS を判定するものであり、対象外の環境では静かに処理を停止する。
すべてのエラーは、包括的な例外処理により隠蔽されるため、アプリケーションが警告を出すことも、クラッシュすることもない。 機能の実体を隠すため、URL/ディレクトリ・パス/ファイル名/ヘッダーなどの文字列は base64 エンコードされている。
ペイロードが復号されると、Windows 環境では “83.142.209.203:8080” の Command-and-Control サーバから “hangup.wav” がダウンロードされる。このファイルは音声ではなく、音声フレーム内に実行型のバイナリを隠蔽する WAV コンテナである。抽出された後にバイナリは XOR キーで復号され、”msbuild.exe” としてスタートアップ・フォルダーへ書き込まれる。この名称は Microsoft 正規ツールを模倣するものである。このプロセスは、ウィンドウに表示されずに起動し、ユーザー・ログイン時に自動実行される。
Linux/macOS 環境では、異なる方式が採用されるが、同様に隠蔽性が高い。ファイルを書き込まずに、変数に格納された大規模な Python ペイロードを復号し、分離された子プロセスとして実行する。ただし、このプロセスは親プロセス終了後も継続する。それにより、”ringtone.wav” をダウンロードし、音声データからペイロードを抽出してメモリ上で実行するため、ディスク書き込みは発生しない。
.webp)
収集された認証情報は AES-256-CBC で暗号化され、セッション・キーはハードコードされた RSA-4096 公開鍵でラップされる。そのため、復号を可能にするのは攻撃者のみとなる。その後に、データは “tpcp.tar.gz” としてまとめられ、HTTP POST リクエストで送信される。ヘッダー “X-Filename: tpcp.tar.gz” は、既知の TeamPCP キャンペーンに共通する検知指標である。
対応
ユーザー環境にインストールされたバージョン 4.87.1/4.87.2 は、侵害されたものと見なすべきであり、直ちにインシデント対応を開始する必要がある。影響を受けたシステム上の、すべての認証情報 (SSH キー/AWS/GCP/Azure/Kubernetes/Docker/データベース/API キー/環境変数) のローテーションが必要となる。
パッケージをアンインストールするだけでは、このバックドアは除去されない。Linux では “~/.config/sysmon/sysmon.py” および関連 systemd サービスの手動での削除が必要である。Windows では、スタートアップ・フォルダー内の “msbuild.exe” および隠し “.lock” ファイルの削除が必要である。
Kubernetes 環境では、kube-system 内の “node-setup-* pod” を監査/削除し、各ノードで “sysmon.service” の有無を確認する必要がある。
開発者にとって必要なことは、依存関係のバージョン固定/ロック・ファイルの使用/PyPI アカウントの 2 要素認証/短命な認証情報の使用/.env ファイルへの秘密情報の保存回避の徹底である。さらに “83.142.209.203”、”checkmarx.zone”、”83.142.209.0/24″ サブネットへの通信をファイアウォールで遮断する必要がある。
訳者後書:信頼されているリポジトリに悪意のコードが混入する、サプライチェーン攻撃を解説する記事です。攻撃者が正規のパッケージ管理システムである PyPI を通じて、不正なファイルをアップロードしたことで、この問題が発生しています。信頼に基づき利用されるライブラリであっても、内部のファイルがわずかに書き換えられるだけで、インポート時に自動で攻撃が実行されてしまいます。今回は、エラーを無視する設定や音声ファイルへの隠蔽が行われていたことで、動作の異常から原因を特定することが困難でした。開発環境を守るためには、利用するパッケージのバージョンを固定し、身に覚えのない更新を確認することが、何よりも大切になります。よろしければ、カテゴリー Repository を、ご参照ください。
.webp)
You must be logged in to post a comment.