مخزن کاربران آرچ تحت حمله قرار گرفته است

چند روزی هست که گزارش‌هایی از نفوذ به تعدادی از بسته‌های مخزن کاربری آرچ (AUR) منتشر شده. تیم پارچ این گزارش‌ها را از نزدیک پیگیری کرده و متأسفانه صحت آن‌ها تأیید شده است. هدف این نوشته دو چیز است. اول اینکه دقیقاً توضیح بدهیم چه اتفاقی افتاده و چرا، و دوم اینکه ابزار و مراحل لازم را در اختیارتان بگذاریم تا با خاطری آسوده سیستم خودتان را بررسی کنید.

نکته‌ای که از همان ابتدا باید روشن باشد این است که مخازن رسمی پارچ و آرچ کاملاً سالم هستند و هیچ ارتباطی به این ماجرا ندارند. اگر فقط از بسته‌های موجود در مخازن رسمی استفاده می‌کنید و هیچ AUR helper ای روی سیستمتان نصب نیست، این آلودگی به هیچ شکلی به شما ربط ندارد. این مشکل صرفاً به بسته‌هایی محدود می‌شود که از طریق AUR و با ابزارهایی مثل paru یا yay نصب و به‌روزرسانی شده‌اند.

AUR چیست و چرا این اتفاق در آن افتاد؟

برای کسانی که با ساختار آرچ کمتر آشنا هستند، توضیح کوتاهی لازم است. AUR یا مخزن کاربری آرچ، جایی است که هر کاربر می‌تواند بسته‌های خودش را به شکل اسکریپت PKGBUILD منتشر کند تا دیگران بتوانند آن را بسازند و نصب کنند. این مخزن هیچ‌وقت توسط تیم آرچ یا پارچ بازبینی نمی‌شود و اساساً همین باز بودن است که AUR را به یکی از غنی‌ترین منابع نرم‌افزار در دنیای لینوکس تبدیل کرده است.

اما همین باز بودن یعنی هر کسی، از جمله افراد با نیت مخرب، می‌تواند بسته منتشر کند یا حتی به حساب نگه‌دارنده یک بسته قدیمی و معتبر دسترسی پیدا کند و درون آن کد مخرب جای بدهد. این بار دقیقاً همین اتفاق افتاد. تعدادی از حساب‌های نگه‌دارندگان بسته در AUR یا به خطر افتادند یا توسط افراد مخرب ساخته شدند، و کامیت‌هایی به PKGBUILD یا فایل‌های وابسته این بسته‌ها اضافه شد که هیچ ربطی به کارکرد اصلی برنامه نداشت.

دقیقاً چه کدی اجرا می‌شد؟

بر اساس بررسی‌های انجام‌شده، کد تزریق‌شده در زمان ساخت بسته اجرا می‌شد و از طریق npm محتوایی را از اینترنت دریافت می‌کرد. این محتوا هیچ نقشی در عملکرد واقعی برنامه نداشت و صرفاً برای اجرای کد دلخواه روی سیستم قربانی طراحی شده بود. به زبان ساده، نصب یا به‌روزرسانی یکی از این بسته‌ها می‌توانست به یک اسکریپت ناشناس اجازه بدهد روی سیستم شما، با همان دسترسی‌ای که فرآیند نصب بسته دارد یعنی معمولاً root از طریق sudo، کد اجرا کند.

این یعنی پتانسیل دسترسی به فایل‌های شخصی، کلیدهای SSH، گذرواژه‌های ذخیره‌شده در مرورگر یا مدیر گذرواژه، توکن‌های احراز هویت سرویس‌های مختلف، و هر چیز دیگری که با دسترسی root یا کاربر روی سیستم در دسترس باشد، وجود داشته است. لازم به ذکر است که جزئیات دقیق رفتار بدافزار همچنان در حال بررسی توسط جامعه آرچ است، اما توصیه‌های امنیتی این نوشته بر اساس بدبینانه‌ترین و محتاطانه‌ترین فرض نوشته شده تا کاربران از هر جهت در امان باشند.

