피드로 돌아가기
Node.js 12.22.9 (LTS)
Node.js BlogNode.js Blog
Security

Node.js 12.22.9가 4개의 보안 취약점(CVE-2021-44531, CVE-2021-44532, CVE-2021-44533, CVE-2022-21824)을 패치하며 TLS 인증서 검증 강화 및 프로토타입 오염 공격 방지

Node.js 12.22.9 (LTS)

2022년 1월 11일5intermediate

Context

Node.js의 TLS 인증서 검증 로직이 Subject Alternative Name(SAN) 처리에서 여러 보안 취약점을 가지고 있었다. URI SAN 타입을 무조건 수용하면서 PKI 정의를 우회할 수 있었고, 이름 제약(name constraint) 검증 시 문자열 주입 공격이 가능했다. 또한 다중값 Relative Distinguished Name(RDN) 처리 오류와 console.table() 함수의 프로토타입 오염 취약점이 존재했다.

Technical Solution

  • URI SAN 타입 처리 비활성화: 호스트명 검증 시 URI SAN 타입을 더 이상 수용하지 않도록 변경
  • SAN 문자열 이스케이프 처리: 이름 제약 검증 시 주입 공격을 야기할 수 있는 특수 문자를 이스케이프
  • 다중값 RDN 거부: 악의적으로 조작된 인증서의 Common Name 주입을 방지하기 위해 다중값 RDN 수용 중단
  • console.table() null 프로토타입 적용: 속성 할당 시 null 프로토타입 객체 사용으로 프로토타입 오염 방지
  • --security-revert 옵션 제공: 필요한 경우 이전 동작으로 되돌릴 수 있는 명령줄 옵션 추가

Key Takeaway

TLS 인증서 검증은 다양한 SAN 포맷과 RDN 구조에서 발생할 수 있는 파싱 공격에 취약하므로, PKI 표준에 명시된 타입만 엄격하게 처리하고 특수 문자 처리 시 회피 가능성을 사전 검토해야 한다.


Node.js를 사용하는 보안 운영팀은 v

1

2.

2

2.9 이상으로 즉시 업그레이드하여 TLS 인증서 검증 강화를 적용하되, 레거시 서비스에서 호환성 문제가 발생하면 --security-revert 옵션으로 단계적 마이그레이션을 진행할 수 있다.

원문 읽기