actions-coolのGitHub Actionsを介したワームの新たな感染

カテゴリ
マルウェア
目次
  1. 報告の内容
    1. タグの書き換えと侵害の報告
    2. リポジトリの再公開
    3. ペイロードの動作
  2. 時系列
  3. 根拠と範囲
    1. 5月の波との関係
  4. 関係者の対応
  5. 未公表の事項
  6. 注
  7. 出典
  8. 更新記録
  9. 関連記事

SafeDepの2026年9月24日の報告によると、actions-cool/issues-helperのタグは5月に乗っ取られた後も悪意あるコミットを指したままで、タグでこのactionを呼ぶワークフローがMini Shai-Huludのペイロードを実行し続けている⁠[1]。The Hacker Newsは9月25日の記事で、actions-coolの2つのactionが2回目の無効化を受けたと報じた⁠[4]。

報告の内容

タグの書き換えと侵害の報告

StepSecurityの5月18日の報告では、actions-cool/issues-helperの既存のタグがすべて、通常のコミット履歴に無い偽装コミットを指すよう動かされた⁠[3]。同じ組織のactions-cool/maintain-one-commentも、同じ手口で侵害された⁠[3]。偽装コミットのコードは、ランナー上でBunをダウンロードし、Runner.Workerのプロセスのメモリを読んで認証情報を集め、攻撃者のドメインへHTTPSで送る⁠[3]。

SafeDepは、書き換えで作られた新しいコミットはいずれも「Build action for <tag>」のメッセージで、作成者は正規の保守者の名前になっていると報告した⁠[1]。コミットに署名は無く、タグを元に戻した者はいない⁠[1]。悪意あるaction.ymlはまずペイロードを実行し、続けて本物のactionを呼ぶため、ステップは成功し、ボットも普段どおり動く⁠[1]。

リポジトリの再公開

Socketは、再有効化されたactions-coolのGitHub Actionsの報告を自社のブログに掲載した⁠[2]。The Hacker Newsによると、Socketの研究者は、両リポジトリが再びアクセス可能になったとき、リリースのタグは掃除されていなかったと述べた⁠[4]。タグは5月18日に入れられた悪意ある内容を指したままだった⁠[4]。そのため、版のタグでどちらかのactionを参照するワークフローは、次の実行でペイロードのダウンロードと実行を再開した⁠[4]。

研究者は、今回は新しいコードの公開も設定の変更も無かったと述べた⁠[4]。Socketの説明では、2つのactionは古いissueを閉じるなど、issueとコメントの整理を自動化する⁠[4]。呼び出すワークフローは通常、毎日の定期実行か、issueやプルリクエストが開かれたときに動く⁠[4]。Socketは、影響を受けたリポジトリの多くが、攻撃者のそれ以上の関与なしに再有効化から1日以内にペイロードを実行した可能性が高いとした⁠[4]。

ペイロードの動作

SafeDepの報告によると、ペイロードはCIのシークレットを盗んだうえで、Claude CodeとVS Codeのフックをリポジトリにコミットする⁠[1]。コミットには、ランナー上でRunner.Workerのメモリから読んだghs_トークンを使い、5つのファイルを書き込む⁠[1]。ペイロードはリポジトリ自身のトークンでGraphQL APIからコミットし、GitHub上ではこれらのコミットがgithub-actions[bot]による検証済み(verified)と表示される⁠[1]。

.claude/settings.jsonに置かれるのは、.claude/setup.mjsをnodeで実行するSessionStartのフックだ⁠[1]。.vscode/tasks.jsonも、VS Codeがフォルダを開いたときに同じコマンドを実行する⁠[1]。.claude/setup.mjsの役目は、Bun 1.3.14をダウンロードして.claude/index.jsを実行することだ⁠[1]。変更を取り込んでプロジェクトを開いた開発者は、自分の端末でマルウェアを実行する⁠[1]。

SafeDepは、kitty-monitorのバックドアのインストーラーはCIのランナーでは動かないと報告した⁠[1]。開発者の端末では、ペイロードがそのバックドアを入れ、トークンの監視とそのワイパーも入れることがある⁠[1]。ホームディレクトリを消すワイパーが動くのは、盗んだGitHubのトークンがHTTP 40xを返したとき、@cap-js/openapi@1.4.1に非推奨のメッセージが付いたとき、npmレジストリへの要求が失敗したときだ⁠[1]。

SafeDepが9月の検体を静的に復号した結果では、ペイロードはランナー上でパスワード無しのsudoを実行し、/etc/hostsにstepsecurity.ioのドメインを127.0.0.1に向ける項目を足す⁠[1]。SafeDepは、これでそのランナーの監視が妨げられうるとした⁠[1]。

目次へ

時系列

