피드로 돌아가기
DOS security vulnerability, October 2017
Node.js BlogNode.js Blog
Security

Node.js가 zlib v1.2.9의 windowBits 파라미터 검증 부재로 인한 원격 DoS 취약점을 windowBits 8을 9로 자동 변환하여 해결

DOS security vulnerability, October 2017

2017년 10월 24일6intermediate

Context

zlib v1.2.9 업데이트 이후 windowBits 파라미터에 8값이 전달되면 Node.js의 zlib 모듈이 크래시하거나 예외를 발생시키는 문제가 발생했다. WebSocket 클라이언트나 원격 요청을 통해 이 파라미터 값을 제어할 수 있어 외부 공격자가 Node.js 프로세스를 강제 종료시키는 원격 DoS 공격이 가능한 상황이었다.

Technical Solution

  • windowBits 파라미터 값 8을 자동으로 9로 변환: Node.js zlib 모듈에서 windowBits 8 요청을 받으면 windowBits 9로 변경하도록 처리
  • 이전 zlib 동작과의 일관성 유지: 변환 로직이 기존 애플리케이션의 영향을 최소화하도록 설계
  • 영향받는 모든 릴리스 라인에 패치 배포: Node.js 4.x, 6.x, 8.x 버전 전체에 보안 수정사항 적용
  • 2017년 10월 24일 주간에 업데이트 릴리스: 버전 4.8.2 이상, 6.10.2 이상, 8.x 전체에 대한 보안 업데이트 제공

Key Takeaway

외부 입력으로부터 받은 파라미터를 의존성 라이브러리에 직접 전달하기 전에 유효성 검증 및 정규화 계층을 추가하면 업스트림 라이브러리의 동작 변화로 인한 보안 취약점을 선제적으로 차단할 수 있다.


zlib, OpenSSL 등 저수준 압축·암호화 라이브러리를 사용하는 Node.js 서비스에서 외부 요청의 파라미터를 이들 라이브러리로 전달할 때는 호환성 계층을 추가해 예상 범위 밖의 값을 정규화하면 새로운 버전의 의존성 업데이트 후에도 런타임 크래시를 방지할 수 있다.

원문 읽기