لودر دینامیک ، همراه با OpenBSD، ممکن است تحت شرایط خاصی، - برنامهها متغیر محیطی LD_LIBRARY_PATH را ترک میکنند و بنابراین به کد شخص ثالث اجازه میدهند تا در چارچوب فرآیندی که با امتیازات بالا اجرا میشود، بارگذاری شود. وصله هایی که آسیب پذیری را برطرف می کنند برای انتشار در دسترس هستند и . وصله های باینری () برای پلتفرم های amd64، i386 و arm64 هم اکنون در حال تولید هستند و تا زمان انتشار این خبر برای دانلود در دسترس هستند.
اصل مسئله: در حین کار، ld.so ابتدا مقدار متغیر LD_LIBRARY_PATH را از محیط استخراج می کند و با استفاده از تابع _dl_split_path() آن را به آرایه ای از رشته ها تبدیل می کند - مسیرهایی به دایرکتوری ها. اگر بعداً مشخص شد که فرآیند فعلی توسط یک برنامه SUID/SGID شروع شده است، آرایه ایجاد شده و در واقع متغیر LD_LIBRARY_PATH پاک می شود. در همان زمان، اگر حافظه _dl_split_path() تمام شود (که به دلیل محدودیت صریح 256 کیلوبایت در اندازه متغیرهای محیطی دشوار است، اما از نظر تئوری ممکن است)، متغیر _dl_libpath مقدار NULL را دریافت می کند و بررسی های بعدی مقدار این متغیر باعث میشود که تماس به _dl_unsetenv ("LD_LIBRARY_PATH") رد شود.
آسیب پذیری که توسط کارشناسان پیدا شده است ، همچنین چالش ها و مسائل. محققان امنیتی که این آسیبپذیری را شناسایی کردند، خاطرنشان کردند که با چه سرعتی مشکل حل شد: یک وصله آماده شد و بهروزرسانیها ظرف سه ساعت پس از دریافت اعلان پروژه OpenBSD منتشر شد.
اضافه: به مشکل شماره اختصاص داده شده است . ساخته شده در لیست پستی oss-security ، از جمله یک نمونه اولیه اکسپلویت که بر روی معماری های OpenBSD 6.6، 6.5، 6.2 و 6.1 اجرا می شود.
amd64 و i386 (این اکسپلویت را می توان برای معماری های دیگر تطبیق داد).
این مشکل در نصب پیشفرض قابل بهرهبرداری است و به کاربر محلی غیرمجاز اجازه میدهد تا هنگام اجرای ابزارهای chpass یا passwd suid، کد را بهعنوان ریشه از طریق جایگزینی کتابخانه اجرا کند. برای ایجاد شرایط کم حافظه لازم برای عملکرد، محدودیت RLIMIT_DATA را از طریق setrlimit تنظیم کنید.
منبع: opennet.ru
