피드로 돌아가기
Node.js BlogSecurity
원문 읽기
Node.js가 2019년 2월 보안 릴리스를 통해 HTTP Keep-Alive 헤더 타이밍 공격으로 인한 DoS 취약점 2개와 OpenSSL 1.0.2r의 TLS 패딩 오라클 공격 취약점을 해결
February 2019 Security Releases
AI 요약
Context
Node.js 6, 8, 10, 11의 모든 활성 릴리스 라인에서 HTTP/HTTPS Keep-Alive 연결을 통해 느린 헤더 송신으로 서버 리소스를 장시간 점유할 수 있는 DoS 취약점이 발견되었다. Node.js 6에서는 Keep-Alive 연결이 최대 2분까지 유휴 상태로 유지되는 추가 취약점이 있었다. OpenSSL 1.0.2를 사용하는 Node.js 6과 8은 TLS 패딩 오라클 공격에 노출되어 있었다.
Technical Solution
- HTTP/HTTPS Keep-Alive 느린 헤더 공격 완화: 40초 타임아웃과 server.headersTimeout 설정을 통해 헤더 수신 시간 제한
- Node.js 6에 server.keepAliveTimeout 도입: 5초 기본값으로 설정하여 Keep-Alive 연결의 최대 유휴 시간 제한 (Node.js 8은 이미 기본 5초 적용)
- OpenSSL 1.0.2r 업그레이드: CVE-2019-1559 패딩 오라클 공격 취약점 해결을 위해 Node.js 6과 8에 적용
- CWE-115 Misinterpretation of Input 취약점 미포함: 해결 준비가 완전하지 않아 이번 릴리스에서 제외하고 향후 대체 메커니즘으로 해결 계획
- 로드 밸런서/프록시 층 활용: DoS 공격 잠재력 완화를 위해 기존 인프라 활용 권장
Key Takeaway
Node.js 보안 팀이 준비 상태가 불완전한 취약점은 무리하게 포함하지 않고 향후 대체 방안을 검토하기로 결정한 점은 보안 릴리스의 안정성과 신뢰성을 우선시하는 엔지니어링 의사결정의 모범 사례이다.
실천 포인트
Node.js 운영 환경에서 HTTP Keep-Alive 연결 관리 시 server.headersTimeout(헤더 수신 타임아웃) 및 server.keepAliveTimeout(유휴 연결 타임아웃)을 명시적으로 설정하면 느린 헤더 송신 공격으로 인한 리소스 고갈을 방지할 수 있다. 특히 Node.js 6 사용자는
6.
1
7.0 이상으로 업그레이드하여 기본 5초 keepAliveTimeout을 적용해야 한다.