بازه زمانی

آغاز این آلودگی به حدود نهم ژوئن ۲۰۲۶ بازمی‌گردد. تیم رسمی آرچ لینوکس از یازدهم ژوئن ۲۰۲۶ به‌طور رسمی وارد ماجرا شده، حساب‌های مخرب را مسدود و کامیت‌های آلوده را از بسته‌های آسیب‌دیده حذف کرده است. این یعنی اگر در بازه نهم تا یازدهم ژوئن یکی از بسته‌های لیست‌شده را با paru، yay یا هر AUR helper دیگری نصب یا به‌روزرسانی کرده باشید، احتمال آلودگی سیستمتان وجود دارد. اگر بسته‌ای را پیش از نهم ژوئن نصب کرده و از آن تاریخ به بعد به‌روزرسانی نکرده‌اید، نسخه‌ای که روی سیستمتان است همچنان نسخه سالم است، اما همچنان توصیه می‌کنیم سیستم را بررسی کنید تا از این موضوع مطمئن شوید.

فهرست کامل بسته‌های شناخته‌شده آلوده توسط تیم آرچ در این سند نگه‌داری و به‌صورت مستمر به‌روزرسانی می‌شود. گزارش اولیه این ماجرا و پیگیری‌های بعدی هم در فهرست ایمیلی aur-general آرچ قابل مشاهده است. توصیه می‌کنیم اگر به جزئیات فنی بیشتر علاقه دارید، این بحث را دنبال کنید، چون فهرست بسته‌های آلوده همچنان در حال گسترش است.

بررسی سیستم

برای اینکه بدانید آیا یکی از بسته‌های آلوده روی سیستمتان نصب است یا نه، اسکریپت زیر فهرست رسمی و به‌روز را از سرور آرچ دریافت می‌کند و آن را با فهرست بسته‌های نصب‌شده از AUR روی سیستمتان مقایسه می‌کند. اجرای این اسکریپت نیاز به دسترسی root ندارد و هیچ تغییری در سیستم ایجاد نمی‌کند، صرفاً یک گزارش به شما می‌دهد.

#!/usr/bin/env bash

LIST_URL="https://md.archlinux.org/s/SxbqukK6IA"

echo "Fetching infected package list..."

raw=$(curl -fsSL "$LIST_URL") || { echo "ERROR: failed to fetch list"; exit 1; }

mapfile -t INFECTED_PKGS < <(
    echo "$raw" \
    | sed 's/<[^>]*>//g' \
    | grep -E '^[a-z0-9][a-z0-9_.+\-]*[a-z0-9]$' \
    | sort -u
)

