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

2026/05/11 2:43

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

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

ソースコードのサプライチェーン攻撃は、

left-justify
(週ごとのダウンロード数が 8.47 億回)という侵害された JavaScript の依存関係に起因し、その結果、Python ツールの
snekpack
を介して数百万人の開発者に影響を及ぼしました。
snekpack
は、悪意のあるライブラリ
vulpine-lz4
を統合した後にマルウェアを配布しました。このインシデントは Day 1 に発生し、Google AI Overviews で提示されたフィッシングリンクに引っかかり、 maintainer の Marcus Chen が被害にあうことで始まり、複数パッケージレジストリ(
.npmrc
.pypirc
、Cargo、Gem の認証情報)の認証情報が漏洩し、引渡条約のない国にあるサーバーに到達しました。当初、「Critical」から「Catastrophic」と評価が変更されたものの、Day 3 に関連性の/crypto マining ウォーム (
cryptobro-9000
) が誤って脆弱なマシンを
snekpack
のアップグレードによってパッチ適用したため、「Somehow Fine」と宣言されました。

攻撃チェーンには以下が含まれていました:

  • 悪意のある
    vulpine-lz4
    ビルドスクリプトは、ホスト名がトリガー(例:"build"、"ci")に一致する場合マルウェアを実行しました。
  • 不正なアップデートでは、reverse shells が Tue デイのみ有効になるように、そしてデフォルトシェルを
    fish
    に変更するなどの機能を追加されました。
  • 企業大手(Fortune 500 社)はソーシャルメディアを通じて認識し、ある VP はマウイ島でこの事実に気づきました。

インシデントは Day 3 の 15:22 UTC に解決され、CVE-2024-YIKES は Week 6 に割り当てられ、ウォームによって約 420 万台の_MACHINE_ が救助された(ただしその C2 サーバーも侵害されていた)と推定されます。根本原因には、弱いレジストリ認証、AI 生成のフィッシングリンク、不十分な CI/CD の衛生管理があり、ユーモラスに「犬が Kubernetes を食べ、YubiKey が失われた」という形で表現されました。

是正措置には、

vulpine-lz4
のリファクタリング(Rust に書き直し)、アーティファクト署名の実装(2022 年第 3 四半期からバックログされていた)、強制的な MFA の導入、847 の推移的依存関係の監査が含まれます。このインシデントは、自動化されたビルドパイプラインにおける重要なギャップと、将来の攻撃を防止するための厳格な依存関係監査の必要性を示しています。

本文

提出レポート:03:47(UTC)| ステータス:解決済み(偶然の幸運により)| 深刻度:重篤 → 壊滅的 → どうやらなんとかなった様 | 継続時間:73 時間 | 影響対象システム:はい

執行概要 セキュリティ事象が発生しました。現在は解決済みです。私たちはセキュリティを真摯に受け止めております。詳細については、これまでの 14 のインシデント報告書をご参照ください。

要約 JavaScript エコシステムの破損した依存関係が起因し、認証情報の窃取が行われました。これにより、Rust 製圧縮ライブラリに対するサプライチェーン攻撃が発動し、同ライブラリは Python 製のビルドツールに組み込まれ、結果として約 400 万人の開発者の機器へとマルウェアを配信するに至りました。その後、無関係な暗号通貨マイニング用ワームによって誤ってパッチが適用されました。

