피드로 돌아가기
Node.js 8.16.1 (LTS)
Node.js BlogNode.js Blog
Security

Node.js 8.16.1이 HTTP/2 프로토콜의 8가지 DoS 취약점(CVE-2019-9511~9518)을 패치해 서버 리소스 고갈 공격으로부터 보호

Node.js 8.16.1 (LTS)

2019년 8월 15일5intermediate

Context

Node.js를 포함한 HTTP/2 구현체들이 공격자의 조작된 프레임 스트림으로 인한 다중 Denial of Service 공격에 노출되어 있었다. 이들 취약점은 CPU 및 메모리 리소스를 과다 소비하게 하여 서버 장애를 유발할 수 있었다.

Technical Solution

  • CVE-2019-9511 "Data Dribble" 패치: 윈도우 사이즈와 스트림 우선순위 조작으로 인한 1바이트 단위 데이터 큐잉 방지
  • CVE-2019-9512 "Ping Flood" 패치: 연속 PING 프레임에 대한 내부 응답 큐 무한 축적 방지
  • CVE-2019-9513 "Resource Loop" 패치: 우선순위 트리 연속 변경을 통한 CPU 과부하 방지
  • CVE-2019-9514 "Reset Flood" 패치: 무효 요청에 대한 RST_STREAM 프레임 폭증으로 인한 메모리/CPU 소비 방지
  • CVE-2019-9515 "Settings Flood" 패치: SETTINGS 프레임 스트림으로 인한 과도한 ACK 응답 생성 방지
  • CVE-2019-9516 "0-Length Headers Leak" 패치: 0길이 헤더 이름/값의 메모리 할당 누수 방지
  • CVE-2019-9517 "Internal Data Buffering" 패치: HTTP/2 윈도우 개방 후 TCP 윈도우 폐쇄로 인한 응답 버퍼 무한 축적 방지
  • CVE-2019-9518 "Empty Frames Flood" 패치: 빈 페이로드 프레임(DATA, HEADERS, CONTINUATION, PUSH_PROMISE) 폭증으로 인한 CPU 소비 방지

Key Takeaway

HTTP/2 프로토콜의 프레임 기반 제어 메커니즘(스트림 우선순위, 윈도우 관리, 설정 협상)의 비대칭적 처리 비용은 리소스 고갈 공격의 벡터가 될 수 있으므로, 프로토콜 구현 시 각 제어 프레임 타입의 처리 리소스 제약을 명시적으로 설정해야 한다.


Node.js

8.x LTS를 운영하는 팀은 HTTP/2를 활성화한 서버에서

8.

1

6.1 이상으로 즉시 업그레이드하여 8가지 HTTP/2 DoS 벡터에 대한 노출을 제거해야 한다.

원문 읽기