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

Node.js 12.0.0이 assert, buffer, crypto, fs, http, net, tls 등 핵심 모듈의 검증 강화 및 deprecated API 제거로 보안 및 안정성 향상

Node.js 12.0.0 (Current)

2019년 4월 23일7intermediate

Context

Node.js는 이전 버전에서 불충분한 입력 검증, deprecated된 API의 잔존, 보안 취약점이 있는 레거시 구현을 유지하고 있었다. TLS 1.0/1.1 지원, 미검증 버퍼 할당, 약한 암호화 핸들 등이 누적되어 있었다.

Technical Solution

  • assert 모듈: 필수 인자 검증 추가 및 느슨한 검증 규칙 조정
  • buffer 모듈: 범위 체크 강화, SlowBuffer 생성 시 검증 추가, 할당 크기 검증 강화
  • crypto 모듈: 레거시 네이티브 핸들 제거, Cipher.setAuthTag()/Decipher.getAuthTag() 제거, _toBuf() deprecated 함수 제거
  • child_process: options.customFds 제거, fork 인자 검증 강화
  • fs 모듈: SyncWriteStream.destroy() 재구현, 모드 검증 강화, createWriteStream() start 옵션 검증 추가
  • http 모듈: llhttp로 기본 파서 변경, ClientRequest timeout 검증 추가, HPE_HEADER_OVERFLOW 에러 시 HTTP 431 반환
  • tls 모듈: TLSv1.3 지원 추가, TLSv1.0/v1.1 기본 비활성화, 잘못된 프로토콜 메서드에 대한 에러 코드 추가
  • 의존성: V8을 7.4.288.13으로 업데이트, ICU 최소 버전을 63으로 상향, OpenSSL을 1.1.1b로 업데이트
  • 모듈 시스템: require('.')가 현재 디렉토리 밖으로 해석되지 않도록 제한, 유효하지 않은 package.json main 항목에 대해 에러 발생

Impact

Node.js 12.0.0은 major 버전 업그레이드로 V8 엔진 버전 7.4로 업데이트되었으며, NODE_MODULE_VERSION이 72로 변경되어 네이티브 모듈 재컴파일이 필요하다.

Key Takeaway

메이저 버전 업그레이드 시 deprecated API 완전 제거, 입력 검증 강화, 보안 프로토콜 기본값 변경은 하위 호환성을 깨지만 시스템 보안성과 안정성을 근본적으로 향상시킨다. 특히 암호화, 프로세스 관리, 버퍼 할당 같은 저수준 API의 검증 추강화는 개발자의 실수로 인한 보안 결함을 사전에 차단한다.


Node.js 런타임에 의존하는 서비스를

1

2.

0.0 이상으로 마이그레이션할 때는 deprecated API 제거(util.print/puts/debug/error, Server.listenFD, child_process.customFds), 버퍼 할당 검증 강화로 인한 에러 처리 추가, TLS

1.0/

1.1 사용 제거가 필수이다. 특히 레거시 네이티브 확장(addon)을 사용 중이라면 에러 전파 방식 변경으로 인한 스택 트레이스 영향을 미리 검증해야 한다.

원문 읽기