یک آسیب پذیری در نسخههای 0.68 تا 0.80 نرم افزار PuTTY، کلاینت محبوب SSH و Telnet، میتواند به مهاجمان اجازه دهد تا کلیدهای کلاینت NIST P-521 را بازیابی کنند. اثر این آسیب پذیری، دسترسی به کلید خصوصی و سوء استفاده از آن است.
PuTTY یک شبیه ساز ترمینال منبع باز محبوب، کنسول سریال و برنامه انتقال فایل شبکه است که از پروتکلهای SSH (Secure Shell)، Telnet، SCP (Secure Copy Protocol) و SFTP (SSH File Transfer Protocol) پشتیبانی میکند.
مدیران و توسعه دهندگان سیستم عمدتاً از این نرم افزار برای دسترسی از راه دور و مدیریت سرورها و سایر دستگاه های شبکه توسط SSH از یک کلاینت مبتنی بر ویندوز استفاده میکنند.
این آسیب پذیری که با شناسه CVE-2024-31497 دنبال میشود توسط فابیان باومر و مارکوس برینکمن از دانشگاه روهر بوخوم کشف گردید و ناشی از این است که چگونه PuTTY میتواند nonceهای (نانس عبارت است از تعدادی عدد دلخواه که تنها یکبار برای امضای یک ارتباط استفاده میشود) ECDSA را برای NIST P-521 مورد استفاده در احراز هویت SSH ایجاد میکند.
به دلیل استفاده PuTYY از روشی قطعی برای تولید nonce به منظور جبران فقدان یک تولیدکننده اعداد تصادفی رمزنگاری قوی در نسخههای خاص ویندوز، یک چالش وجود دارد. مهاجمی که چندین پیام امضا شده و کلید عمومی را در اختیار دارد، اطلاعات کافی برای بازیابی کلید خصوصی را دارا میباشد و قادر است امضاهایی را جعل کند که گویی از سوی قربانی هستند و به آنها اجازه میدهد به هر سروری که قربانی از کلید برای لاگین به آن استفاده میکند، وارد شوند.
عواقب اصلی بازیابی کلید خصوصی این است که اجازه دسترسی غیرمجاز به سرورهای SSH یا امضاها را فراهم میآورد.
با این حال، برای به دست آوردن امضاها، مهاجم میبایست ابتدا به سروری که از کلید برای احراز هویت استفاده میکند، نفوذ نماید.
بهره برداری از CVE-2024-31497
امضای دیجیتال با استفاده از کلید خصوصی کاربر ایجاد میشود و توسط کلید عمومی مربوطه در سرور تأیید میگردد و از هویت کاربر و امنیت ارتباطات اطمینان مییابد. ۹ بیت اول هر نانس ECDSA، صفر است که این خود، امکان بازیابی کامل کلید مخفی را در تقریباً 60 امضا با استفاده از تکنیکهای پیشرفته فراهم میآورد.
برینکمن در X توضیح داد که مهاجمان برای محاسبه کلید خصوصی یک هدف، به 58 امضا (signature) نیاز دارند که میتوانند آنها را از قسمت لاگین به سرور SSH در سیستم تحت نفوذ جمعآوری کنند و یا از طریق Git امضا شده به دست آورند.
یکی از این موارد، استفاده از کلیدهای SSH، برای امضای commitهای Git است. یک راهاندازی رایج شامل استفاده از Pageant، ssh-agent PuTTY، به صورت لوکال و ارسال agent به میزبان میباشد که در اینجا، Git را برای استفاده از OpenSSH به منظور امضای Git commit با کلید SSH ارائه شده توسط Pageant پیکربندی میکند و سپس امضا توسط Pageant تولید میشود که آن را مستعد بازیابی کلید خصوصی میکند.
این امر به شدت نگران کننده است چرا که امضاهای git ممکن است به طور عمومی در دسترس باشند، برای مثال، اگر commit به یک مخزن عمومی در GitHub منتقل شود.
سایر نرم افزارهای آسیب پذیر
این آسیب پذیری علاوه بر PuTTY، سایر محصولاتی را که دارای نسخه آسیب پذیر نرم افزار هستند نیز تحت تاثیر قرار داده است:
FileZilla – نسخه های 3.24.1 – 3.66.5 (آسیب پذیری در نسخه 3.67.0 برطرف شده است)
WinSCP – نسخه های 5.9.5 – 6.3.2 (آسیب پذیری در نسخه 6.3.3 برطرف شده است)
TortoiseGit – نسخه های 2.4.0.2 – 2.15.0 (آسیب پذیری در نسخه 2.15.0.1 برطرف شده است)
TortoiseSVN- نسخه های 1.10.0 – 1.14.6 (رفع آسیب پذیری با پیکربندی TortoiseSVN برای استفاده از Plink از آخرین نسخه PuTTY 0.81 امکان پذیر است)
این آسیبپذیری در PuTTY نسخه v0.81 با جابجایی به تکنیک RFC 6979 برای تولید نانس DSA برطرف شده است. به گفته فابیان بومر، تمام کلیدهای کلاینت NIST P-521 که با PuTTY استفاده میشوند بایستی در معرض خطر تلقی شده و باید باطل گردند.
توسعه دهندگان PuTTY توصیه کردند؛ کلید عمومی قدیمی را از همه فایلهای OpenSSH authorized_keys و معادل آن در سایر سرورهای SSH حذف کنید، به طوری که یک امضا از کلید در معرض خطر و هک شده، فاقد ارزش باشد و سپس یک جفت کلید جدید برای جایگزینی آن ایجاد کنید.
بسته به اینکه از کدام نسخه PuTTY استفاده میشود، احتمالاً ابزارهای نرم افزاری بیشتری تحت تأثیر CVE-2024-31497 قرار دارند. از این رو، به کاربران توصیه میشود ابزارهای خود را بررسی کرده و در صورت نیاز اقدامات پیشگیرانه را دنبال کنند.