タイムライン

  • Day1 03:14(UTC)
    left-justify
    の Maintainer である Marcus Chen 氏(週間ダウンロード数 8.47 億回)は、Twitter で自らの定期券、古いラップトップ、「Kubernetes から嘔吐されたような重要そうに見えるもの」といった物品がアパートから盗まれたことを報告しました。しかし、彼はこれをパッケージのセキュリティ問題と即座には結びつけませんでした。
  • Day1 09:22(UTC) — Chen 氏が
    nmp
    レジストリへのログインを試みましたが、ハードウェア 2FA キーが紛失していました。代替品としての YubiKey を購入すべき場所を検索すると、Google AI Overviews は検索結果の上位に「yubikey-official-store.net」というフィッシングサイトをリンクさせました(同サイトはわずか 6 時間前に登録されていました)。
  • Day1 09:31(UTC) — Chen 氏はそのフィッシングサイトに認証情報を入力しました。サイトは購入への感謝を示し、3〜5 営業日以内に配達すると約束しましたが、実際には何も届けられませんでした。
  • Day1 11:00(UTC) — 公開されたメールアドレス
    email@protected
    を通じて、チャangelog に「パフォーマンス改善」という記載がありました。同パッケージには
    .npmrc
    .pypirc
    ~/.cargo/credentials
    ~/.gem/credentials
    の情報を攻撃者によって誤認していた某国( extradition 条約がないと勘違いされた場所)にあるサーバーへ流出させるスクリプトが含まれていました。
  • Day1 13:15(UTC)
    left-justify
    に対して「SDK が私の .npmrc を流出させている理由」というタイトルのサポートチケットが開かれました。優先度は「低 - ユーザー環境の問題」と标记され、14 日間の不活動の後、自動的にクローズされました。
  • Day1 14:47(UTC) — 流出した認証情報の中に、Rust 製ライブラリ
    vulpine-lz4
    の Maintainer が含まれていました。同ライブラリは「Firefox をテーマにした驚くほど高速な LZ4 解凍」を謳っており、ロゴは太陽眼鏡をかけたカートゥーンフックスです。GitHub では 12 stars を得ていますが、Cargo 自体の transitive dependency です。
  • Day1 22:00(UTC)
    vulpine-lz4
    バージョン 0.4.1 がリリースされました。コミットメッセージには「fix: ストリーミング解凍のエッジケースを解決」とあり、実際の変更点は、ホスト名に"build"や"ci"や"action"や"jenkins"や"travis"または不可解な"karen"が含まれる場合、シェルスクリプトをダウンロードして実行する
    build.rs
    スクリプトを追加することでした。
  • Day2 08:15(UTC) — セキュリティ研究者の Karen Oyelaran 氏が、自らの個人用ラップトップでペイロードが発動した際、このmalicious commit に気づきました。彼女は「ビルドスクリプトがインターネットからシェルスクリプトをダウンロードして実行しますか?」というタイトルの Issue を開設しましたが、回答はありませんでした。正当な Maintainer はユーロミリオンの宝くじで 230 万ユーロを得ており、現在ポルトガルのヤギ飼育に関する研究を行っていました。
  • Day2 10:00(UTC) — Fortune 500 の
    snekpack
    顧客社 CTO が LinkedIn の投稿「貴社の組織は left-justify の影響を受けていますか?」を見て事件を知りました。彼はマウイ島のビーチにいましたが、なぜ自分たちに早く通知が至らなかったのか不思議に思っていました(実は既に通知されていたそうです)。
  • Day2 10:47(UTC) — 「#incident-response」Slack チャンネルは一時的に、「アメリカ英語で"compromised"を綴る際に z を使うべきか?」という 45 メッセージの議論にピボットしました。有人がこれをオフラインへ持ち込むよう提案しました。
  • Day2 12:33(UTC) — シェルスクリプトは特定の被害者、つまり 60% の PyPI パッケージ(名称に"data"を含むもの)で使用されている Python ビルドツール
    snekpack
    の CI パイプラインを標的として設定しました。snekpack は「Rust がメモリセーフだから」という理由で
    vulpine-lz4
    を採用していました。
  • Day2 18:00(UTC)
    snekpack
    バージョン 3.7.0 がリリースされました。マルウェアは世界中の開発者の機器にインストールされるようになっています。同マアルウェアは
    ~/.ssh/authorized_keys
    に SSH キーを追加し、二日曜日にのみ有効になるリバースシェルをインストールし、ユーザーのデフォルトシェルを fish へ変更します(最後の挙動はバグであると考えられています)。
  • Day2 19:45(UTC) — 無関係な第 2 のセキュリティ研究者が、"I found a supply chain attack and reported it to all the wrong people."というタイトルのブログ記事を公開しました。記事は 14,000 語に及び、「this economy?」という言葉が含まれる回数が 7 回あります。
  • Day3 01:17(UTC) — オークランドのジュニア開発者が、無関係な問題のデバッグ中に悪意のあるコードを発見しました。彼女は
    snekpack
    でのvendored
    vulpine-lz4
    を元に戻すための PR をオープンしましたが、その承認には 2 人の署名が必要で、両方とも寝ていました。
  • Day3 02:00(UTC)
    left-justify
    の Maintainer 氏が "yubikey-official-store.net"から YubiKey を受け取りました。それは内容为"$4 の USB ドライブに「lol」と書いてある README しか含まれていないものでした。
  • Day3 06:12(UTC) — 無関係な暗号通貨マイニングワーム
    cryptobro-9000
    が、"JSON をさらに JSON にし、今ではネストされたコメントをサポート"とするパッケージ
    jsonify-extreme
    の脆弱性を通じて広がり始めました。ワームのペイロード自体は目新しくはありませんが、その伝播メカニズムとして、感染した機器で
    npm update
    pip install --upgrade
    を実行することで攻撃対象領域を広げるという点に特徴がありました。
  • Day3 06:14(UTC)
    cryptobro-9000
    は偶然にも
    snekpack
    をバージョン 3.7.1 にアップグレードしました。これは、混乱していた共 Maintainer が「なぜそんなに騒いでいるのか理解できなかった」ため、以前の vendored バージョンの
    vulpine-lz4
    にロールバックした正当なリリースでした。
  • Day3 06:15(UTC) — マルウェアの金曜日にのみ有効になるリバースシェルが作動しました(注:実際は火曜日でした)。しかし、このシェルは接続されたコマンド・アンド・コントロール(C2)サーバーが
    cryptobro-9000
    によって侵害されており、激しくデータ交換を繰り返しているため応答できない状態でした。
  • Day3 09:00(UTC)
    snekpack
    の Maintainer らはセキュリティアドバイザリーを発表しました。内容はこの件について「予防原則に基づき」と「能動的な悪用という証拠はない」(technically true because evidence was not sought)というフレーズを含みました。
  • Day3 11:30(UTC) — 某開発者が"更新したすべての依存関係の結果、ターミナルが fish になっている????"とツイートしました。このツイートは 47,000 の好意的な反応を得ました。
  • Day3 14:00(UTC)
    vulpine-lz4
    の侵害された認証情報が回転されました。新規ヤギ農園から電子メールで連絡を受けた正当な Maintainer は、「そのリポジトリには 2 年間触っていない」「Cargo の 2FA がオプションだと思っていた」と述べています。
  • Day3 15:22(UTC) — インシデント解決と宣言されました。再評価(Retrospective)はスケジュールされ、その後 3 回も再度延期されました。
  • Week 6 — CVE-2024-YIKES が正式に割り当てられました。このアドバイザリーは、MITRE と GitHub Security Advisories が CWE クラス分類について議論している間にエンバーゴ状態でした。CVE が公開されるまでに、3 つの Medium 記事と DEF CON の発表が既にこのインシデントの詳細を説明していました。総損失:不明。侵害された総マシン数:推定 420 万台。暗号通貨ワームによって救われた総マシン数:同様に推定 420 万台。セキュリティ姿勢の変化:不気味です。

