حمله eMudhra و macOS: وقتی git و curl هنوز گواهی لو رفته رو باور میکنن
نویسنده: آرش لطیفی
راهنمای فنی بررسی آسیبپذیری git/curl/python در برابر گواهیهای لو رفته eMudhra، تست عملی با curl و git ls-remote، و رفع دستی trust store در macOS.
TL;DR — کلید ۸ گواهی میانجی eMudhra از آوریل ۲۰۲۵ قابل بازسازی بود، ولی تا ۲۸ اکتبر ابزارهای توسعه macOS (شامل
git،curlوpython3) هنوز بهشون اعتماد میکردند و macOS 27.2 هم فیکس دستی کاربران رو برگردوند. این پست نحوه تست و رفع دستی رو پوشش میده.
ماجرا در یک پاراگراف
شرکت CA به نام eMudhra کلید خصوصی ۸ گواهی میانجی (intermediate) رو بهخاطر تولید اشتباه از دست داد — کلیدها از روی خود گواهی قابل بازسازی بودند و این از آوریل ۲۰۲۵ ممکن بود. گزارشگر در ۱۷ اکتبر ۲۰۲۶ با امضای دیجیتال با همین کلیدها اثباتش کرد. مرورگرها و برنامه root سریع واکنش دادند: Firefox/Chrome از ۱۷ اکتبر، مایکروسافت از ۲۰ اکتبر، و اپل (برای Safari و اپهای بر پایه فریمورک شبکه خودش) از ۲۲ اکتبر گواهیها رو بلاک کردند.
مشکل کجاست؟ در کلاینتهایی که سیستم توزیع revocation مثل OneCRL یا CRLSets مصرف نمیکنند و به آپدیت نرمافزاری تکیه میکنند. طبق بررسی Dennis Jackson در ۲۸ اکتبر، ابزارهایی که اپل با macOS میفرسته — یعنی git، curl، python3 — هنوز به گواهیهای لو رفته اعتماد میکردند، چون اپل bundle خودش (/etc/ssl/cert.pem) رو پاک نکرده بود. بدتر: macOS 27.2 که ۲۶ اکتبر منتشر شد نهفقط فیکس نداشت، بلکه workaround دستی کاربران رو هم خنثی کرد.
چرا این برای دولوپر جدیه
حمله دقیقاً روی گردش کار روزمره شماست:
git cloneوgit pushروی ریموتهایhttps://— کد آلوده وارد مخزن محلی میشه، push ها دستکاری میشن، و توکنهای GitHub شما در مسیر شبکه قابل سرقته.curlوpip installو هر کلاینت HTTP خط فرمانی که bundle خودش رو داره (یادتون باشهpipbundle مخصوص خودش رو ازcertifiمیگیره، نه از/etc/ssl/cert.pem— پس هرکدوم باید جدا چک بشن).- اپهای Electron (مثل Slack و Discord) فقط با آپدیت به نسخه ساختهشده روی Electron پچشده امن میشن — طبق جدول سایت incident، Electron 42.11.16 / 43.8.1 / 44.9.1 فیکس دارن، و برنامههایی مثل Claude Code (2.1.303)، VS Code (1.143.1)، Docker Desktop (4.96.2)، Node.js و Python هم نسخههای پچشده منتشر کردن.
نکته ظریفتر: گواهیهای مهاجم در لاگهای Certificate Transparency ثبت نشده بودن، پس کلاینتهایی که CT رو اجباری میکنند (مثل مرورگرها) حتی با trust store آلوده هم قابل حملهی بیسر و صدا نبودند — ولی curl و اکثر کلاینتهای غیرمرورگری CT رو چک نمیکنند.
تست کن: git شما آسیبپذیره؟
پژوهشگرها دو دامنه تستی گذاشتن که با گواهیهای لو رفته امضا شدن. این دستور رو بزنید:
- خطای certificate =
gitشما امنه ✅ - لیست commit دیدید =
gitشما آسیبپذیره ❌
برای curl (هر دو چک کنید؛ -noct ها کلاینت بدون CT رو هم میسنجه):
اگه خطای گواهی دیدید، امنه. اگه صفحه برگشت، bundle اون ابزار هنوز گواهیهای لو رفته رو trust میکنه.
حمله کامل رو هم میشه شبیهسازی کرد — کلون یه ریپو از سرور جعلکننده GitHub:
نسخه پچشده با خطای گواهی رد میکنه؛ نسخه آسیبپذیر clone میکنه و README با کلمه INTERCEPTED میبینه. (مهاجم واقعی به curloptResolve نیاز نداره — خودش ترافیک رو redirect میکنه.)
رفع دستی در macOS
اپل راهنمای رسمی داره ولی کلیاتش اینه: گواهیهای ریشه/میانجی آلوده رو از /etc/ssl/cert.pem حذف کنید. دو تا نکته مهم:
- آپدیتهای macOS ممکنه فیکس شما رو برگردونن — دقیقاً اتفاقی که با 27.2 افتاد. بعد از هر آپدیت، دوباره تست بالا رو اجرا کنید.
- CI رو فراموش نکنید — اگه macOS runner دارید (مثلاً برای بیلد اپ iOS)، اون سیستمها هم باید چک و فیکس بشن؛ این یه ریسک supply chain واقعیه.
جدول نسخههای پچشده (گزیده)
| ابزار / رانتایم | نسخه پچشده | | --- | --- | | Electron | 42.11.16 / 43.8.1 / 44.9.1 | | Node.js | 26.12.1 / 24.22.1 / 22.23.4 | | Python | 3.15.2 / 3.14.10 / 3.13.18 / 3.12.16 / 3.11.18 | | Go | 1.27.3 / 1.26.10 | | Docker Engine / CLI | 29.9.2 | | VS Code | 1.143.1 | | Git for Windows | 2.56.0.3 | | Java (OpenJDK) | هنوز در انتظار پچ |
لیست کامل برای توزیعهای لینوکسی و کتابخانهها در جدول اصلی incident هست.
چکلیست عمل
- [x] تست
git ls-remoteوcurlبا دامنههای تستی بالا رو اجرا کردید. - [ ] trust store سیستم عامل و ابزارهای خط فرمانی رو آپدیت کردید (
brew update && brew upgrade ca-certificatesروی mac هم کمکه). - [ ] اگه مجبورید دستی فیکس کنید، یادداشت گذاشتید که بعد از هر آپدیت macOS دوباره چک کنید.
- [ ] macOS runner های CI رو هم پچ و تست کردید.
- [ ] نسخههای Electron / Node / Python که اپتون روشه رو با جدول بالا مقایسه کردید.
- [ ] تا انتشار فیکس رسمی اپل، عملیات حساس (
git push، دیپلوی) رو روی شبکه مطمئن انجام میدید.
سوالات پرتکرار
Q: روی لینوکس سرورم هم مشکل دارم؟
اکثر توزیعها (Debian، Ubuntu، RHEL، Arch و…) پکیج ca-certificates پچشده رو منتشر کردن — apt upgrade یا معادلش کافیه. ولی ابزارهایی که bundle مستقل دارن (مثل بعضی باینریهای Go یا اپهای Electron) جداگانه باید آپدیت بشن.
Q: Python من از certifi استفاده میکنه، همون کافیه؟
pip و requests بهصورت پیشفرض از certifi میخونن نه /etc/ssl/cert.pem — پس certifi نسخه 2026.10.19 یا بالاتر لازمه. ولی ابزارهایی که به openssl سیستمی وصلن (مثل بعضی بیلدهای curl) مسیر دیگه میرن. برای هر ابزار حساس، تست مستقیم با دامنههای بالا مطمئنترین راهه.
Q: گوگل کروم و فایرفاکس هم آسیبپذیر بودن؟
خیر — از ۱۷ اکتبر بلاک کردن و چون Certificate Transparency رو اجباری میکنند، حتی قبل از بلاک هم حملهی بیسر و صدا علیهشون عملاً ممکن نبود چون گواهیهای مهاجم در لاگهای CT ثبت نشده بود.