피드로 돌아가기
Node.js BlogSecurity
원문 읽기
Node.js가 June 2020 보안 업데이트를 통해 TLS 세션 이벤트 순서 변경, HTTP/2 SETTINGS 프레임 제한, N-API 문자열 버퍼 오버플로우 3가지 보안 취약점 패치
June 2020 Security Releases
AI 요약
Context
Node.js 10.x, 12.x, 14.x 버전에서 3개의 보안 취약점이 발견되었다. TLS 세션이 보안 연결 확인 전에 캐시되어 인증되지 않은 연결로 재사용될 수 있고, 대규모 HTTP/2 SETTINGS 프레임 처리 시 CPU 100% 소비로 다른 작업이 차단되며, N-API 문자열 함수 호출 시 버퍼 오버플로우가 발생할 수 있었다.
Technical Solution
- TLS 세션 이벤트 발생 순서 변경: 'session' 이벤트를 'secureConnect' 이벤트 이후에만 발생하도록 수정하여 인증되지 않은 연결이 저장되는 것을 방지
- HTTP/2 SETTINGS 프레임 제한: HTTP/2 세션 프레임을 기본값 32개 설정 제한으로 제한하고 maxSettings 옵션으로 필요시 구성 가능하도록 설정
- N-API 문자열 함수 안전성 개선: napi_get_value_string_latin1(), napi_get_value_string_utf8(), napi_get_value_string_utf16() 함수에서 bufsize가 0일 때 버퍼 오버플로우를 방지하도록 수정
- node-addon-api 업데이트: LTS 버전 및 N-API를 내부적으로 지원하지 않는 Node.js 버전의 경우 node-addon-api 1.x, 2.x 신규 버전으로 업데이트
- ICU 라이브러리 패치: International Components for Unicode의 정수 오버플로우 취약점(UnicodeString::doAppend() 함수)을 10.x에 적용(12.x, 14.x는 미영향)
Key Takeaway
TLS 세션 관리, HTTP/2 프레임 처리, N-API 메모리 함수 호출 시 입력값 검증과 이벤트 발생 순서 제어의 중요성이 드러나며, 보안 취약점은 인증 단계 이후에만 캐시를 활용하고, 외부 입력 크기를 제한하며, 버퍼 연산 시 명시적 경계 검사를 수행해야 한다.
실천 포인트
Node.js를 사용하는 엔지니어 팀에서는 2020년 6월 2일 이후 발표된 Node.js
1
0.x,
1
2.x,
1
4.x의 보안 업데이트를 즉시 적용해야 하며, HTTPS 에이전트를 사용하는 경우 TLS 세션이 secureConnect 이벤트 이후에만 캐시되는지 확인하고, HTTP/2를 사용하는 경우 maxSettings 옵션으로 SETTINGS 프레임 제한을 점검하며, 네이티브 애드온을 빌드하는 경우 node-addon-api 버전을 확인해야 한다.