時系列
日付主体内容資料
2026年5月18日-19時10分24秒〜19時13分40秒(UTC)に、actions-cool/issues-helperの53のタグが偽装コミットに書き換えられた⁠[3]
2026年5月18日-19時30分30秒〜19時31分9秒(UTC)に、actions-cool/maintain-one-commentの15のタグが偽装コミットに書き換えられた⁠[3]
2026年5月18日StepSecurity侵害を報告し、GitHubのissue #11で保守者に知らせた⁠[3]
2026年5月19日The Hacker NewsGitHubが利用規約違反を理由にリポジトリへのアクセスを無効化したと報じた⁠[5]
2026年9月16日-GMT+2の11時9分から18時16分までのあいだに、両リポジトリが再びアクセス可能になった⁠[4]
2026年9月20日〜24日-6つのリポジトリがactions-cool/issues-helperを通じてフックのファイルを受け取った⁠[1、4]
2026年9月24日SafeDep新たな感染を報告した⁠[1]

目次へ

根拠と範囲

SafeDepは、感染したリポジトリの一覧をGitHubのコード検索で作っており、他のリポジトリを見落としている可能性があるとした⁠[1]。

表1:SafeDepが挙げた新たに感染したリポジトリ
リポジトリスター感染のコミットの時刻(UTC)推定の契機資料
jd-opensource/micro-app6,2542026年9月21日3時43分Close Inactive Issue⁠[1]
MaaXYZ/MaaFramework4,9142026年9月24日7時3分Release⁠[1]
ant-design/pro-components4,8332026年9月24日3時43分Issue Open Check⁠[1]
Moonofweisheng/wot-design-uni2,3002026年9月20日16時16分Issue Inactive⁠[1]
vbenjs/vben-admin-thin-next2,0722026年9月24日4時21分Issue Close Require⁠[1]
nineaiyu/xadmin-client1392026年9月22日4時38分Issue Close Require⁠[1]

SafeDepの説明では、契機の各ワークフローはactions-cool/issues-helperをタグ(@v2.1.1・@v2.2.0・@v2.2.1・@v3)で呼ぶ⁠[1]。悪意あるコミットはいずれもワークフローの実行開始から6分以内で、契機はこの時間からの推定である⁠[1]。契機のうち5つはissueのボットで、毎日かissueのイベントで動くため、攻撃者が関わらなくても感染が繰り返される⁠[1]。

どのリポジトリも、既定のブランチにフックのファイルが残っている⁠[1]。各リポジトリの.claude/index.jsは、actionのindex.jsと同じGit blob 2931c1be(500,143バイト)のファイルだ⁠[1]。SafeDepは、9月の感染はこれらのリポジトリで初めて見つかった感染で、9月のコミットが既定のブランチで.claude/setup.mjsに触れた最初のコミットだとした⁠[1]。

2回目の実行は同じファイルに2つ目のフックを足し、micro-appは2分の間隔で2つのコミットを受けた⁠[1]。コミットのメッセージは直前のコミットを写すことがあり、pro-componentsのコミットとその親はどちらも「3.1.14-7」だった⁠[1]。

5月の波との関係

SafeDepの報告では、9月の感染は5月のMini Shai-Huludの波に由来する⁠[1]。最も早い下流のフックのコミットの約6時間後には、npmのatoolアカウントの侵害で637〔注1〕の悪意ある版が公開された⁠[1]。この波は関連するビルド(499,328バイト)を使い、両ビルドともt.m-kosche[.]com、Bun 1.3.14、kitty-monitorのバックドア、同じフックのファイルを使う⁠[1]。The Hacker Newsの5月19日の記事によると、Socketの脅威インテリジェンスの責任者は、@antvのnpmの侵害は送信先ドメインの重なりからactions-coolの侵害と関連する可能性が高いと述べた⁠[5]。

目次へ

関係者の対応

StepSecurityは5月18日の報告で、actions-cool/issues-helperを自社のCompromised Actions Policyに加え、攻撃者の送信先のドメインをHarden-Runnerの全体の遮断リストに加えたと説明した⁠[3]。StepSecurityは、タグがすべて悪意あるコミットに解決されるため、版で参照するワークフローが次の実行で悪意あるコードを取り込むとした⁠[3]。影響を受けないのは、既知の安全な完全なコミットSHAに固定したワークフローだけだ⁠[3]。

The Hacker Newsは、5月18日より前の版の完全なコミットSHAに固定したワークフローは影響を受けないと報じた⁠[4]。どちらのリポジトリも、利用規約違反によりGitHubのスタッフがアクセスを無効化した旨のメッセージを表示している⁠[4]。

目次へ

未公表の事項

  • 両リポジトリが9月16日に再びアクセス可能になった理由
  • 再公開の前にタグが元に戻されなかった理由
  • 両リポジトリが再び無効化された日時
  • 9月にペイロードを実行したワークフローとリポジトリの総数、盗まれたシークレットの件数
  • SafeDepが挙げたリポジトリのフックのファイルを取り込んだ開発者の端末での実行の有無

注

  • 〔注1〕The Hacker Newsは、攻撃者が323のパッケージにわたり639の悪意ある版を公開したと報じた⁠[6]。

出典

調査・観測

報道機関

更新記録

  • 2026年9月29日:公開した。
  • 2026年10月8日:The Hacker Newsの記事の10月8日の更新(出典4)で加わった6つのリポジトリの新たな感染の記述を、時系列の資料に加えた。

目次へ