GitHub のワークフローを使って秘密を盗む攻撃「GhostAction」に、第2段が見つかりました。研究者のOpenSourceMalwareは2026年10月16日、94のリポジトリに、VS Code でフォルダーを開くと動く設定と、フォントに見せかけた盗みのコードが入れられていたと公表しました。盗む場所が、GitHubのCIから開発者のパソコンへ広がっています。
何が見つかったか
GhostActionは、盗んだGitHubの権限で、偽の「security audit」のワークフローをリポジトリに入れ、CIの秘密とgitの履歴の中の認証情報 を盗む攻撃です。10月8日からの動きは、GitHubの346リポジトリに偽の監査ワークフロー、クラウドの鍵を窃取 にまとめています。
OpenSourceMalwareによると、今回の第2段は、リポジトリに3つのファイルを足します。VS Codeの設定のファイル、フォントに見せかけたファイル、そして2つ目のワークフローです。
入れられたもの
中身
.vscode/tasks.json
eslint-checkという名前の作業(タスク)。フォルダーを開いたときに、画面に出さずに動く設定
public/fonts/fa-solid-400.woff2
名前はWebフォントだが、中身は38行のNode.jsのプログラム。認証 情報を集めて送る
2つ目のワークフロー
lint.yml、ci-check.ymlなど7つの名前。第1段より多くの種類の認証情報を探す
研究者が公開した、第2段のVS Codeの設定(tasks.json) 出典: OpenSourceMalware「GhostAction Copycats PolinRider by Hiding a Stealer in a Fake Font File」 (引用)
見つけたのは、Jamf Threat Labsの研究者です。北朝鮮の攻撃とされるPolinRiderの被害を探す中で、同じ手口の設定を持つ94のリポジトリを見つけました。ただし、送り先のIPアドレスがGhostActionのサーバーと同じで、中身も難読化されていませんでした。研究者は、PolinRiderの手口をまねた別の攻撃者とみています。
偽のフォントが集めるもの
研究者は、フォントに見せかけたファイルを動かさずに読み、次のものを集めて送ると説明しています。
利用者名とホスト名、CIで動いたときはリポジトリの名前。
認証情報のファイル8種類: AWS (.aws/credentials)、PyPI(.pypirc)、npm(.npmrc)、Git(.git-credentials)、.netrc、Claude(.claude/.credentials.json)、Gemini(.gemini/oauth_creds.json)、Kubernetes(.kube/config)。
SSHの秘密鍵(id_rsa・id_ed25519)。
ホームフォルダーの中にある、AWS・Anthropic・GitHub・npm・PyPIのトークンの形の文字列。
AWS_、ANTHROPIC、OPENAI、HF_TOKEN、GITHUB_TOKENで始まる環境変数。
集めた中身は、暗号化されないHTTPで攻撃者のサーバーへ送られます。そのあと、5分ごとに攻撃者のサーバーから命令を受け取って実行するcronの設定を入れます。印は「#ghc2」です。研究者は、このcronが入ると、そのパソコンは攻撃者の命令で動く状態になり、フォントのファイルを消してもcronは残ると警告しています。
GhostActionの第1段と第2段、集める認証情報と動く条件(編集部作成) 作成: 編集部 / もとの資料: OpenSourceMalwareのブログとVS Codeの公式の説明を編集部が整理
動く条件
研究者は、リポジトリをcloneしたり開いたりしただけでは、盗みのコードが動いたとは言えないとしています。VS Codeが自動のタスクを動かすには、2つの条件があります。
条件
VS Codeの公式の説明
信頼したワークスペース
信頼していないワークスペース(制限モード)では、自動タスクは設定にかかわらず動かない
自動タスクの許可
task.allowAutomaticTasksの既定はoff。初めてのワークスペースでは、許すか許さないかを1度だけ聞かれる。onにすると聞かずに動く
開くときに「信頼する」を選び、自動タスクを「許可」していれば、動いたとみなす必要があります。研究者は、フォントのファイルをnodeで直接動かしても同じだとしています。
消しても、また入れられた
研究者が調べた79のリポジトリでは、第1段は10月8日、第2段は主に10月15日に入れられていました。65件は、1年以上更新の無いリポジトリでした。攻撃は、権限を持つアカウントが書き込めるリポジトリすべてに入れるため、放置されたものにも入ります。
目を引くのは、第1段のワークフローを10月9日に消した2つのリポジトリにも、15日に第2段が入れられていたことです。研究者は、第1段を入れたときの権限が取り消されていなかったと読んでいます。ワークフローを消しても、トークンは取り消されません。
影響する会社・しない会社
影響する: GitHubで、社員や委託先のアカウントが書き込めるリポジトリを持つ会社です。放置された古いリポジトリやフォークも含め、第1段・第2段のファイルが無いかを確かめます。
影響する: 開発者がVS Codeで、ほかの人のリポジトリを信頼して開き、自動タスクを許している会社です。開いたパソコンの認証情報が盗まれたおそれがあります。
影響する: 開発者のパソコンに、クラウドの鍵やnpm・PyPIのトークン、AIのツールのログインを置いている会社です。盗まれたときの影響が大きくなります。
影響しない: VS Codeで制限モードのまま開いた場合と、task.allowAutomaticTasksがoffのまま自動タスクを許していない場合です(VS Codeの説明のとおり)。
影響しない: Windowsのパソコンでは、cronの登録はされません。ただし、認証情報を盗む部分は動くので、作り直しは要ります。
情シスが今日やること
社内のリポジトリを2つのファイルで探します。 GitHubの組織のコードの検索で、.vscode/tasks.jsonのeslint-checkと、public/fonts/fa-solid-400.woff2を探します。研究者が公開した送り先のIPアドレス(193.32.204.199)も、ワークフローの中を検索します。フォークと、すべてのブランチも見ます。
見つかったら、先に権限を取り消します。 きれいな端末から、そのアカウントのセッション、個人用のアクセストークン、OAuthの許可、GitHub App、SSHの鍵、デプロイキーを取り消し、パスワードを変えて、フィッシングに強い多要素認証にします。そのあとでファイルを消します。
秘密を作り直します。 リポジトリのActionsのシークレットと、gitの履歴に一度でも入った認証情報を作り直します。パッケージを公開しているなら、覚えのない版が出ていないかを確かめます。
開発者のパソコンを確かめます。 macOSとLinuxは crontab -l で「#ghc2」や上のIPアドレスを含む行が無いかを見ます。見つかったら、パソコンの作り直しを考え、SSHの鍵、クラウドの鍵、npm・PyPI・GitHubのトークン、AIのツールのログインを、きれいな端末から作り直します。
VS Codeの設定を決めます。 社員のVS Codeで task.allowAutomaticTasks を off にそろえ、知らないリポジトリは制限モードのまま開く決まりにします。ワークフローの実行に承認を求める設定と、.github/workflows の変更にレビューを求める設定も入れます。
公表に書かれていないこと
第2段を入れた方法(どの権限が使われたか)。研究者は、確かめられていないとしています。
cronが攻撃者のサーバーから受け取る、次の段の命令の中身。
GitHubの公式の対応。確かめた範囲では、GitHubの発表は見つかりませんでした。
2026年10月19日時点の内容です。