
برهان المفهوم للاستغلال لثغرة تجاوز سعة العدد الصحيح في Nginx (CVE-2017-7529) والتي تتيح قراءة ذاكرة التخزين المؤقت خارج الحدود. يتضمن بيئة مختبرية تعتمد على Docker ونص Python للاختبار.
مراجع للقراءة:
عند استخدام Nginx كخادم وكيل عكسي، فإنه عادةً ما يقوم بتخزين بعض الملفات مؤقتًا، خاصة الملفات الثابتة. يتم تخزين الجزء المخزن مؤقتًا في ملفات، ويتكون كل ملف تخزين مؤقت من "رأس الملف" + "رأس استجابة HTTP" + "جسم استجابة HTTP". إذا طلب ثانٍ أصاب ملف التخزين المؤقت هذا، فسيقوم Nginx بإرجاع "جسم استجابة HTTP" من ذلك الملف مباشرةً إلى المستخدم.
إذا كان طلبي يحتوي على رأس Range، فسيقوم Nginx بإرجاع محتوى بطول محدد بناءً على مواضع البداية والنهاية التي أحددها. وإذا قمت ببناء موضعين سالبين، مثل (-600, -9223372036854774591)، فقد يكون من الممكن قراءة بيانات من مواضع سالبة. إذا أصاب هذا الطلب أيضًا ملف التخزين المؤقت، فقد يكون من الممكن قراءة "رأس الملف" و"رأس استجابة HTTP" وما إلى ذلك الموجودة قبل "جسم استجابة HTTP" في ملف التخزين المؤقت.
تشغيل بيئة الاختبار:
docker-compose up -d
قم بزيارة http://your-ip:8080/، وسترى الصفحة الافتراضية لـ Nginx، وهذه الصفحة هي في الواقع محتوى المنفذ 8081 الذي يتم توكيله عكسيًا.
قم بتشغيل python3 poc.py http://your-ip:8080/ لقراءة نتيجة الإرجاع:

يمكن ملاحظة أنه تمت قراءة "رأس الملف" و"رأس استجابة HTTP" وما إلى ذلك الموجودة قبل "جسم استجابة HTTP" خارج الحدود.
إذا كانت القراءة خاطئة، يرجى تعديل عنوان الإزاحة (605) في poc.py.