世界を動かす技術を、日本語で。

インシデントレポート: CVE-2024-YIKES

2026年5月11日原文(nesbitt.io)

概要

  • JavaScript依存パッケージの侵害から始まった サプライチェーン攻撃 の詳細なインシデント報告
  • RustPython のビルドツールにマルウェアが拡散し、約420万台が影響を受ける
  • 偶発的に 暗号通貨マイニングワーム が問題を修正
  • 根本原因は YubiKeyの盗難 と認証の甘さ
  • 対応策・学び・今後の課題を包括的に記載

セキュリティインシデント概要

  • JavaScriptエコシステムの依存パッケージ侵害 により、認証情報の窃取が発生
  • 盗まれた認証情報で Rust製圧縮ライブラリ(vulpine-lz4) が改ざんされる
  • 改ざんされたRustライブラリが Pythonビルドツール(snekpack) に組み込まれる
  • snekpack経由で 全世界の開発者約420万台 にマルウェアが配布
  • 偶然に cryptobro-9000 (暗号通貨マイニングワーム)がsnekpackをアップグレードし、マルウェアを除去

インシデントの時系列

  • Day 1

    • 03:14 UTC:left-justifyメンテナーMarcus Chenが自宅で盗難被害
    • 09:22 UTC:nmpレジストリにログインしようとするも2FAキー紛失
    • 09:31 UTC:フィッシングサイトでnmp認証情報を入力
    • 11:00 UTC:left-justifyにマルウェア含むバージョンが公開
    • 13:15 UTC:マルウェア疑惑のサポートチケットが低優先で自動クローズ
    • 14:47 UTC:vulpine-lz4メンテナーの認証情報が流出
    • 22:00 UTC:vulpine-lz4に悪意あるbuild.rs追加
  • Day 2

    • 08:15 UTC:Karen Oyelaran氏がマルウェアを発見しIssue作成
    • 10:00 UTC:大手顧客のVPがLinkedInで事件を知る
    • 10:47 UTC:Slackで「compromised」のスペル論争
    • 12:33 UTC:snekpackのCIパイプラインが標的に
    • 18:00 UTC:snekpack 3.7.0リリース、マルウェア拡散開始
    • 19:45 UTC:別の研究者が長文ブログで報告
  • Day 3

    • 01:17 UTC:オークランドのジュニア開発者がPRで修正提案
    • 02:00 UTC:偽YubiKey到着、中身はUSBとREADME
    • 06:12 UTC:cryptobro-9000が拡散開始、npm/pipアップデートを強制
    • 06:14 UTC:snekpackが3.7.1にアップグレードされマルウェア除去
    • 06:15 UTC:マルウェアのリバースシェルが火曜に作動するもC2サーバが機能不全
    • 09:00 UTC:snekpackアドバイザリ発行、「証拠が見つかっていない」と記載
    • 11:30 UTC:開発者が「ターミナルがfishになった」とツイート
    • 14:00 UTC:vulpine-lz4の認証情報ローテーション、メンテナーは不在
    • 15:22 UTC:インシデント解決宣言、振り返り会議は三度延期
  • Week 6

    • CVE-2024-YIKES割り当て、公開は遅延
    • メディア・カンファレンスで既に詳細が拡散

根本原因・要因

  • Kubernetesという名の犬 がYubiKeyを食べた
  • nmpレジストリが パスワード認証のみ を許容
  • Google AI Overview がフィッシングサイトを上位表示
  • Rustの「小さなクレート」文化による依存深度の増加
  • PythonビルドツールがRustライブラリを 放置してベンダリング
  • Dependabot がCIパスで自動マージ、CI自体がマルウェアでバイパス
  • 暗号通貨ワームの方がCI/CD運用が優れているという皮肉
  • 最終承認者が外部委託者、かつ火曜日

対応策・今後の課題

  • アーティファクト署名の導入 (未実施の宿題)
  • 2FAの義務化 (既に必須だが機能せず)
  • 依存関係の監査 (847個存在)
  • バージョン固定 はセキュリティパッチ受信を妨げるジレンマ
  • Rustへの全面移行 の皮肉
  • 善意のワーム に期待
  • ヤギ農場 への転職検討

顧客影響・信頼

  • 一部顧客で セキュリティリスク 発生
  • 積極的な情報開示 と顧客信頼の維持を最優先

学び・教訓

  • セキュリティ体制の再点検 を開始
  • クロスファンクショナルワーキンググループ 設立(未開催)

謝辞・その他

  • Karen Oyelaran氏、オークランドの開発者、各セキュリティ研究者へ感謝
  • cryptobro-9000作者はSoundCloudの宣伝を希望
  • Kubernetes(犬) はコメント拒否
  • fish shellはマルウェアではない と法務部から明記要請
  • セキュリティチームの 人員増強要望 は依然バックログ中

Hackerたちの意見

サプライチェーンの問題は本当に厄介だし、もっと良くする必要があるよね。個人的には、Rustの基盤がいくつかのコアクレートをサポートして、メインのRust言語と同じ監査手続きを受けさせるのがいいと思う。それでプロジェクトに資金を提供して、サプライチェーンの脆弱性を減らすべきだと思う。クレートやnpmを排除するのが正しい答えだとは思わないよ。クレートやnpmは多くの開発者にとってありがたい存在だからね。

CratesもRust Secを取り入れる努力をしてるけど、上記に加えて、コミュニティには小さな依存関係をたくさん持つのではなく、Tokioのようにいくつかの大きなものに絞ってほしいな。

でも、npmとnmpの両方が本当に必要なの?

いや、NPMは削除しちゃおう。あれから良いことなんて出てこないし。

高価値のクレートを標準ライブラリに移すのはどう?

正直、これが blessed.rs の最終目標だと思ってた。

crates.ioで人気のクレートの多くは、すでにRust組織が提供している公式のクレートなんだよね。Rustのクレートグラフについて悩んでる人たちがこれを見落とすことが多い。crates.ioのトップページで最もダウンロードされたクレートのトップ10を見てみると、Rust組織かRustのコアメンテイナー以外のものはbase64クレートだけだよ。

これは最近読んだ中で、実際にはSCPじゃないけど、最もSCPっぽい内容だね。

ああ、そうそう、めっちゃ珍しい:サプライチェーン問題(SCP)

混乱してる人のために言うと、これはサプライチェーンの問題についての(個人的にはすごく良い)フィクションだよ。最初にざっと読んだときは本物かと思ってすごく心配になったけど、だからこそもっと注意深く読んじゃった :)

'nmp'

最初は全然わからなかった、正直言って。こんな雰囲気だったよね。https://github.com/bitcoin/bips/blob/master/bip-0042.mediawi...

Hacker Newsで議論の続きを見る