技術 約7分で読めます

axiosは単発ではなかった、UNC1069は「Openfort」名義でFastifyやLodash、dotenvのメンテナまで狙っていた

いけさん目次

前回の記事では、axiosメンテナJason Saaymanが偽Slackと偽Teams会議でRATを踏まされた経緯を整理した。4月3日以降に出てきた公開証言を追うと、あれはaxios単発ではない。高影響のNode.jsメンテナを横断的に狙うキャンペーンだった可能性がかなり高い。

重要なのは、現時点で「侵害が公開確認されたケース」と「標的化が確認されたケース」を分けて見ることだ。公開ソース上、実際に侵害されてnpm公開まで使われたのはaxiosのJasonだけだが、同じ手口で接触を受けた有名メンテナは一気に増えた。

公開確認できた標的

4月5日時点で公開情報から確認できる範囲を整理すると、少なくとも次の面々が同系統の攻撃を受けている。

対象主なプロジェクト / 役割公開ソース手口結果
Jason Saaymanaxiosリードメンテナaxiosポストモーテム issue実在企業の創業者を装う接触 → 偽Slack → 偽Teams会議 → 「更新」インストール侵害され、axios 1.14.1 / 0.30.4公開
Pelle Wessman (voxpelli)Mocha、neostandard、npm-run-all2、type-festaxios issueの本人コメント偽ポッドキャスト出演 → 偽配信サイト → 未署名macOSアプリ / curl 実行要求拒否して回避
Jean BurellierNode.js core collaborator、Express contributorSocketの調査記事LinkedInでOpenfort関係者を装う → Slack → teams.onlivemeet.com へ誘導 → 更新要求拒否して回避
Matteo CollinaFastify、Pino、Undici、Node.js TSC ChairSocketの調査記事一見正当なSlack outreach → ソフトウェア導入要求回避
Scott Mottedotenv作者Socketの調査記事同じOpenfortペルソナで接触標的化確認
Ulises GascónNode.js core collaborator / releaser、Express TC、Lodash TSCSocketの調査記事同系統キャンペーン標的化確認
Wes ToddExpress TC、Node Package Maintenance WGSocketの調査記事同系統キャンペーン標的化確認
Jordan HarbandTC39メンバー、ECMAScript polyfill/shimメンテナSocketの調査記事同系統キャンペーン標的化確認
John-David DaltonLodash作者Socketの調査記事同系統キャンペーン標的化確認
Feross AboukhadijehとSocketエンジニアWebTorrent、StandardJS、bufferなどfeross本人コメントSocketの調査記事同系統キャンペーン標的化確認

被害が「広がった」のではなく、標的が「広く取られていた」ことが見えてきた、というのが正確だ。axiosはその中で実際に刺さった最初の大事故だった。

共通する攻撃フロー

Jason、Pelle、Jeanの3件は公開情報が特に詳しい。並べると攻撃の骨格がほぼ同じだと分かる。

graph TD
    A["LinkedIn / Slackで接触<br/>実在企業や企画を装う"] --> B["数日〜数週間かけて信頼形成<br/>グループ参加者も演出"]
    B --> C["直前に会議リンク送付<br/>偽Teams / 偽配信サイトへ誘導"]
    C --> D["音声・接続・更新エラーを表示"]
    D --> E["アプリのインストール<br/>または curl / script 実行を要求"]
    E --> F["RAT / インフォスティーラー設置"]
    F --> G["npm token / browser session / 各種秘密情報を奪取"]
    G --> H["高信頼パッケージから supply chain 攻撃"]

Jasonはissueコメントで、攻撃者が企業ブランド、Slackワークスペース、他OSSメンテナの偽プロフィールまで用意していたと説明している。Pelleはポッドキャスト出演依頼を信じさせるため、他出演者がいるように見せかけたグループと事前質問を用意されていた。Jeanは3月5日にLinkedInで接触され、3月27日の会議ではカレンダー招待に会議URLを入れず、開始5分前にSlackでリンクだけを送る手口に遭っている。

