피드로 돌아가기
Node.js 17.3.1 (Current)
Node.js BlogNode.js Blog
Security

Node.js 17.3.1이 Subject Alternative Name 및 인증서 검증의 4가지 보안 취약점을 수정해 PKI 우회 및 프로토타입 오염 공격 차단

Node.js 17.3.1 (Current)

2022년 1월 11일5intermediate

Context

Node.js는 TLS 인증서 검증 시 URI Subject Alternative Name(SAN) 유형을 무조건 수용하여 name-constrained intermediates를 우회할 수 있는 보안 취약점을 가지고 있었다. 추가로 SAN을 문자열로 변환할 때 name constraints 내 특수문자로 인한 주입 취약점, 다중값 Relative Distinguished Name 처리 오류, 그리고 console.table() 함수의 프로토타입 오염 취약점이 존재했다.

Technical Solution

  • URI SAN 유형 비활성화: 인증서 호스트명 검증 시 URI SAN 유형을 기본적으로 거부하고, --security-revert 옵션으로만 복원 가능하도록 변경
  • SAN 문자열 이스케이프 처리: name constraints 검증 시 특수문자를 포함한 SAN을 이스케이프하여 주입 공격 방지
  • 다중값 Relative Distinguished Name 거부: 다중값 RDN을 인정하지 않도록 변경하여 Common Name 주입 우회 공격 차단
  • console.table() 프로토타입 보호: 속성이 할당되는 객체를 null 프로토타입으로 생성하여 프로토타입 오염 방지
  • --security-revert 옵션 제공: 보안 수정 동작의 일부를 명시적으로 되돌릴 수 있는 커맨드라인 옵션 추가

Key Takeaway

TLS 인증서 검증 로직은 PKI 표준을 엄격히 따르고, 특히 다양한 SAN 유형과 특수문자 처리 시 화이트리스트 방식의 필터링과 이스케이프 처리를 통해 우회 공격을 사전에 차단해야 한다. Node.js가 기본 보안 동작을 강화하면서도 레거시 호환성을 위해 명시적 옵션으로 복원 가능하게 설계한 점은 보안 업데이트의 모범 사례를 보여준다.


Node.js 기반 HTTPS 서버 운영 팀은 v

1

7.

3.1 이상으로 업그레이드하여 기본적으로 URI SAN 검증 비활성화 및 SAN 이스케이프 처리를 적용받으며, 레거시 인증서 호환성 문제가 발생하는 경우에만 --security-revert 옵션으로 구체적으로 복원하는 식으로 단계적 대응이 가능하다.

원문 읽기