피드로 돌아가기
Node.js BlogSecurity
원문 읽기
Node.js 10.16.3이 HTTP/2 프로토콜의 8개 DoS 취약점(CVE-2019-9511~9518)을 패치해 서버 리소스 고갈 공격 방어
Node.js 10.16.3 (LTS)
AI 요약
Context
Node.js를 포함한 다양한 HTTP/2 구현체들이 Denial of Service 공격에 취약한 것으로 발견되었다. 공격자가 프로토콜 메커니즘을 악용해 서버의 CPU와 메모리를 과다하게 소비하도록 강제할 수 있는 상태였다.
Technical Solution
- CVE-2019-9511 "Data Dribble": 스트림의 윈도우 크기와 우선순위를 조작해 서버가 1바이트 청크로 데이터를 큐에 넣도록 강제하는 공격 방어
- CVE-2019-9512 "Ping Flood": 지속적인 ping 전송으로 peer의 응답 큐가 내부에 쌓이는 것을 방지하도록 처리 개선
- CVE-2019-9513 "Resource Loop": 스트림 우선순위의 빈번한 변경으로 인한 우선순위 트리 처리 과부하 방지
- CVE-2019-9514 "Reset Flood": 다수 스트림의 유효하지 않은 요청으로 인한 RST_STREAM 프레임 폭주 처리
- CVE-2019-9515 "Settings Flood": SETTINGS 프레임 스트림으로 인한 CPU 소비 증가 방지
- CVE-2019-9516 "0-Length Headers Leak": 0바이트 헤더 이름과 값으로 인한 메모리 누수 방지
- CVE-2019-9517 "Internal Data Buffering": HTTP/2 윈도우는 열려있지만 TCP 윈도우는 닫혀있는 상황에서 큰 응답 객체 요청으로 인한 메모리 버퍼링 문제 해결
- CVE-2019-9518 "Empty Frames Flood": end-of-stream 플래그 없는 빈 페이로드 프레임 폭주로 인한 CPU 처리 부하 방지
Key Takeaway
HTTP/2 프로토콜 구현 시 스트림 관리, 프레임 처리, 윈도우 제어 메커니즘 각각에 대한 입력 검증과 리소스 제한을 명시적으로 설계하지 않으면 공격자가 정상적인 프로토콜 동작을 악용해 서비스를 마비시킬 수 있다.
실천 포인트
Node.js
1
0.x LTS를 프로덕션 환경에서 운영 중인 팀은
1
0.
1
6.3 이상으로 즉시 업그레이드해야 한다. 특히 공개 인터넷에 노출된 HTTP/2 엔드포인트를 보유한 경우 여러 스트림, 프레임, 윈도우 조작을 통한 리소스 고갈이 가능하므로 보안 패치 적용이 필수이다.