この「直前リンク」「偽会議UI」「音声トラブル修正」を組み合わせる流れは、Google Mandiantが2月10日に公開したUNC1069のレポートや、Microsoftが2024年11月22日に整理したSapphire Sleetの手口ときれいに一致する。前者は偽Zoom会議でのClickFix、後者は「接続問題の修正」と称して .scpt.vbs を渡す流れを説明していた。

「Openfort」名義の再利用が示すこと

今回の続報で最も嫌な点は、Jean BurellierとJason Saaymanの両方に対し、同じ「Openfort」ペルソナが使われていたとSocketが報じていることだ。つまり攻撃者は、単に有名メンテナへ片っ端からスパムを投げているのではない。反応の良い口実やブランドを再利用しながら、コミュニティ内の高信頼ノードへ順番に当てている。

しかも狙われたのは単一のライブラリ系統ではない。

  • HTTPクライアント: axios, Undici
  • フレームワーク / 基盤: Fastify, Express
  • ユーティリティ: Lodash, dotenv
  • テスト / 品質: Mocha, neostandard
  • エコシステムの中核人物: Node.js core collaborator, releaser, TSC

1つ成功するだけで広範囲に波及する位置ばかりだ。攻撃者がパッケージではなく「人間の信頼グラフ」を攻めていることがよく分かる。

これは暗号資産向けの手口がOSSに転用されたもの

この流れ自体は突然出てきたものではない。Mandiantは2026年2月10日のレポートで、UNC1069が暗号資産企業、ソフトウェア企業の開発者、VCを対象に、偽Zoom会議とAIを使ったソーシャルエンジニアリングを使っていたと書いている。MicrosoftもSapphire Sleetについて、VCやリクルーターを装い、接続トラブル修正名目でスクリプトを実行させる手口を説明していた。

axios事件のあとに見えてきたのは、その既存プレイブックがそのままOSSメンテナ向けにリターゲティングされたことだ。暗号資産ウォレットを盗む代わりに、npmへの書き込み権限を狙う。攻撃者から見れば、こちらの方が一撃のレバレッジは大きい。

Microsoftは4月1日のaxios分析で、今回のnpm侵害をSapphire Sleetに帰属させた。Google側の呼称はUNC1069だが、いずれの命名でも見えているのは同じ構図だ。開発者個人の端末を奪い、その後認証済み状態を利用して組織やサプライチェーンへ入る。

本当に危険なのは「複数侵害」ではなく「複数同時照準」

ここは少し冷静に見た方がいい。4月5日時点で、FastifyやLodashやdotenvがすでに侵害されたと断定できる公開証拠はない。だから「有名パッケージが全部やられた」と書くのは過剰だ。

ただし、逆に言えばもっと不気味でもある。まだ成功していないのに、これだけの高信頼メンテナが同時に照準に入っている。攻撃者がNode.jsエコシステムのどこを落とせば最大波及になるかをかなり理解しているからだ。

OIDC publish、provenance、npm 2FAは引き続き必要だが、それだけでは止まらない。Jasonの件が示した通り、端末そのものが取られた時点でソフトウェアTOTPやブラウザセッションはまとめて破られる。守るべき境界はnpmアカウントより前、つまりメンテナの常用端末だ。

最低限、次の前提で動いた方がいい。

  • 面談・ポッドキャスト・採用面接の「接続修正」でアプリやスクリプトを実行しない
  • 会議用端末とリリース用端末を分ける
  • npmの公開権限はハードウェアキー前提にする
  • レジストリ側でOIDC-only publishを強制できない限り、minimumReleaseAge や provenance検証で消費側も時間差防御を入れる

結論

axiosは氷山の一角だった。続報で見えてきたのは、UNC1069 / Sapphire SleetがすでにNode.jsの「誰を落とせば広く刺さるか」を理解しており、Fastify、Lodash、dotenv、Mocha、Express、Node.jsコア周辺まで横断的に探りを入れていたことだ。

今のところ公開確認できる実害はaxiosが中心だが、警戒すべき点はそこではない。次に誰が踏んでもおかしくない位置まで攻撃者が来ていること、それ自体が続報の本質だ。

関連記事