根本原因 Kubernetes(犬)が YubiKey を食べたことによるものです。

寄与要因

  • nmp
    レジストリでは、週間ダウンロード数が 1,000 万回未満のパッケージでもパスワードのみでの認証が可能であるため
  • Google AI Overviews が存在すべきではない URL に自信を持ってリンクするため
  • Rust エコシステムの「小さなクレイツ(Crate)」哲学は、npm エコシステムからのカルトのように Cargo に取り込まれており、GitHub stars 3 つしか持たない"is-even-number-rs"というパッケージであっても、基幹インフラの 4 段深い transitive dependency となり得るため
  • Python ビルドツールが「パフォーマンス向上」のために Rust ライブラリを取り入れても、その後決して更新しないため
  • CI が通った後に Dependabot によって PR が自動的にマージされた場合、CI が通ったのはマルウェアが volkswagen をインストールしたから(冗談めかした説明)であるため
  • 暗号通貨用ワームの方が、多くのスタートアップよりも優れた CI/CD の衛生管理を持っているため
  • このインシデントには単独で責任を持つ人物はいなかったが、Dependabot の PR は、その金曜日が最終勤務日の契約者によって承認されていたことにも注目する必要があるため
  • それは火曜日だったため

是正措置

  • アーティファクト署名を実装する(2022 年第 3 四半期のインシデントからのアクションアイテムだが、依然として backlog に残っている)
  • 強制 2FA を実装する(既に必須化されているにもかかわらず効果はなかった)
  • transitive dependencies の監査を行う(該当数は 847 に及ぶ)
  • すべての依存関係のバージョンをピン固定する(セキュリティパッチの受領を防ぐため)
  • 依存関係のバージョンをピン固定しない(サプライチェーン攻撃を防ぐため)※※※:ここは矛盾した記述ですが、原文通り訳しました
  • Rust で再実装する(vulpine-lz4 を指差しながら)
  • 善意のあるワームを願うこと
  • ヤギ農園への転職を検討すること