count=${#INFECTED_PKGS[@]}
if [[ $count -eq 0 ]]; then
    echo "ERROR: parsed 0 packages, something went wrong"
    exit 1
fi

echo "Checking $count known infected packages..."

mapfile -t found < <(comm -12 <(pacman -Qmq | sort) <(printf "%s\n" "${INFECTED_PKGS[@]}" | sort))

if [[ ${#found[@]} -eq 0 ]]; then
    echo "Clean: no infected packages found."
else
    echo "WARNING: ${#found[@]} infected package(s) found:"
    for pkg in "${found[@]}"; do
        echo "  - $pkg"
    done
fi

اگر اسکریپت پیغام Clean را نشان داد، یعنی هیچ‌کدام از بسته‌های شناخته‌شده آلوده روی سیستم شما نصب نیستند و از این نظر می‌توانید خاطرتان آسوده باشد. با این حال، چون فهرست بسته‌های آلوده ممکن است در روزهای آینده گسترده‌تر شود، توصیه می‌کنیم این اسکریپت را چند روز آینده دوباره اجرا کنید تا از آخرین فهرست مطمئن شوید.

اگر پیغام WARNING ظاهر شد و یک یا چند بسته را به شما نشان داد، نگران نشوید. در ادامه دقیقاً توضیح می‌دهیم چه مراحلی باید طی شود.

راه ساده‌تر اجرای دستور زیر است:

git clone https://github.com/lenucksi/aur-malware-check
cd aur-malware-check && chmod +x aur_check-v2.sh
./aur_check-v2.sh --full

اگر بسته آلوده‌ای پیدا کردید

اول از همه و بدون فوت وقت، بسته‌های شناخته‌شده آلوده را حذف کنید. برای هر بسته‌ای که اسکریپت بالا نشان داد، دستور زیر را اجرا کنید:

پس از حذف بسته، باید بفهمید این بسته دقیقاً از چه زمانی روی سیستمتان بوده و چند بار به‌روزرسانی شده است. این اطلاعات از فایل لاگ pacman قابل استخراج است:

خروجی این دستور تاریخ نصب، هر به‌روزرسانی و در نهایت حذف بسته را با مهر زمانی دقیق نشان می‌دهد. اگر تاریخ نصب یا آخرین به‌روزرسانی بسته در بازه نهم تا یازدهم ژوئن بوده، باید فرض کنید که کد مخرب روی سیستمتان اجرا شده است و مراحل زیر را به‌طور کامل دنبال کنید.

نخست، تمام گذرواژه‌های مهم خود را تغییر دهید. این شامل گذرواژه ورود به سیستم، گذرواژه‌های ذخیره‌شده در مرورگر و مدیر گذرواژه، و همچنین گذرواژه حساب‌های ایمیل، گیت‌هاب، گیتیا یا هر سرویس دیگری می‌شود که از همان سیستم به آن وارد شده‌اید.

دوم، کلیدهای SSH خود را باطل کنید و جفت‌کلید جدیدی بسازید. کلیدهای عمومی قدیمی را از سرورها و سرویس‌هایی مثل گیت‌هاب یا گیتیا حذف کنید و کلید جدید را جایگزین کنید.

سوم، هر توکن احراز هویتی که روی سیستم ذخیره شده، از جمله توکن‌های API، توکن‌های سرویس‌های ابری، و نشست‌های فعال در مرورگر را باطل و دوباره صادر کنید.

در نهایت، اگر سیستم در بازه آلودگی فعال و به‌روز بوده، توصیه جدی ما این است که توزیع را از ابتدا نصب کنید. ممکن است این پیشنهاد در نگاه اول سخت‌گیرانه به نظر برسد، اما وقتی کدی با دسترسی root روی سیستم اجرا شده باشد، هیچ تضمینی وجود ندارد که تمام تغییرات احتمالی آن قابل ردیابی و بازگشت باشند. نصب مجدد سیستم تنها راهی است که آرامش خاطر کامل را به شما می‌دهد.

این ماجرا یادآور این نکته است که AUR، با تمام مزایایی که دارد، یک مخزن کاربرمحور و بدون بازبینی است. این موضوع به این معنا نیست که باید از AUR دوری کنید، چون هزاران بسته در آن سالم و سال‌هاست بدون مشکل استفاده می‌شوند. اما همیشه پیش از نصب یا به‌روزرسانی هر بسته‌ای از AUR، نگاهی به PKGBUILD آن بیندازید، به‌خصوص اگر بسته به‌تازگی نگه‌دارنده عوض کرده یا تغییرات غیرمعمولی در آن دیده می‌شود. اگر در خواندن PKGBUILD مهارت کافی ندارید، می‌توانید از ابزارهای هوش مصنوعی برای بررسی اولیه کمک بگیرید، اما این روش هم بی‌نقص نیست و جای دقت شخصی را نمی‌گیرد.

برای نکات بیشتر درباره نگه‌داری سیستم و استفاده ایمن از AUR، صفحه پارچ‌تان را نشکنید در ویکی پارچ را ببینید. تیم پارچ این موضوع را از نزدیک دنبال می‌کند و در صورت بروز هر تغییر مهم، این نوشته را به‌روزرسانی خواهیم کرد.

Sohrab Behdani
Sohrab Behdani
Articles: 18

Start the discussion at forum.parchlinux.com

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *