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

Node.js 9.11.2가 net.Socket, Buffer.fill(), http2, nghttp2, TLS 모듈의 5개 DoS 취약점(CVE-2018-7164, CVE-2018-7167, CVE-2018-7161, CVE-2018-1000168, CVE-2018-7162)을 패치해 메모리 고갈 및 크래시 방지

Node.js 9.11.2 (Current)

2018년 6월 12일3intermediate

Context

Node.js 9.7.0 이후 버전에서 net.Socket을 스트림으로 직접 사용하여 네트워크에서 읽을 때 메모리 소비가 과도하게 증가하는 버그가 발생했다. 동시에 Buffer.fill(), http2 cleanup, TLS 수신 처리 과정에서 서비스 거부(DoS) 취약점이 존재했다.

Technical Solution

  • net.Socket 메모리 고갈 버그 수정: 9.7.0에서 도입된 버그를 식별하여 네트워크 읽기 시 메모리 누적 문제 해결
  • Buffer.fill() 무한 대기 방지: Buffer.fill() 함수 호출 시 hang 발생을 유발하는 로직 제거
  • http2 크래시 방지: cleanup 단계에서 특정 조건 하 크래시를 유발하는 http2 구현 수정
  • nghttp2 업그레이드: nghttp2를 1.32.0 버전으로 업데이트하여 http2 DoS 취약점 제거
  • TLS 크래시 방지: Windows 32-bit 환경에서 특정 데이터 수신 시 TLS 모듈 크래시 수정

Impact

본 아티클에는 성능 수치나 정량적 측정값이 기재되어 있지 않다.

Key Takeaway

주요 런타임의 보안 업데이트는 특정 모듈(네트워크, 버퍼 관리, TLS)의 메모리 안전성과 에러 처리 견고성을 검증하여 배포해야 한다. 특히 외부 라이브러리(nghttp2) 버전 업그레이드는 DoS 취약점 제거의 중요한 방편이다.


Node.js 기반 백엔드 서비스에서는

9.

1

1.2 이상으로 즉시 업그레이드하여 메모리 고갈 및 예기치 않은 크래시를 방지해야 한다. 특히 실시간 통신이나 대용량 스트림 처리(net.Socket 직접 사용), TLS 기반 연결을 많이 하는 환경에서 우선 적용이 필수다.

원문 읽기