피드로 돌아가기
Node.js 11.3.0 (Current)
Node.js BlogNode.js Blog
Backend

Node.js 11.3.0이 HTTP 헤더 크기 제한(8192 바이트) 및 헤더 수신 타임아웃(40초) 도입으로 3개의 DoS 취약점 패치

Node.js 11.3.0 (Current)

2018년 11월 28일5intermediate

Context

Node.js HTTP 서버가 과도하게 큰 HTTP 헤더와 느린 클라이언트의 Slowloris 공격에 취약했으며, URL 파서의 javascript: 프로토콜 처리에서 호스트명 스푸핑이 가능했다.

Technical Solution

  • HTTP 헤더 크기 제한: 수신된 HTTP 헤더 총 크기를 8192 바이트로 제한하여 메모리 고갈 공격 방어
  • 헤더 수신 타임아웃 도입: 40초 이내에 완전히 수신되지 않은 헤더에 대해 다음 청크 수신 시 소켓 종료
  • server.headersTimeout 설정 옵션 제공: 타임아웃 값을 기본 40초에서 필요에 따라 조정 가능
  • server.setTimeout()과의 연계: 과도한 리소스 보유 방지 및 DoS 공격 대응 강화
  • URL 파서 버그 수정: javascript: 프로토콜 파싱 시 호스트명 스푸핑 취약점 제거
  • OpenSSL 1.1.0j로 업그레이드: DSA 및 ECDSA 서명 생성의 타이밍 취약점(CVE-2018-0734, CVE-2019-0735) 패치

Impact

아티클에는 정량적 성능 지표나 결과 수치가 명시되지 않음.

Key Takeaway

HTTP 서버 구현 시 헤더 크기와 수신 시간에 대한 명시적 제한을 설정하는 것이 Slowloris와 같은 자원 소진 공격 방어의 핵심이며, 타임아웃과 크기 제한의 조합이 효과적인 DoS 완화 전략이다.


Node.js

1

1.

3.0 이상을 사용하는 HTTP 서버에서 기본 헤더 타임아웃(40초)과 크기 제한(8192 바이트)이 자동 적용되므로, 추가 구성이 필요한 경우에만 server.headersTimeout을 명시적으로 조정하면 Slowloris 및 대용량 헤더 공격으로부터 자동 보호를 받을 수 있다.

원문 읽기