با انتشار کد اثبات مفهوم (PoC) برای آسیبپذیری libssh2 با شناسه CVE-2026-55200، توجه جامعه امنیت سایبری به این ضعف بحرانی بیش از پیش جلب شده است. این آسیبپذیری libssh2 به یک سرور SSH مخرب یا آلوده اجازه میدهد بدون نیاز به احراز هویت یا هرگونه تعامل کاربر، از طریق ایجاد خرابی حافظه (Memory Corruption) در سمت کلاینت، زمینه را برای اجرای کد از راه دور (RCE) فراهم کند. این ضعف امنیتی تمامی نسخههای libssh2 تا نسخه 1.11.1 را تحت تأثیر قرار میدهد و امتیاز 9.2 از CVSS v4.0 را دریافت کرده است.
نکته قابل توجه این است که libssh2 بهعنوان یک کتابخانه سمت کلاینت برای پروتکل SSH طراحی شده است و در سمت سرور مورد استفاده قرار نمیگیرد. این کتابخانه در نرمافزارهایی مانند curl، Git، PHP، ابزارهای پشتیبانگیری، سامانههای بهروزرسانی فریمور و طیف گستردهای از تجهیزات و محصولات نرمافزاری استفاده میشود. بنابراین، هر نرمافزاری که به این کتابخانه متکی باشد و با Endpointهای SSH غیرقابل اعتماد ارتباط برقرار کند، میتواند در معرض ریسک قرار گیرد. علاوه بر این، در بسیاری از محصولات، libssh2 بهصورت لینک ایستا (Statically Linked) در نرمافزار تعبیه شده است؛ به همین دلیل، بهروزرسانی سیستمعامل یا بستههای توزیع لینوکس الزاماً باعث رفع این آسیبپذیری نمیشود.
مکانیزم فنی و نحوه عملکرد آسیبپذیری libssh2
این آسیبپذیری در تابع ssh2_transport_read() از فایل transport.c قرار دارد؛ تابعی که وظیفه پردازش بستههای ورودی SSH در مرحله برقراری ارتباط اولیه (Handshake) را بر عهده دارد. این تابع، فیلد طول بسته (packet_length) را که مقدار آن توسط مهاجم قابل کنترل است، از بسته دریافتی میخواند، اما تنها مقادیر کمتر از 1 را نامعتبر تشخیص میدهد و هیچ محدودیتی برای حداکثر مقدار مجاز آن اعمال نمیکند.
در ادامه، مقدار طول بسته با چند مقدار دیگر و با استفاده از محاسبات 32 بیتی (32-bit Arithmetic) جمع میشود. اگر مهاجم مقدار 0xffffffff را برای این فیلد ارسال کند، سرریز عدد صحیح (Integer Overflow) رخ میدهد و نتیجه محاسبه بهدلیل سرریز، به یک مقدار بسیار کوچک تبدیل میشود. در نتیجه، libssh2 بافری متناسب با همین مقدار کوچک تخصیص میدهد، اما در مرحله بعد، کد تلاش میکند کل بسته بزرگ و دستکاریشده SSH را در همان بافر بنویسد.
این عملکرد در نهایت منجر به نوشتن خارج از محدوده حافظهHeap (Out-of-Bounds Heap Write) میشود؛ ضعفی که در دسته CWE-680 (Integer Overflow to Buffer Overflow) طبقهبندی شده و یکی از رایجترین الگوهای سوءاستفاده برای دستیابی به اجرای کد از راه دور (RCE) به شمار میرود. بهمنظور رفع این ضعف، توسعهدهندگان یک بررسی اعتبارسنجی (Validation Check) به کد افزودهاند تا پیش از انجام هرگونه محاسبه، مقادیر طول بسته بزرگتر از LIBSSH2_PACKET_MAXPAYLOAD پذیرفته نشوند.
آسیبپذیری libssh2 نخستین نمونه از این نوع ضعف امنیتی در این پروژه نیست. در سال 2019، نسخه 1.8.1 برای رفع 9 آسیبپذیری امنیتی منتشر شد که مهمترین آن CVE-2019-3855 بود؛ ضعفی با ماهیتی بسیار مشابه که آن نیز بر اثر سرریز عدد صحیح در فرآیند پردازش بستههای انتقال ایجاد شده بود و به یک سرور SSH مخرب اجازه میداد روی کلاینت متصل، کد دلخواه را اجرا کند. اکنون، با گذشت حدود هفت سال، همان کلاس از آسیبپذیری بار دیگر در همان بخش از کد مشاهده شده است.
این ضعف توسط یک پژوهشگر امنیتی با نام Tristan Madani گزارش شد. توسعهدهندگان پروژه نیز در 12 ژوئن، پچ مربوطه را از طریق درخواست Pull (Pull Request) شماره 2052 در شاخه اصلی پروژه اعمال کردند و شناسه CVE-2026-55200 در 17 ژوئن توسط VulnCheck بهصورت عمومی منتشر شد.
وضعیت اکسپلویت و بررسی مخزن Exploitarium
نمونه اثبات مفهوم (PoC) این ضعف امنیتی در مخزن گیتهاب با نام exploitarium منتشر شده است؛ آرشیوی از کدهای اکسپلویت که به گفته نویسنده آن، برخی از نمونههای موجود بدون گزارش قبلی به توسعهدهندگان در دسترس عموم قرار گرفتهاند. این مخزن شامل کد اولیهای برای فعالسازی آسیبپذیری از طریق SSH و همچنین یک محیط آزمایشی کنترلشده برای اجرای لوکال کد (Local RCE Harness) است، اما یک اکسپلویت آماده برای اجرای حملات از راه دور محسوب نمیشود.
در عمل، تبدیل این PoC به یک اکسپلویت قابل اتکا برای اجرای کد از راه دور روی یک نرمافزار واقعی، به عوامل متعددی از جمله نوع باینری هدف، نحوه عملکرد مدیر تخصیص حافظه (Memory Allocator)، مکانیزمهای دفاعی، راهکارهای کاهش ریسک (Mitigations) و همچنین نحوه پیادهسازی libssh2 در نرمافزار هدف بستگی دارد. به همین دلیل، آسیبپذیری libssh2 هرچند از نظر فنی بسیار مهم است، اما انتشار این PoC بهتنهایی به معنای در دسترس بودن یک اکسپلویت عملیاتی و قابل اتکا نیست.
همچنین نویسنده مخزن اذعان کرده است که این آرشیو بهصورت کامل منتشر نشده، برخی از نمونههای موجود کیفیت مطلوبی ندارند و بخش قابل توجهی از فرآیند فازینگ (Fuzzing) با کمک هوش مصنوعی انجام شده است. علاوه بر این، تا زمان انتشار این گزارش، سازمان CISA وضعیت این CVE را بدون شواهد سوءاستفاده (None) اعلام کرده است. همچنین تاکنون هیچ گزارشی مبنی بر سوءاستفاده از این آسیبپذیری در حملات واقعی (In the Wild) منتشر نشده است.
اقدامات ضروری برای مقابله با آسیبپذیری libssh2
در حال حاضر، هنوز نسخه رسمی و پایدار حاوی اصلاحیه آسیبپذیری libssh2 منتشر نشده است. اگرچه پچ مربوطه در شاخه اصلی کد منبع (Mainline Source) پروژه ادغام شده، اما نسخه رسمی جدید همچنان در حال آمادهسازی است. به همین دلیل، برخی توزیعهای لینوکس و پروژههای وابسته، این اصلاحیه را بهصورت بکپورت (Backport) در نسخههای خود اعمال کردهاند. برای نمونه، توزیع دبیان (Debian) نسخهای پچشده را در شاخه آزمایشی منتشر کرده است.
همچنین، سازمان NHS England Digital با انتشار یک اطلاعیه امنیتی (Security Advisory) از سازمانهای آسیبپذیر خواسته است هرچه سریعتر نسبت به بهروزرسانی سامانههای خود اقدام کنند.
کارشناسان امنیت برای کاهش ریسک این آسیبپذیری، انجام اقدامات زیر را توصیه میکنند:
- تمامی نرمافزارها و تجهیزاتی را که از libssh2 استفاده میکنند، شناسایی کنید؛ بهویژه نسخههایی که بهصورت لینک ایستا یا نسخه تعبیهشده در نرمافزار قرار دارند، زیرا این موارد معمولاً توسط مدیر بسته شناسایی نمیشوند. نرمافزارهایی مانند curl، Git و PHP از رایجترین موارد استفاده از این کتابخانه هستند.
- سازمانها باید نسخهای را نصب کنند که اصلاحیه مربوط به کامیت 97acf3d را دریافت کرده باشد؛ چه این اصلاحیه از طریق بکپورت توسط توزیع لینوکس ارائه شده باشد و چه در قالب نسخهای که بر پایه کد منبع اصلاحشده منتشر شده است. همچنین، برای اطلاع از زمان انتشار نسخه رسمی، اطلاعیههای امنیتی ارائهدهندگان نرمافزار را بهطور منظم دنبال کنید.
- تا زمان انتشار نسخه پچشده، ارتباطات خروجی SSH را تنها به سرورهای مورد اعتماد محدود کرده و کلیدهای میزبان (Host Keys) را با دقت اعتبارسنجی کنید. همچنین، کلاینتهایی را که به سرورهای SSH خارج از سازمان متصل میشوند یا از نامهای میزبانی استفاده میکنند که احتمال تغییر مسیر (Redirection) آنها توسط مهاجم وجود دارد، در اولویت بررسی و ایمنسازی قرار دهید. رخدادهایی مانند دریافت بستههای SSH با اندازه غیرعادی یا ازکارافتادن غیرمنتظره کلاینت نیز باید بهعنوان نشانههای احتمالی سوءاستفاده بررسی شوند.
علاوه بر این، توصیه میشود دو آسیبپذیری دیگر libssh2 نیز همزمان برطرف شوند. نخست، آسیبپذیری CVE-2026-55199 با امتیاز CVSS 8.2 که با سوءاستفاده از تعداد جعلی افزونهها، کلاینت در حال اتصال را وارد یک لوپ پردازشی (CPU Loop) کرده و در نهایت باعث حمله انکار سرویس (DoS) میشود. دوم، آسیبپذیری CVE-2025-15661 با امتیاز CVSS 8.3 که موجب خواندن خارج از محدوده حافظه Heap در بخش SFTP میشود.
در نهایت، آسیبپذیری libssh2 یک ضعف خرابی حافظه پیش از احراز هویت (Pre-Authentication Memory Corruption) است و در کتابخانهای وجود دارد که در طیف گستردهای از کلاینتها، ابزارها و تجهیزات نرمافزاری مورد استفاده قرار میگیرد. اگرچه تاکنون هیچ اکسپلویت قابل اتکایی برای حملات از راه دور منتشر نشده است، اما همچنان دو پرسش مهم مطرح است:
مهاجمان با چه سرعتی میتوانند این نمونه آزمایشی لوکال را به یک اکسپلویت قابل اتکا برای حملات از راه دور تبدیل کنند و چه تعداد از نرمافزارها به دلیل استفاده از نسخههای تعبیهشده کتابخانه libssh2 که وجود آنها در محصول نادیده گرفته شده است، همچنان در معرض این آسیبپذیری باقی خواهند ماند؟