顧客影響 一部の顧客では、最適なセキュリティ結果が得られなかった可能性があります。私たちは、関連するステークホルダーに対し状況に関する可視性を提供するため、積極的にアプローチしています。顧客の信頼は我々の北極星(指針)です。

主な学び 今この機会を通じて、今後のセキュリティ姿勢を見直します。次のステップを調整するためにクロスファンクショナルワーキンググループが設立されました。ただし、当該グループはまだ会議を開催していません。

謝辞

以下の皆様への感謝を表します:

  • ホスト名が正規表現と一致したことからこの Issue を発見してくれた Karen Oyelaran 氏
  • インシデント解決から 4 時間後に PR が承認されたオークランドのジュニア開発者様
  • この Issue を最初に発見したが、間違った人々へ報告したセキュリティ研究者の方々
  • 自分たちの名前でのクレジットは望まないと要望したが、SoundCloud の言及には理解を示している
    cryptobro-9000
    の著者様
  • コメントを拒否した Kubernetes(犬)
  • これまでに何もなかった状況でも SLA を遵守したセキュリティチーム

本インシデント報告書は法務部門によってレビューされ、フィッシュシェルのマルウェアではないこと、たまにはそのような雰囲気を感じるだけだとの明確化が求められました。

これは今四半期での 3 件目のインシデント報告書です。著者はステークホルダーに対し、セキュリティチームの人員増補請求は 2023 年第 1 四半期より backlog に存在することを再度お伝えしたいと思います。

同じ日のほかのニュース

一覧に戻る →

2026/05/11 2:19

ローカル AI が標準となる必要があります。

## Japanese Translation: 開発者は、安定的なアプリケーションと厳格なプライバシーを確保するため、脆弱であるクラウドホスト型モデルよりも、Apple 製の組み込みローカル AI ツール(`SystemLanguageModel` および `LanguageModelSession` など)を優先すべきです。外部サーバーへの依存は、課金問題やサービス停止時にサービスがクラッシュするという致命的な障害点を生じさせると同時に、機密ユーザーデータを保持リスクおよび潜在的な侵害に晒すことになります。対照的に、データ処理を安全にデバイス上で実行することにより、不必要なサーバー経由の迂回とベンダー依存を排除し、アプリケーションを強固なものに保てます。「Brutalist Report」という iOS クライアントは、典型的なクラウドソリューションに見られる複雑なアカウント要件を回避するため、ネイティブ API を使用して完全にローカルで記事のサマリーを生成する優れた例です。長いコンテンツの場合には、テキストをチャンク化(約 10k 文字)し、各チャンクごとに事実のみを含むノートを作成した後、それらをローカルで統合して最終的なサマリーを生成する推奨ワークフローがあります。このワークフローの将来形としては、`@Generable` および `@Guide` といった Swift の構造体を使用し、構造化された AI 出力を強制して非構造化データのようなデータをそのまま受け取るのではなく、UI が一貫したフィールドを確実にレンダリングできるようにする方向性が考えられます。この変化により、ユーザーは情報がデバイスから離れることがないと信頼できるようになります。企業にとって、ローカルモデルの導入は、AI をコストが高く予測不能な外部依存体から、サマリー化や分類を効率的に行い、ユーザー所有データを扱いながらレート制限や停止時間への心配なしに運用可能な信頼性の高い低コストサブシステムへと変革させます。開発者は、クラウドモデルを真に必要な場合のみ使用し、ローカル AI をノベルティなチャットボックスではなく、予測可能で信頼できる動作を持つ subsystem として扱うべきです。

2026/05/11 10:23

手書きコーディングに戻ろうとしています。

