概要
セキュリティ企業Socketは2026年7月7日、npmとPyPIの両パッケージレジストリにまたがる調整型のタイポスクワッティング攻撃キャンペーンを検知したと発表した。攻撃者は決済サービスのPaysafe、Skrill、Netellerの公式SDKを装い、npmに13パッケージ(paysafe-checkout、paysafe-vault、paysafe-js、neteller、skrillなど、各4バージョンずつ)、PyPIに4パッケージ(paysafe-kyc、paysafe-payments、paysafe-sdk、paysafe-api)の計17件を公開していた。狙いは決済SDKを導入しようとする開発者を騙し、CI/CD環境の認証情報やシークレットを窃取することにあった。公開からわずか6分で悪意あるコードとして検知されたが、パッケージレジストリを標的にしたサプライチェーン攻撃の脅威が改めて浮き彫りになった。
巧妙なフェイクSDKの仕組み
悪意あるパッケージは、本物のPaysafe APIクライアントを模したクラスを実装しており、表面上は正常に動作しているように見える。実際には決済サービスの本物のエンドポイントには一切接続せず、{ success: true, method, path }のような偽の成功レスポンスを返すだけの「ファサード」に過ぎない。APIキーは環境変数PAYSAFE_API_KEYから読み込む形を取り、正規のSDKと同様の使い勝手を装うことで開発者に気付かれにくくしていた。
シークレット窃取とサンドボックス回避の手口
すべてのAPIリクエストメソッドが実行されるたびに、内部の_request()関数がシークレット抽出ルーチンを起動する仕組みになっていた。この処理では、変数名に「KEY」「SECRET」「TOKEN」「PASS」「AUTH」「API」を含む環境変数を片っ端からフィルタリングし、値を100文字に制限した上で窃取する。実際の被害シナリオではPAYSAFE_API_KEYだけでなく、AWS_SECRET_ACCESS_KEYやGITHUB_TOKEN、NPM_TOKENといったCI/CDの重要な認証情報も捕捉対象となっていた。
さらに、解析環境での検知を逃れるための仕掛けも組み込まれていた。CPUコア数が2未満の環境や、ホスト名・ユーザー名に「sandbox」「analyzer」「cuckoo」「virus」といった文字列が含まれる環境を検出すると、悪意ある処理をスキップする仕様になっている。窃取したデータの送信先となるC2(コマンド&コントロール)ドメインも、XORデコード、文字コードの17減算、文字列の反転という3段階の難読化処理で隠蔽されており、最終的にcaliber-spinner-finishing.ngrok-free.devというngrokベースのドメインへ通信する仕組みだった。このC2ドメインが解決するIPアドレスは、既知のマルウェア「NjRAT」など他の情報窃取型マルウェアのC2サーバーとしても使われていた実績があるという。なお、PyPI側のパッケージにはnpm版のようなAPIキーによるゲーティングがなく、インポートするだけで自動的にペイロードが実行される点も特徴だった。
攻撃者の狙いと今後の対策
Socketの分析によれば、攻撃者は決済関連SDKという特定領域に戦略的に的を絞り、パッケージごとに異なる難読化キーを使用することでシグネチャベースの検知を回避しようとしていた。npmとPyPIという複数エコシステムにまたがる攻撃を仕掛けられる技術力も示しており、サプライチェーン攻撃の巧妙化を裏付ける事例といえる。Socketは、該当パッケージを実行した端末上のすべてのシークレットを速やかにローテーションすること、依存関係に13件のパッケージ名が含まれていないか確認しレジストリプロキシ側でのブロックを検討すること、CIやビルドホストから.ngrok-free.devへの不審な通信がないか監視すること、PAYSAFE_API_KEYと該当パッケージ名の組み合わせについてCIログを監査することを推奨している。また52件のSHA-256ファイルハッシュを含む侵害指標(IoC)も公開されており、組織は自社環境への影響有無を照合できる。