کشف آسیب‌پذیری‌های حافظه در کتابخانه ncurses و تهدیدات امنیتی در سیستم‌های لینوکس و macOS

کشف آسیب‌پذیری‌های حافظه در کتابخانه ncurses و تهدیدات امنیتی در سیستم‌های لینوکس و macOS

تاریخ ایجاد

آسیب‌پذیری‌های امنیتی در کتابخانه برنامه‌نویسی ncurses (که به‌اختصار new curses نیز نامیده می‌شود) برای سیستم‌های لینوکس و مک‌اواس (macOS) که امکان اجرای کد مخرب در سیستم‌های آسیب‌پذیر را می‌دهند، کشف شده است.
 

ncurses

شکل 1- تصویری از آسیب پذیری در سیستم عامل مک‌اواس

یکی از روش‌هایی که حمله‌کنندگان می‌توانند از آن استفاده کنند، مسموم کردن متغیرهای محیطی (Environment Variables) است. آنها می‌توانند این آسیب‌پذیری‌ها را به هم پیوند دهند تا امتیازات را افزایش دهند و کد را در زمینه برنامه‌های هدف اجرا کنند یا اقدامات مخرب دیگری انجام دهند.
آسیب‌پذیری‌ها به‌صورت کلی با شماره CVE-2023-29491 ثبت شده‌اند (امتیاز CVSS 7.8). مایکروسافت اعلام کرده است که با اپل همکاری کرده و مشکلات خاص مربوط به مک‌اواس را نیز حل کرده است.
متغیرهای محیطی مقادیری هستند که توسط کاربران تعریف می‌شوند و می‌توانند توسط برنامه‌های مختلف در سیستم استفاده شوند. این مقادیر می‌توانند نحوه عملکرد آنها را در سیستم تحت تأثیر قرار دهند. تغییر دادن این متغیرها می‌تواند باعث اجرای عملیات غیرمجاز در برنامه‌ها شود.
بررسی کد و آزمون فازی نشان می‌دهد که کتابخانه ncurses به‌دنبال تعدادی از متغیرهای محیطی می‌گردد، از جمله TERMINFO که می‌توانند آلوده شوند و با آسیب‌پذیری‌های مشخص‌شده ترکیب شوند تا منجر به افزایش سطح دسترسی گردند.
پایگاه داده Terminfo اطلاعات مربوط به ترتیب‌ها و تنظیمات مختلف ترمینال‌های نمایش را در خود ذخیره می‌کند. این اطلاعات به برنامه‌ها کمک می‌کنند تا بتوانند با ترمینال‌های نمایش در تنظیمات مختلف ارتباط برقرار کنند، بدون اینکه نیاز به اطلاعات دقیق و خاص در مورد هر ترمینال خاص داشته باشند.
وجود این پایگاه داده به برنامه‌ها اجازه می‌دهد تا در یک روش کلی و استاندارد از ترمینال‌های نمایش استفاده کنند، بدون اینکه به تفصیلات فنی و ویژگی‌های خاص هر ترمینال برخورد کنند. این امر بسیار مفید است زیرا می‌تواند کاربران و توسعه دهندگان را از جزئیات فنی پنهان کند و به آنها این امکان را بدهد تا برنامه‌های خود را با ترمینال‌های مختلف اجرا کنند بدون اینکه نگرانی از مسائل سازگاری داشته باشند.
این آسیب‌پذیری‌ها شامل نشت اطلاعات از پشته (stack)، ترتیب اشتباه نوع رشته پارامتری، خطای خارج از مرز یک، خطای خارج از مرز حافظه هنگام تجزیه‌وتحلیل پایگاه داده terminfo و یک حمله منع سرویس با رشته‌های لغوشده (denial-of-service) می‌شود.
در زیر به آسیب‌پذیری‌های مختلفی اشاره شده است که ممکن است توسط یک حمله‌کننده به صورت پیاپی و در ترتیب خاصی بهره‌برداری شوند.
- برای ارتقاء امتیازات و دسترسی به قدرت‌های بیشتر در سیستم، حمله‌کننده ممکن است نیاز داشته باشد که آسیب‌پذیری‌ها را به یکدیگر متصل کند. به عبارت دیگر، باید از ترکیب آسیب‌پذیری‌های مختلف استفاده کند.
- نشت اطلاعات از پشته (stack information leak) و سرریز حافظه (heap overflow). حمله‌کننده باید از هر دوی این آسیب‌پذیری‌ها به صورت همزمان استفاده کند تا امتیازات ارتقاء دهنده به دست آورد.
- با استفاده از نشت اطلاعات از پشته، حمله‌کننده می‌تواند داده‌های خواندنی دلخواهی را از حافظه برنامه بخواند. سپس با استفاده از سرریز حافظه، می‌تواند داده‌های نوشتنی دلخواهی را در حافظه برنامه بنویسد و در نتیجه دسترسی به امتیازات بیشتری در سیستم برای انجام عملیات‌های مختلف به دست آورد.

اقدامات امنیتی
برای جلوگیری از آسیب‌پذیری‌هایی که در کتابخانه ncurses گزارش شده‌اند و از CVE-2023-29491 برای آن‌ها استفاده شده است، می‌توانید اقدامات امنیتی زیر را انجام دهید:

1. به‌روزرسانی کتابخانه: اطمینان حاصل کنید که کتابخانه ncurses در سیستم‌هایتان به آخرین نسخه به‌روزرسانی شده باشد. توصیه می‌شود همیشه از نسخه‌های امنیتی جدید استفاده کنید تا به آسیب‌پذیری‌های موجود در نسخه‌های قدیمی مقاومیت داشته باشید.
2. مانیتور کردن اختیارات اجرایی: به عنوان یک اقدام امنیتی، کاربران معمولی نباید اختیارات اجرایی زیادی داشته باشند. استفاده از ابزار‌های مانیتورینگ اختیارات اجرایی می‌تواند به جلوگیری از اجرای کدهای مخرب توسط کاربران خارج از حداقل نیاز کمک کند.
3. فیلتر کردن متغیرهای محیطی: متغیرهای محیطی (Environment Variables) را به دقت بررسی کنید و از افزودن متغیرهای نامعلوم به آنها پرهیز کنید. از تنظیم متغیرهای محیطی به نحوی که به برنامه‌ها تخلفی امکان‌پذیر نشود، جلوگیری کنید.
4. رفع آسیب‌پذیری‌های مرتبط با متغیرها: به اطمینان از رفع آسیب‌پذیری‌های مرتبط با متغیرهای محیطی مانند CVE-2023-29491 پرداخته و همچنین از نسخه‌هایی از ncurses که این آسیب‌پذیری‌ها برطرف شده باشند، استفاده کنید.
5. مدیریت دسترسی: دسترسی به متغیرهای محیطی مهم را محدود کنید. فقط کاربران و برنامه‌های معتبر باید به متغیرهای محیطی حیاظ داشته باشند.
6. پیاده‌سازی مدیریت دسترسی: از سیستم‌های مدیریت دسترسی مثل SELinux یا AppArmor بهره ببرید تا تحت نظر دقیقتری برای دسترسی به متغیرهای محیطی باشید و عملیات نامعلوم را محدود کنید.

منبع خبر:

https://thehackernews.com/2023/09/microsoft-uncovers-flaws-in-ncurses.html