## Japanese Translation: k10s(NVIDIA クラスター運用者向けの GPU 意識型 Kubernetes ダッシュボード)の構築から得られた主な教訓は、AI は機能の迅速な提供に優れている一方で、システムアーキテクチャにおいては頻繁に失敗し、倒壊しやすいコードベースを導き込む点にある。Go と Bubble Tea フレームワークを用いた「vibe-coded」アプローチで 30 週間週末にわたり開発を進めたチームは、7 ヶ月間で 234 コミットを実現したにもかかわらず、深刻な構造的欠陥が蓄積しており、最終的にこの作業の約 70% が破棄された。これには `model.go` に収められたコード行を約 1,690 行も含まれている。プロジェクトは以下の 5 つの批判的アーキテクチャ上の失敗に直面した:AI がシステム不変則を無視し(結果として散在する `nil` 代入が発生)、キーハンドリングが地獄のように困難になる「神オブジェクト」と単一構造体設計に依存した、GPU に焦点を当てた範囲を超えた機能の蔓延を引き起こす「速度の幻想」におびやかされた、構造化データを不安全な位置指定式配列へと平坦化したこと、そして goroutine から直接の状態変異を許容しチャンネルを用いなかったことを通じて状態遷移を誤って扱った。将来の失敗を防ぐため、このプロジェクトはシステムを Rust で再実装中である。この移行により厳密な所有ルールが強制され、コーディング前にアーキテクチャ(インタフェース、メッセージ型など)を明示的に設計することが求められ、AI の支援が長期的な構造的完全性を損なうのではなく支えるように確保される。 ## Text to translate: **Improved Summary:** The primary lesson from building k10s—a GPU-aware Kubernetes dashboard for NVIDIA cluster operators—is that while AI excels at rapid feature delivery, it frequently fails at system architecture, leading to a codebase prone to collapse. Using a "vibe-coded" approach with Go and the Bubble Tea framework over 30 weekends, the team accumulated deep structural flaws despite making 234 commits in seven months; ultimately, ~70% of this work was discarded, including approximately 1,690 lines of code in `model.go`. The project faced five critical architectural failures: AI ignored system invariants (leading to scattered `nil` assignments), defaulted to a "god object" single-struct design making key handling a nightmare, succumbed to the "velocity illusion" causing feature creep beyond the GPU focus, flattened structured data into unsafe positional arrays, and mishandled state transitions by allowing direct mutations from goroutines instead of using channels. To prevent future failure, the project is rewriting the system in Rust. This transition enforces strict ownership rules and requires designing architecture (interfaces, message types) explicitly before coding, ensuring AI assistance supports rather than undermines long-term structural integrity.

2026/05/11 7:02

Obsidian プラグインが濫用され、遠隔アクセス型トロイの木馬(RAT)が展開されました。

## Japanese Translation: 主要な脅威は、Obsidian メモアプリケーションの正当なプラグイン同期機能を悪用して、Windows および macOS を標的とするリモートアクセストロイアンス(RAT)「PHANTOMPULSE」を配布する REF6598 キャンペーンです。攻撃者は、LinkedIn および Telegram を介して被害者を誘導し、コンプロマised コミュニティプラグインを含む悪意のあるクラウドホストされたバールの開封を促します。具体的には「Shell Commands」と「Hider」の 2 つのプラグインが該当します。ユーザーが手動でプラグイン同期を有効にすると、これらの脆弱なプラグインはローダーをトリガーし、最終的なペイロードをファイルベース検知を回避するために直接メモリ内に注入します(Windows では PowerShell スクリプト、macOS では AppleScript を使用)。その後、RAT は Ethereum ブロックチェーンを照会し、ハードコード化されたウォレットからのトランザクションデータに埋め込まれたコマンド&コントロールアドレスを収集します。 この compromise により、攻撃者はキーストロークを記録し、スクリーンショットを取得し、ファイルを横取りし、任意のコマンドを実行できます。その結果として生じる影響には、機密のある企業データの盗難、知的財産、取引戦略、および暗号通貨ウォレットキーの漏洩が含まれます。金融資産または暗号資産を管理する業界は特に脆弱です。これらのリスクを軽減するために、組織は信頼できないバールに対するプラグイン同期を無効にし、コミュニティプラグインについては公式マーケットプレイスからのものを厳しく審査するとともに、Obsidian によって起動された子プロセス(powershell.exe、cmd.exe、oscript など)を監視する必要があります。