بر اساس تحلیل استاتیک انجام شده در GCC 10، یک مشکل برنامه نویسی منجربه باگ امنیتی شده است و برای اکسپلویت در OpesSSL استفاده می‌شود.

شناسه آسیب‌پذیری:

CVE-2020-1967

سطح ریسک:

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Base Score: 7.8 High

سیستم‌های آسیب‌پذیر:

OpenSSL version 1.1.1d, 1.1.1e, and 1.1.1f

نیازمند تعامل کاربر: خیر

سال شناسایی:‌ ۲۰۲۰

توضیحات:

این آسیب‌پذیری توسط برند ادلینگر(Bernd Edlinger) پیدا شده است که باعث حمله DoS می شود و توسط تیم OpenSSL با سطح ریسک خطرناک تشخیص داده شده است. امکان وقفه در عملکرد سرور یا نرم‌افزاری که از نسخه آسیب‌پذیر OpenSSL استفاده می‌کنند وجود دارد. این اتفاق زمانی می‌افتد که یک پیام دستکاری شده در زمان ارتباط TLS 1.3 ارسال شود. باگدشت در این صفحه به بررسی باگ امنیتی در OpenSSL می پردازد.

این نقص می‌تواند باعث از دسترس خارج شدن وب سایت‌های HTTPS شود که از این نسخه کتابخانه رمزنگاری استفاده می‌کنند. این فرایند را می‌توان با فرستادن prod-of-death انجام داد. همچنین این باگ را می‌توان در سرورهای جعلی برای ایجاد وقفه در عملکرد نرم‌افزارهایی که به آن متصل می‌شوند استفاده کرد.

نرم‌افزار کتابخانه OpenSSL به صورت گسترده برای ارتباطات رمز شده در شبکه یا اینترنت استفاده می‌شود. نرم‌افزارهای سمت سرور و یا کلاینت با فراخوانی تابع SSL_check_chain() یا بعد از انجام فرایند handshake در TLS 1.3 ، می توانند از دسترس خارج شوند. دلیل آن وجود NULL pointer در مدیریت غیرصحیح در signature_algorithms_cert است. تخریب زمانی اتفاق می‌افتد که الگوریتم امضای نامعتبر یا ناشناس از سمت دیگر دریافت گردد. در نتیجه این باگ در ایجاد حمله DoS استفاده میشود.

NULL pointer به این معنی است که کتابخانه سعی می‌کند به اطلاعاتی در منطقه صفر حافظه دسترسی پیدا کند و انجام چنین کاری در سیستم عامل‌های جدید باعث وقفه در عملکرد سیستم می‌شوند و این به این دلیل است که هیچ کدام از نرم‌افزارهای منطقی این عمل را انجام نمی‌دهند. اشاره گر به منطقه صفر حافظه به این معنی است که آن اشاره گر غیرمعتبر است و یا نباید دسترسی داشته باشد. پس زمانی که نرم‌افزار درخواست دسترسی به منطقه صفر حافظه داشته باشد نشان دهنده رفتار اشتباه کد است و باید متوقف شود. قسمتی از کد OpenSSL سعی می‌کند از مقدار صفر برای اشاره‌گر استفاده کند و زمانی که این اتفاق می‌افتد اطلاعات غیرمعتبر داده شده و در کانکشن TLS 1.3 باعث خرابی می‌شود.

GCC یک مجموعه کامپایلر است که شامل نرم‌افزارهای مجانی است. این نرم‌افزارها منبع کدها به زبان C , C++ و زبان‌های دیگر را برای نرم‌افزارهای و فایل‌های اجرایی کامپایل می‌کند.

پیدا کردن این باگ جدید در تحلیل استاتیک GCC 10  به ادلینگر (Edlinger) نسبت داده شد. ادلینگر با اجرای تحلیل استاتیک روی کدهای ‌OpenSSL نقص را در خروجی شناسایی نمود. تحلیل استاتیک برای بررسی کدها و شناسایی مشکلات رایج برنامه‌نویسی استفاده می‌شود و این کار قبل از اینکه هرگونه کد باینری به سمت کاربر فرستاده شود انجام می‌شود. این کار می تواند مشکلاتی مانند فراخوانی double free (), use_after_free(), نشت حافظه و موارد دیگر را شناسایی کند.

دیوید مالکالم(David Malcolm) توسعه دهنده‌ ابزارهای Red Hat toolchain کسی که روی این ویژگی کار کرده است گفته است که هدف کمک به توسعه دهندگان است که قبل از انتشار نهایی نرم‌افزار بررسی مشکلات قابل اکسپلویت را انجام دهند. دسترسی به این وسیله تحلیلگر از طریق دستور fanalyzer امکان پذیر است.

این اشتباه برنامه‌نویسی در نسخه OpenSSL 1.1.1g رفع شده است و نسخه‌های ۱.۱.۱d, 1.1.1e و ۱.۱.۱f آسیب‌پذیر هستند. کاربران که از نسخه‌های آسیب‌پذیر استفاده می‌کنند باید هرچه سریع‌تر به‌روز رسانی را انجام دهند وگروه‌های توسعه دهنده باید بسته‌های کتابخانه خود را به‌روز رسانی کنند. به روزرسانی این باگ در نسخه OpenSSL 1.1.1g انجام شده است. باگدشت در این صفحه به بررسی باگ امنیتی در OpenSSL می پردازد.

منابع:

  1. OpenSSL
  2. NVD CVE-2020-1967