نسخه های اصلاحی کتابخانه رمزنگاری OpenSSL 3.0.1 و 1.1.1m موجود است. نسخه 3.0.1 آسیبپذیری (CVE-2021-4044) را برطرف کرد و حدود دهها باگ در هر دو نسخه برطرف شد.
این آسیبپذیری در پیادهسازی کلاینتهای SSL/TLS وجود دارد و به این واقعیت مربوط میشود که کتابخانه libssl به اشتباه کدهای خطای منفی بازگردانده شده توسط تابع X509_verify_cert را کنترل میکند، که برای تأیید گواهی ارسال شده به مشتری توسط سرور فراخوانی شده است. زمانی که خطاهای داخلی رخ می دهد، کدهای منفی برگردانده می شوند، مثلاً اگر حافظه برای بافر تخصیص داده نشود. اگر چنین خطایی برگردانده شود، تماسهای بعدی با توابع ورودی/خروجی مانند SSL_connect() و SSL_do_handshake() شکست خورده و کد خطای SSL_ERROR_WANT_RETRY_VERIFY را برمیگرداند، که تنها در صورتی باید بازگردانده شود که برنامه قبلاً با SSL_CTX_set_callback(verify) تماس گرفته باشد.
از آنجایی که اکثر برنامهها SSL_CTX_set_cert_verify_callback() را فرا نمیخوانند، وقوع یک خطای SSL_ERROR_WANT_RETRY_VERIFY میتواند به اشتباه تفسیر شود و منجر به خرابی، حلقه یا سایر پاسخهای نادرست شود. این مشکل در ترکیب با یک اشکال دیگر در OpenSSL 3.0 خطرناکتر است، که هنگام پردازش گواهیها در X509_verify_cert() بدون پسوند «نام جایگزین موضوع»، اما با الزامآوری نام در محدودیتهای استفاده، یک خطای داخلی ایجاد میکند. در این مورد، حمله می تواند منجر به ناهنجاری های خاص برنامه در مدیریت گواهی و ایجاد جلسه TLS شود.
منبع: opennet.ru