آسیب پذیری حیاتی در اجرای تابع memcpy برای ARMv7 از Glibc

محققان امنیت سیسکو بدون پوشش جزئیات آسیب پذیری ها (CVE-2020-6096) در اجرای تابع memcpy() ارائه شده توسط Glibc برای پلتفرم 32 بیتی ARMv7. این مشکل به دلیل مدیریت نادرست مقادیر منفی پارامتری است که اندازه ناحیه کپی شده را تعیین می کند، به دلیل استفاده از بهینه سازی اسمبلی که اعداد صحیح 32 بیتی امضا شده را دستکاری می کند. فراخوانی memcpy() در سیستم های ARMv7 با اندازه منفی منجر به مقایسه نادرست مقادیر و نوشتن در ناحیه ای خارج از محدوده بافر مشخص شده می شود.

این آسیب‌پذیری می‌تواند برای اجرای کد مورد سوء استفاده قرار گیرد در شرایطی که مهاجم می‌تواند تشکیل یک مقدار منفی متغیری را که از طریق آن اندازه داده‌های کپی‌شده منتقل می‌شود سازماندهی کند (مثلاً هنگام انتقال بیش از ۲ گیگابایت منفی می‌شود. داده ها، اما در طول حمله، برای فراتر رفتن از محدودیت های بافر، باید حداقل 2 گیگابایت انتقال دهید). تابع ()memcpy به طور گسترده در برنامه‌ها استفاده می‌شود و پردازنده‌های ARMv4 در سیستم‌های خودرو، موبایل، صنعتی، مصرف‌کننده، ارتباطات و دستگاه‌های تعبیه‌شده رایج هستند که به طور بالقوه در معرض حملات با استفاده از بلوتوث، رادیو HD/DAB، USB، گذرگاه CAN، Wi-Fi و سایر منابع داده خارجی (به عنوان مثال، سرویس ها و برنامه های قابل دسترسی از طریق شبکه که داده های ورودی را بدون محدودیت اندازه می پذیرند، می توانند مورد حمله قرار گیرند).

به عنوان مثال ایجاد یک اکسپلویت کار برای حمله به سرور HTTP ساخته شده در سیستم های اطلاعات خودرو، قابل دسترسی از طریق شبکه Wi-Fi خودرو است. یک مهاجم خارجی می تواند با ارسال یک درخواست GET بسیار بزرگ از یک آسیب پذیری memcpy در این سرور سوء استفاده کند و به سیستم دسترسی ریشه داشته باشد.

آسیب پذیری حیاتی در اجرای تابع memcpy برای ARMv7 از Glibc

در سیستم های 32 بیتی x86، مشکل ظاهر نمی شود، زیرا پیاده سازی memcpy برای این معماری به درستی متغیر اندازه را به عنوان یک مقدار صحیح بدون علامت از نوع size_t (در زبان اسمبلی) تفسیر می کند. پیاده سازی برای ARMv7 به جای size_t به عنوان عدد صحیح امضا شده در نظر گرفته می شود. تعمیر در حال حاضر به عنوان موجود است پچکه در آپدیت آگوست Glibc 2.32 قرار خواهد گرفت.
این اصلاح به جایگزینی استفاده از دستورالعمل‌های اسمبلی که بر روی عملوندهای امضا شده (bge و blt) کار می‌کنند با همتاهای بدون علامت (blo و bhs) خلاصه می‌شود.

مشکل هنوز حل نشده است دبیان 9 و 10 (در Debian 8 قابل مشاهده نیست)، کلاه نمدی مردانه, اوبونتو، OpenEmbedded، Tizen (استفاده شده توسط glibc). ریل и سوس این مشکل تحت تأثیر قرار نمی گیرد زیرا آنها از سیستم های 32 بیتی ARMv7 پشتیبانی نمی کنند. اندروید تحت تأثیر این آسیب پذیری قرار نمی گیرد زیرا از پیاده سازی libc (Bionic) خود استفاده می کند. که در OpenWRT به طور پیش فرض، اکثر بیلدها از Musl استفاده می کنند، اما glibc نیز در مخزن موجود است.

منبع: opennet.ru

اضافه کردن نظر