OpenSSH 10.5 باگ قفل ssh-agent رو بست
خلاصهٔ کاملتر
تو گزارش Help Net Security اومده که انتظار طبیعی از قفل کردن ssh-agent اینه که تا باز نشده هیچ امضایی انجام نده. اما تو OpenSSH 10.4 قفل کردن یه عارضهٔ جانبی داشت: بررسیای که مشخص میکنه درخواست از خود دستگاه تو اومده یا از یه اتصال فورواردشده از سرور ریموت، خاموش میشد. رفعش امروز با انتشار OpenSSH 10.5 رسید.
منطق ماجرا اینه که ایجنت کلیدهای خصوصی رمزگشاییشده رو نگه میداره تا هر چند دقیقه پسفریز نزنی، و agent forwarding به یه برنامه روی هاست ریموت اجازه میده از همون کلیدها برای ورود استفاده کنه. برای جدا نگه داشتن این دو حالت، ssh یه درخواست session-bind@openssh.com میفرسته که ایجنت فورواردشده رو معرفی میکنه.
مشکل اینجا بود که ایجنت قفلشده همین درخواستها رو رد میکرد، و درخواستی که هیچوقت bind نشه از دید ایجنت محلی به نظر میرسه. برای همین کارهایی که فقط باید محلی باشن — از جمله افزودن توکنهای PKCS#11 و استفاده از کلیدهایی که محدودیت مقصد دارن (یعنی فقط برای رسیدن به یه هاست مشخص مجازن) — از راه دور هم قابل انجام بود. کسی که قبل از بلند شدن از پشت لپتاپ ایجنت رو قفل میکرد، عملاً سیستمشو بازتر میکرد، نه بستهتر.
دو رفع امنیتی دیگه هم تو همین نسخه اومده: یه use-after-free احتمالی حوالی یه realloc تو کلاینت ssh که وقتی از طریق سوکت مالتیپلکسینگ نشست محلی یه remote forwarding اضافه میشه و همزمان یه درخواست باز کردن remote forwarding هنوز پیش سرور معلقه، قابل رسیدنه. و یه پژوهشگر پیدا کرده بود که کلیدواژهٔ restrict تو authorized_keys — همون گزینهٔ همهکاره که قراره تمام قابلیتهای forwarding رو خاموش کنه — روی tunnel forwarding اعمال نمیشد. تونلها بهصورت پیشفرض غیرفعالن، پس این یکی فقط جایی گاز میگیره که ادمین خودش روشنشون کرده باشه.
بخش جالب دیگهٔ خبر تغییر ریتم انتشاره. به گفتهٔ تیم، اخیراً حجم زیادی گزارش باگ امنیتی رسیده که «خیلیهاش یافتهٔ مدلهای هوش مصنوعی یا با کمک اونهاست» و بخش زیادیشون با یه مدل تهدید واقعبینانه اثر امنیتی ندارن. چیزی که برنامهٔ انتشار رو عوض کرد، چند موردی بود که باگِ اولبار گزارششده بعداً مستقلاً توسط پژوهشگر دیگهای هم پیدا شد؛ یعنی مهاجمی که چیزی گزارش نمیکنه هم میتونه به همونها برسه. برای همین فعلاً بهجای جمع کردن رفعها تا نسخهٔ بعدی، زودتر منتشرشون میکنن.
از بقیهٔ تغییرات: sshd حالا نوع کلید عمومی رو قبل از پارس کردن کلیدِ ارسالی طرف مقابل با الگوریتمهای مجاز مقایسه میکنه تا بخشی از کد پارس و تأیید از دسترس کلاینت احرازهویتنشده خارج بشه. ssh -Z user@host کلیدهایی رو که کلاینت برای احراز هویت کلید عمومی امتحان میکنه به ترتیب چاپ میکنه، ssh کلیدهای FIDO بدون نیاز به لمس رو ترجیح میده و کلیدهای نیازمند PIN یا بیومتریک رو آخر میذاره، و نسخهٔ Portable حالا از libcrypto پشتیبانی ECC شامل منحنی NISTP521 میخواد.
نکات کلیدی:
- تو OpenSSH 10.4 قفل کردن ssh-agent تشخیص محلی/فورواردشده بودن درخواست رو خاموش میکرد
- نتیجه: افزودن توکن PKCS#11 و استفاده از کلیدهای دارای محدودیت مقصد از راه دور ممکن میشد
- OpenSSH 10.5 این باگ، یه use-after-free تو کلاینت و بیاثر بودن restrict روی tunnel forwarding رو رفع کرده
- تیم فعلاً رفعهای امنیتی رو زودتر و خارج از چرخهٔ عادی منتشر میکنه
- ssh -Z کلیدهای امتحانشونده رو نشون میده و کلیدهای FIDO بدون لمس اولویت گرفتن




