نسخه‌های مخرب سه کرِیت پرکاربرد از crates.io حذف شدند. انتشارها از حساب نگهدارندهٔ به‌خطر افتاده یک وابستگی typo-squat اضافه می‌کردند و اسکریپت ساخت حاوی کدی بود که در زمان کامپایل، بارگذاری مخربی را از راه دور دانلود و اجرا می‌کرد.

کرِیت‌های آلوده و مدت زمان در دسترس بودن

  • arrayref 0.3.10 — منتشرشده در 2026-08-20T07:15:00Z، حذف‌شده در 08:41:40Z (فعال به مدت 86 دقیقه)
  • internment 0.8.7 — منتشرشده در 07:34:07Z، حذف‌شده در 09:04:11Z (فعال به مدت 90 دقیقه)
  • append-only-vec 0.1.9 — منتشرشده در 07:37:49Z، حذف‌شده در 09:25:24Z (فعال به مدت 107 دقیقه)

نحوهٔ عملکرد بدافزار

تمامی انتشارهای مخرب یک تغییر مشترک داشتند: افزودن وابستگی به proc-macro1، که typo-squatِ crate رایج proc-macro2 بود. کد منبع proc-macro1 عملاً نسخه‌ای شبیه به proc-macro2 ارائه می‌داد تا فرایند ساخت ظاهراً عادی ادامه یابد، اما اسکریپت ساخت این وابستگی در زمان کامپایل، آدرس سرور فرماندهی‌ـ‌کنترل (C2) را از قطعات base64 بازسازی می‌کرد و سپس بارگذاری مخرب را دانلود و اجرا می‌نمود.

رفتارهای مشاهده‌شده

  • نصب یک تأییدکنندهٔ گواهی‌نامهٔ سفارشی که اعتبارسنجی TLS را عملاً غیرفعال می‌کرد.
  • انتخاب یکی از چهار payload بر اساس سیستم‌عامل و معماری پردازنده.
  • در Unix و macOS نوشتن فایل در /tmp/rust-setup، علامت‌گذاری به‌عنوان اجرایی و اجرا به‌صورت جداشده با ارسال آدرس C2 به‌عنوان آرگومان.
  • در Windows نوشتن اسکریپت PowerShell در %TEMP% و اجرای آن به‌صورت مخفی از طریق VBScript و wscript.exe، همراه با ایجاد فرایند فرزند تا فرآیند Cargo منتظر نماند.

روش انتشار حمله

بررسی‌های منتشرشده در هشدار RustSec (RUSTSEC-2026-0260) نشان می‌دهد نسخه‌های مخرب توسط همان حساب مالک منتشر شده‌اند. مالک در همان بازه نسخه‌های پیشین arrayref (۰.۳.۵ تا ۰.۳.۹) را yank کرد؛ این کار باعث شد نسخهٔ مخرب تنها نسخهٔ در دسترس باشد که Cargo هشدار «consider updating to a version that is not yanked» را نشان نمی‌دهد و مسیر سوءاستفاده هموار شود.

کشف و واکنش

تیم پاسخ امنیتی Rust در 07:15 UTC در 2026-08-20 گزارش اولیهٔ مخرب بودن proc-macro1 را دریافت و تأیید کرد که این crate اسکریپت ساختی دارد که بارگذاری مخربی را دانلود می‌کند. کشف اولیه توسط تیم تحقیقاتی Nextron Systems GmbH گزارش شد. تیم امنیت Rust نسخه‌های مخرب را سریعاً حذف کرد و احتمالش بیشتر دانست که حساب نگهدارنده به‌خطر افتاده باشد تا این‌که مالک با نیت مخرب عمل کرده باشد.

آمار دانلود و دامنهٔ تأثیر

بررسی APIِ crates.io نشان می‌دهد کرِیت arrayref مجموعاً 245,385,500 دانلود داشته و در ۹۰ روز منتهی به ۲۰ اوت، 53,905,601 دانلود ثبت شده است. همچنین 403 کرِیت متمایز روی crates.io به arrayref وابسته‌اند که دامنهٔ بالقوهٔ تأثیر را گسترده می‌کند.

مثال مسیر وابستگی

نمونه‌ای از زنجیرهٔ وابستگی که گزارش شده بود: winit → sctk-adwaita ^0.10.1 → tiny-skia ^0.11 → arrayref ^0.3.6. در این مسیر تمام محدوده‌ها از نوع caret روی 0.3.x بودند و می‌توانستند به‌راحتی نسخهٔ 0.3.10 را پذیرا شوند.

توصیه‌های فوری برای توسعه‌دهندگان

  • پوشهٔ cache محلی Cargo را بررسی کنید: ~/.cargo/registry/cache برای شناسایی فایل‌های کرِیت حذف‌شده یا مشکوک.
  • نسخهٔ arrayref را به 0.3.9 یا نسخه‌های قدیمی‌تر موقعیت‌بندی (pin) کنید تا از دریافت 0.3.10 جلوگیری شود.
  • فایل‌های قفل پروژه (مثل Cargo.lock) را بررسی و در صورت تردید، بازسازی یا از نسخه‌های vendor شده استفاده کنید.
  • ابزارهایی مانند cargo-audit را اجرا کنید تا وابستگی‌های آسیب‌پذیر، yank شده یا مشکوک شناسایی شوند.
  • از انتشار با حساب‌های غیرمحافظت‌شده خودداری کنید: احراز هویت چندعاملی را فعال، مدیریت کلیدها و credentialها را ایمن و فرایند انتشار را به‌دقت کنترل کنید.
  • به اشتباهات تایپی (typo-squat) در نام بسته‌ها حساس باشید و هنگام اضافه کردن وابستگی نام‌ها را دقیق بررسی کنید.

وضعیت فعلی و نتیجه‌گیری

تا زمان گزارش RustSec هیچ شواهدی از سوءاستفادهٔ موفق از نسخه‌های مخرب ثبت نشده است. شناسهٔ CVE برای این حادثه صادر نشده و هنوز پَچی برای کرِیت‌ها ارائه نشده است. مالک فهرست‌شدهٔ arrayref کاربر شمارهٔ 2402، David Roundy، است؛ جزئیات فنی دربارهٔ نحوهٔ به‌خطر افتادن حساب او علناً منتشر نشده و تحقیقات ادامه دارد.

این حادثه نشان می‌دهد حتی تغییر کوچک در مانیفست یا افزودن یک وابستگی مشابهِ اشتباه (typo-squat) می‌تواند زنجیرهٔ وابستگی‌های گسترده را در معرض خطر قرار دهد. برای جزئیات فنی و پیگیری وضعیت مرجع‌ها، اطلاعیهٔ رسمی RustSec را در rustsec.org و وضعیت بسته‌ها را در crates.io دنبال کنید.