یک نقص امنیتی در نحوه مدیریت آپلودهای HTTP/2 در ابزار curl کشف شده است که به یک سرور مخرب اجازه میدهد حافظه کلاینت را تخریب کرده و در نهایت منجر به اجرای کد (Code Execution) روی سیستم کاربر شود.
جزئیات فنی و تحلیل آسیبپذیری
این نقص که با شناسه CVE-2026-92392 ردیابی میشود، از نوع Use-after-free است و نسخههای 8.12.0 تا 8.22.0 ابزار curl و کتابخانه libcurl را تحت تأثیر قرار میدهد. با توجه به اینکه بسیاری از نرمافزارها برای انتقال دادهها از libcurl استفاده میکنند، دامنه تأثیر این آسیبپذیری گسترده است.
در این سناریو، حمله از سمت سرور مدیریت میشود. برای اجرای موفقیتآمیز حمله، کلاینت باید فایلی با حجم تقریبی 135 کیلوبایت را از طریق پروتکل HTTP/2 به سروری که تحت کنترل عامل تهدید (Threat Actor) است، آپلود کند. همچنین گواهینامه (Certificate) سرور باید توسط کلاینت تأیید شود.
مکانیسم حمله و اجرای کد
طبق تحلیلهای فنی، این باگ زمانی رخ میدهد که سرور با تنظیم پنجره (Window) پروتکل HTTP/2 روی مقدار صفر، انتقال داده را متوقف کرده و سپس استریم را ریست میکند در حالی که اتصال همچنان باز میماند. در این حالت، curl تلاش میکند عملیات را مجدداً اجرا کند.
در مرحله پاکسازی (Cleanup)، curl ابتدا به لایه HTTP/2 اطلاع میدهد که انتقال به پایان رسیده و سپس باقیمانده دادههای ارسالنشده را در همان اتصال تخلیه (Flush) میکند. به دلیل نبود یک انتقال ثبتشده، این بایتهای باقیمانده به عنوان یک درخواست جدید خوانده میشوند. اگر مهاجم دادههای آپلود شده را به گونهای طراحی کند که شبیه به خطوط درخواست (Request Lines) باشد، یک استریم جدید باز شده و اشارهگری (Pointer) به easy handle ذخیره میشود.
پس از آزاد شدن هندل توسط اپلیکیشن، اتصال قدیمی همچنان به آن اشارهگر دارد. مهاجم با ارسال فریمهای خاص، میتواند دادههای خود را در حافظهای که قبلاً توسط هندل آزاد شده قرار دهد. برای دور زدن مکانیزم ASLR، مهاجم ابتدا با نشت آدرسهای محلی، چیدمان حافظه را شناسایی کرده و سپس اشارهگر تابع (Function Pointer) را با کدهای مخرب جایگزین میکند.
راهکارهای مقابله و اصلاح
تیم توسعه curl این نقص را در نسخه 8.23.0 برطرف کرده است. برای ایمنسازی سیستمها، اقدامات زیر توصیه میشود:
- بهروزرسانی فوری: ارتقاء به نسخه 8.23.0 یا نسخههای اصلاحشده در شاخههای قدیمیتر.
- جایگزین موقت: در صورتی که امکان بهروزرسانی وجود ندارد، از گزینه
--http1.1برای اجبار ابزار به استفاده از پروتکل HTTP/1.1 استفاده کنید. - تنظیمات برنامهنویسی: در اپلیکیشنهایی که از libcurl استفاده میکنند، مقدار
CURLOPT_HTTP_VERSIONرا رویCURL_HTTP_VERSION_1_1تنظیم نمایید.
کشف توسط هوش مصنوعی
جالب است بدانید که این آسیبپذیری توسط OSS Scanner متعلق به شرکت Anthropic کشف شده است. این ابزار با استفاده از مدلهای هوش مصنوعی، پروژههای متنباز را اسکن کرده و گزارشهای فنی را به همراه کد بازتولید (Reproducer) و وصلههای پیشنهادی ارسال میکند. توسعهدهنده اصلی curl اشاره کرد که این یکی از شدیدترین آسیبپذیریهای گزارش شده در سالهای اخیر برای این پروژه بوده است.