انتشار Go 1.27.3 و 1.26.10 با مسدود شدن هشت کلید CA در اعتبارسنجی گواهی
حدود ۴ دقیقه مطالعه
تیم Go نسخههای 1.27.3 و 1.26.10 را منتشر کرد. طبق صفحهی رسمی تاریخچهی انتشار، توضیح هر دو نسخه فقط «رفعهای امنیتی در بستهی crypto/x509» است. طبق گزارش The Hacker News و عنوان اطلاعیهی oss-security، این رفعها در عمل حذف هشت کلید میانی (intermediate) یک مرجع صدور گواهی (CA) از اعتبارسنجی گواهی در Go است.
چه چیزی تغییر کرد؟
طبق The Hacker News، verifier گواهی در Go حالا هر زنجیرهای را که از یکی از این هشت کلید عمومی میانی بگذرد رد میکند. تیم Go فقط هش SHA-256 کلیدها را در تغییر آورده و نام CA را ننوشته؛ دلیلش را «نگرانیهای امنیتی مشخص دربارهی نحوهی عملکرد آنها» گفته است. بر اساس تطبیقی که The Hacker News از یک کامنتگذار نقل میکند و خودش تأیید نکرده، این کلیدها متعلق به eMudhra (یک CA هندی) و زیر ریشههای emSign Root TLS CA - G3 و emSign Root CS CA - G3 هستند: شش کلید برای TLS (DV، OV و EV، هرکدام با G3B و G3C) و دو کلید برای امضای کد.
رفتار جدید:
- برنامهای که با نسخهی جدید ساخته شود، گواهی صادرشده از این کلیدها را با خطای زیر رد میکند.
- فیلتر روی خود verifier در Go و مسیرهای macOS و ویندوز که اعتبارسنجی را به سیستمعامل میدهند اعمال میشود.
- چون هش کلید عمومی بررسی میشود، نسخههای cross-signed همان کلیدها هم رد میشوند.
- تنظیمی برای خاموش کردن آن نیست و روی برنامههایی که ریشهی اعتماد سفارشی دارند هم اعمال میشود. یعنی استقرارهای خصوصی که عمداً به یکی از این کلیدها اعتماد میکنند هم خطا میگیرند. Go هنوز نگفته این رفتار عمدی است یا نه.
- برنامههای قبلی تا وقتی دوباره build نشوند همان رفتار قدیم را دارند.
x509: no valid chains built
چه کار کنیم؟
سرویسهای Go را با نسخهی اصلاحشدهی شاخهی خود دوباره build کنید و نسخهی فعلی را چک کنید:
go version
Go 1.27 → 1.27.3
Go 1.26 → 1.26.10
نسخههای Go 1.25 و قدیمیتر پشتیبانی نمیشوند و رفعی نمیگیرند. طبق The Hacker News راهحل موقتی هم وجود ندارد. سایتها و سرویسهایی که گواهیشان از این کلیدها میگذرد باید گواهی از یک intermediate دیگر بگیرند تا کلاینتهای Go ی دوباره buildشده بتوانند وصل شوند. توجه کنید که verifier در Go بررسی ابطال (revocation) ندارد و از لیستهای بلاک مرورگرها مثل CRLSets هم استفاده نمیکند.
نکتههای مبهم
دلیل این اقدام روشن نیست. نه Go و نه Mozilla دلیل را نگفتهاند، و The Hacker News هم هشها را با گواهیها تطبیق نداده است. طبق همان گزارش، Mozilla روز ۱۷ اکتبر شش intermediate از ریشهی emSign Root TLS CA - G3 را به فهرست بلاک OneCRL فایرفاکس اضافه کرده و باگ مربوطه برای عموم بسته است. eMudhra هم تا آن زمان بیانیهی عمومی نداده بود. تیم Go هم برخلاف انتشار ۸ اکتبر، پیشاعلان نداشت و نگفته کدام معیار «URGENT» (تهدید یکپارچگی اکوسیستم یا آسیبپذیری فعال) برقرار بوده. شبیه همین اقدام را در Node.js هم میبینیم: انتشارهای امنیتی ۲۱ اکتبر آن شاخهها هم CA certificate را بهخاطر مشکل eMudhra Intermediate CA بهروز کردهاند.
تاریخ انتشار هم در منابع فرق دارد: صفحهی رسمی تاریخچهی انتشار Go، ۱۹ اکتبر ۲۰۲۶ را مینویسد، ولی The Hacker News و oss-security روز ۲۰ اکتبر را ذکر میکنند.
منابع:
