1. 개요
- HTTP/2 프로토콜 취약점으로인한 서비스 거부 공격이 발견
- HTTP/2 Rapid Reset 공격보다 더 심각한 문제를 유발
> 단일 TCP 연결로 웹 서버를 중단시킬 수 있음
2. 주요 내용 [1]
- HTTP/2에서 통신의 최소 단위를 Frame이라하며, 하나의 프레임이 포함 [2][3]
- 프레임 헤더는 최소한으로 어떤 스트림에 속하는 프레임인지 식별을 가능케 함
프레임 | 설명 |
DATA | HTTP 요청 또는 응답 페이로드를 전달하기 위해 사용 |
HEADERS | 스트림을 시작해 엔드포인트에 메시지 헤더를 전송하는 데 사용 |
PRIORITY | 스트림 우선순위를 지정하기 위해 사용 |
RST_STREAM | 클라이언트이나 서버에서 스트림을 즉시 종료하기 위해 사용 (보통 오류 상태에 대한 응답) |
SETTINGS | 일련의 키값 쌍으로 구성되며, 송신자가 설정하여 수신자에게 전달하기 위해 사용 |
PUSH_PROMISE | 서버가 클라이언트에게 클라이언트가 요청하지 않은 개체를 전송하려 한다는 것을 알리기 위해 사용 |
PING | 엔드포인트 간 왕복 시간을 측청하기 위해 사용 |
GOAWAY | 연결을 정상 종료하기 위해 사용 |
WINDOW_UPDATE | 스트림 흐름 제어를 위해 사용 |
CONTINUATION | 시퀀스를 계속하기 위해 사용 |
- HEADERS와 CONTINUATION 프레임이 공격에 악용
> HEADERS 프레임에서 END_HEADERS 플래그가 설정되지 않은 경우 CONTINUATION 프레임이 이어서 전송
> CONTINUATION 프레임에서 END_HEADERS 플래그가 설정되지 않은 경우 CONTINUATION 프레임이 이어서 전송
- 즉, 클라이언트가 새로운 HTTP/2 스트림을 시작하고
> HEADERS 및 CONTINUATION 프레임을 전송하지만, END_HEADERS 플래그가 설정되지 않은 경우
> HTTP/2 서버가 구문 분석하고 메모리에 저장해야 하는 헤더의 무한한 스트림이 생성
- HTTP/1.1에서는 두 가지 메커니즘을 통해 무한 헤더 문제로부터 보호
> 헤더 크기 제한: 헤더 목록이 허용된 크기를 초과 하면 연결이 끊어짐
> 요청/헤더 시간 초과: 요청/헤더가 적시에 전송되지 않으면 연결이 끊어짐
> HTTP/2에서는 구현되어 있지 않거나, 잘못 구현되어 있어 CPU, 메모리 부족 등 서비스 거부로 이어질 수 있음
- CERT-CC(CERT Coordination Center)는 해당 공격에 해당하는 CVE ID를 공개 [4]
> 메모리 누수, 메모리 소비, CPU 소모 등 다양한 수준의 서비스 거부 공격 허용
CVE ID | 설명 |
CVE-2024-27983 | - Node.js HTTP/2 서버에 영향 - 몇 개의 HTTP/2 프레임을 전송하면 경쟁 조건으로 인해 메모리 누수가 발생하여 잠재적인 DoS 발생 |
CVE-2024-27919 | - Envoy의 oghttp 코덱에 영향 - 헤더 맵 제한을 초과할 때 요청을 재설정하지 않아 메모리가 무제한으로 소비 |
CVE-2024-2758 | - Tempesta FW와 관련 - 속도 제한은 빈 CONTINUATION 프레임 공격을 효과적으로 방지하지 못하여 잠재적으로 DoS 허용 |
CVE-2024-2653 | - amphp/http에 영향 - 무제한 버퍼에서 CONTINUATION 프레임을 수집하여 헤더 크기 제한을 초과하면 OOM 충돌 위험 |
CVE-2023-45288 | - Go의 net/http 및 net/http2 패키지에 영향 - 공격자가 임의로 큰 헤더 세트를 보내 과도한 CPU 소비를 유발 |
CVE-2024-28182 | - nghttp2 라이브러리를 사용하는 구현과 관련 - CONTINUATION 프레임을 계속 수신하여 적절한 스트림 재설정 콜백 없이 DoS로 이어짐 |
CVE-2024-27316 | - Apache Httpd에 영향 - END_HEADERS 플래그가 설정되지 않은 CONTINUATION 프레임의 연속 스트림이 전송되어 요청이 부적절하게 종료될 수 있음 |
CVE-2024-31309 | - Apache 트래픽 서버에 영향 - HTTP/2 계속 DoS 공격은 서버에서 과도한 리소스 소비를 유발 |
CVE-2024-30255 | - Envoy 버전 1.29.2 이하에 영향 - CONTINUATION 프레임의 폭주로 인해 CPU 소모에 취약하여 상당한 서버 리소스를 소비 |
3. 참고
[1] https://nowotarski.info/http2-continuation-flood-technical-details/
[2] https://datatracker.ietf.org/doc/html/rfc7540#section-6
[3] https://itchipmunk.tistory.com/272
[4] https://kb.cert.org/vuls/id/421644
[5] https://www.bleepingcomputer.com/news/security/new-http-2-dos-attack-can-crash-web-servers-with-a-single-connection/
'취약점 > Denial of Service' 카테고리의 다른 글
NXDomain Flooding (0) | 2024.07.28 |
---|---|
Cloud DDoS 취약점 Linguistic Lumberjack (CVE-2024-4323) (0) | 2024.05.22 |
Loop DoS (CVE-2024-2169) (0) | 2024.03.23 |
KeyTrap 취약점(CVE-2023-50387) (0) | 2024.02.28 |
SLP DRDoS (CVE-2023-29552) (0) | 2023.11.13 |