피드로 돌아가기
Node.js 6.9.0 (LTS)
Node.js BlogNode.js Blog
Backend

Node.js가 6.9.0 버전을 LTS(Boron)로 지정하며 Buffer() 생성자 폐기, 4개 보안 취약점 패치, 신규 API 6종 추가

Node.js 6.9.0 (LTS)

2016년 10월 18일7intermediate

Context

Node.js 4 LTS "Argon"이 2017년 4월 유지보수 종료를 앞두고 있어 사용자 마이그레이션이 필요했다. 기존 Buffer() 생성자의 보안 및 안전성 문제와 네이티브 Promise 거부 시 미처리로 인한 조용한 오류가 누적되어 있었다.

Technical Solution

  • Buffer 생성자 폐기 및 신규 API 도입: Buffer() 생성자를 Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe()로 단계적 마이그레이션 (문서 폐기 단계, 표준 오류 경고 없음)
  • OpenSSL 설정 파일 자동 로드 방지: OPENSSL_CONF 환경 변수와 기본 위치에서 OpenSSL 설정 자동 로드 제거하여 공격자의 악성 설정 주입 차단
  • V8 메모리 읽기 취약점 패치: CVE-2016-5172 (임의 메모리 읽기) 백포트로 스코프 오작동 수정
  • v8_inspector UUID 생성: 각 인스펙터 실행마다 UUID 생성으로 인가되지 않은 클라이언트의 v8_inspector 포트 접속 방지
  • 신규 개발자 편의 기능 추가: EventEmitter#eventNames() 메서드, fs.mkdtemp() (OS 원시 함수 기반 임시 디렉토리), process.cpuUsage() (프로세스 CPU 자원 사용량 조회), util.inspect()에서 초대형 배열 자동 절단
  • Promise 거부 미처리 시 경고: 네이티브 Promise 거부 후 핸들러 없을 때 표준 오류로 경고 출력
  • 네이티브 디버깅 프로토콜 도입: --inspector 플래그로 v8_inspector 프로토콜 활성화, Chrome DevTools 및 Visual Studio Code 지원
  • 플랫폼 지원 정리: Windows Vista 이전 및 macOS 10.7 이전 지원 중단
  • --prof-process 명령행 인수 추가: V8 --prof 출력 파일 처리 자동화

Impact

Node.js 4 LTS "Argon" 활성 유지보수 기간 12개월 연장(2017년 4월까지), 이후 유지보수 모드 12개월(2018년 4월 종료). Node.js 6 LTS "Boron"은 2018년 4월까지 활성 LTS, 그 후 2019년 4월까지 유지보수.

Key Takeaway

LTS 버전 전환 시 주요 보안 취약점(메모리 읽기, 설정 주입, 원격 접근)을 동시에 패치하고 문서 폐기 단계로 관리하면, 마이그레이션 충격을 최소화하면서 장기적 안정성을 확보할 수 있다.


Node.js 기반 서비스를 운영하는 팀은 Node.js 4에서 6 LTS로 마이그레이션할 때, 즉시 코드의 Buffer() 호출을 Buffer.from()으로 치환하고, OPENSSL_CONF 환경 변수 설정을 검토한 후, --inspector 포트 사용 시 인가된 클라이언트만 접근하도록 네트워크 제한을 구성하면 보안 리스크를 선제적으로 제거할 수 있다.

원문 읽기