
Le test vérifie le comportement/réaction dans Spring Framework avec et sans la vulnérabilité CVE-2024-38828.
Dans ByteArrayHttpMessageConverter, la mémoire est allouée dans ByteArrayOutputStream en fonction de l'en-tête de requête Content-Length, ce qui peut ne pas correspondre à la réalité avec un corps de 0 octet. En cas de forte augmentation de ces requêtes (DoS), la mémoire est utilisée de manière sous-optimale, des nettoyages GC réguliers apparaissent et l'application commence à laguer. Je vais montrer comment implémenter/corriger cela ainsi que les métriques.

CVE-2024-38828 est une vulnérabilité de type Déni de service (DoS) dans Spring Framework qui permet à un attaquant de provoquer l'épuisement de la mémoire du serveur via un contrôleur Spring MVC avec un paramètre de type byte[].
HttpMessageConverter personnalisé pour traiter les tableaux d'octets.
├── 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