
Der Test prüft das Verhalten/die Reaktion im Spring Framework mit und ohne die Sicherheitslücke CVE-2024-38828.
In ByteArrayHttpMessageConverter wird Speicher im ByteArrayOutputStream basierend auf dem Anfrageheader Content-Length alloziert, was möglicherweise nicht der Realität mit einem 0-Byte-Body entspricht. Bei einem starken Anstieg solcher Anfragen (DoS) wird der Speicher ineffizient genutzt, es treten regelmäßige GC-Reinigungen auf und die Anwendung beginnt zu ruckeln. Ich zeige, wie man dies implementiert/behebt und die Metriken.

CVE-2024-38828 ist eine Denial-of-Service (DoS)-Sicherheitslücke im Spring Framework, die es einem Angreifer ermöglicht, eine Speichererschöpfung auf dem Server über einen Spring MVC-Controller mit einem Parameter vom Typ byte[] herbeizuführen.
HttpMessageConverter zur Verarbeitung von Byte-Arrays.
├── 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