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

Node.js 15.5.0이 OpenSSL 1.1.1i 업데이트와 AbortSignal 지원으로 보안 취약점 해결 및 프로세스/스트림 제어 강화

Node.js 15.5.0 (Current)

2020년 12월 22일5intermediate

Context

Node.js 런타임의 OpenSSL 라이브러리가 CVE-2020-1971 취약점(NULL 포인터 역참조)을 포함하고 있었다. 하위 프로세스 및 스트림 종료 시 명확한 종료 신호 메커니즘이 부족하여 개발자 경험이 제한적이었다.

Technical Solution

  • OpenSSL을 1.1.1i로 업그레이드하여 CVE-2020-1971 NULL 포인터 역참조 취약점 패치
  • child_process.spawn() 등의 API에 AbortSignal 옵션 추가: AbortController 기반 프로세스 제어 가능
  • stream.Readable/Writable 생성자에서 signal 옵션 지원: controller.abort() 호출 시 AbortError로 스트림 즉시 종료
  • querystring.stringify()의 BigInt 값 직렬화 방식 변경: 빈 문자열 대신 10진수 문자열로 변환
  • Native API 확장: node::GetEnvironmentIsolateData()와 node::GetArrayBufferAllocator() 함수 추가로 IsolateData 및 ArrayBufferAllocator 접근 가능
  • IsolateSettingsFlag에 SHOULD_NOT_SET_PREPARE_STACK_TRACE_CALLBACK 플래그 추가: SetIsolateUpForNode() 호출 시 스택 트레이스 콜백 설정 제어 가능

Key Takeaway

Node.js의 보안 패치와 AbortSignal 표준화는 OpenSSL 취약점 노출을 차단하면서 JavaScript의 취소 토큰 패턴을 런타임 전역에 일관되게 확장한 사례이다.


Node.js 기반 서버 애플리케이션에서 장시간 실행되는 child_process를 관리할 때 AbortController의 signal 옵션을 사용하면 .kill()보다 더 명확한 AbortError 핸들링과 통일된 취소 로직을 구현할 수 있다.

원문 읽기