(2017년 11월 8일 수정사항) Node.js 릴리스
어제 활성화된 릴리스 라인에 OpenSSL 1.0.2m 업데이트를 포함한 새 릴리스를 배포했습니다.
이 문제를 엄격하게 보안 릴리스로 구분하지 않았으므로 다른 정기 릴리스처럼 다른 마이너 수정사항
및 추가사항도 포함되어 있습니다.
OpenSSL 1.0.2m를 중요 업데이트로 간주하지는 않았지만 현실적으로 가능한 한 빨리 배포 버전을
업그레이드 해야 합니다.
- Node v4.8.6 “Argon”(유지보수 LTS)
- Node v6.12.0 “Boron”(활성 LTS)
- Node v8.9.1 “Carbon”(활성 LTS)
- Node v9.1.0(현재 버전)
(2017년 11월 2일 수정사항) Node.js 영향 평가와 릴리스 계획
OpenSSL 1.0.2m에서 수정된 이번 결함에 관한 아래의 Node.js 영향 평가는 crypto 팀의
Shigeki Ohtsu가 작성한 것입니다. OpenSSL 팀이 발표한 기존의 자세한 내용은
아래에서 볼 수 있습니다.
CVE-2017-3735: X.509 인증서에서 IPAdressFamily를 파싱하면서 OOB 읽기가 발생할 수 있습니다.
CVE-2017-3735는 RFC3779에 정의된 확장을 사용해 X.509 인증서를 파싱하면서 버퍼를 초과해서
읽을 수 있는 취약점을 수정했습니다.
Node.js는 컴파일 단계에서 OPENSSL_NO_RFC3779
를 정의함으로써 RFC3779 지원을 비활성화했습니다.
그러므로 Node.js는 이번 취약점에 어떤 식으로든 영향을 받지 않습니다.
CVE-2017-3736: x86_64에서 몽고메리 제곱을 처리할 때 캐리가 전파되는 버그가 있습니다.
CVE-2017-3736는 몽고메리 제곱을
처리할 때 캐리가 전파되는 버그를 수정합니다.
분석가들은 이 결함으로 RSA와 DSA를 공격하는 것은 몹시 어려울 것이라고 얘기합니다. 디피-헬만에 대한
공격은 비밀키에 관한 정보를 밝히는 데 필요한 작업 대부분이 오프라인에서 이뤄질 수 있으므로 아주 어렵지만
가능한 것으로 판단됩니다. 이러한 공격에 필요한 리소스의 규모는 아주 크고 극히 소수의 공격자만이
사용할 수 있는 규모입니다. 게다가 공격자는 디피-헬만 파라미터를 유지하고 다수의 클라이언트와
비밀키를 공유하는 상황에서 해당 비밀키를 사용하지만, 아직 패치되지 않은 시스템에 온라인으로
접근할 수 있어야 합니다. 이는 Intel 브로드웰(5세대) 또는 그 이후, AMD 라이젠 등
BMI1, BMI2, ADX 확장을 지원하는 프로세스만 영향을 줍니다.
CVE-2017-3736는 Node.js 사용자에게 영향이 있지만, 이 결함으로 공격에 성공할 가능성은
아주 낮으므로 이 결함을 중요치 않음으로 처리했습니다.
추가 수정 사항
OpenSSL 1.0.2m에는 CVE가 할당되지 않은 두 가지 추가 수정사항도 포함되어 있습니다.
- ECDSA의 부 채널 공격은
실행하기 몹시 어렵고 비밀키에 관한 일부 정보만 획득할 수 있습니다. - SNI가 활성화된 TLS 서버.
Node.js는 컨텍스트에서SSL_set_SSL_CTX
를 사용하지 않으므로 영향을 받지 않습니다.
릴리스 계획
이 수정사항이 영향도 적고 심각하지 않으므로 이번 주에 긴급 Node.js 릴리스를 하지
않기로 결정했습니다. 활성화된 모든 릴리스 라인의 새 릴리스는 다음 주
11월 7일(화요일)에 예정되어 있고 이번 릴리스는 모두 OpenSSL 1.0.2m과
다른 Node.js 수정사항이 포함될 것입니다.
활성화된 릴리스 라인은 다음과 같습니다.
- Node.js 4 LTS “Argon”(유지보수 LTS)
- Node.js 6 LTS “Boron”(활성 LTS)
- Node.js 8 LTS “Carbon”(활성 LTS)
- Node.js 9(현재 버전)
모든 릴리스가 완료되면 이 글에 추가사항을 올릴 것입니다.
OpenSSL 프로젝트는 이번 주 2017년 11월 2일 목요일(UTC 기준)에 1.1.0g와 1.0.2m 버전을
릴리스할 것이라고 발표했습니다.
(OpenSSL 프로젝트의 수정사항도
보세요.) 이번 릴리스는 “낮음 심각도의 보안 이슈” 하나와 “중간 심각도의 보안 이슈” 하나를 수정할 것입니다.
“중간” 심각도는 클라이언트 애플리케이션이 예기치 않은 종료, 그리 널리 사용되지 않는
프로토콜(DTLS 등)의 결함, 국부 결함과 같은 문제를 포함합니다.
Node.js는 현재 OpenSSL 1.1.0을 지원하지 않거나 포함하지 않으므로 이번 릴리스에서 1.0.2m에만
집중할 것입니다.
“낮은” 심각도의 보안 이슈에 관한 정보는 이미 공개되었습니다.
올바르지 않은 X.509 IPAddressFamily는 OOB 읽기를 일으킬 수 있습니다. (CVE-2017-3735)
X.509 인증서가 올바르지 않은 IPAddressFamily 확장을 포함하고 있다면 OpenSSL은 1바이트 버퍼를
초과해서 읽을 수 있습니다. 대부분은 문자 형식으로 인증서의 잘못된 화면이 나올 것입니다.낮음 심각도의 수정이므로 릴리스를 진행하지 않습니다. 수정사항은 소스
저장소(1.0.2, 1.1.0, master 브랜치)에서 볼 수 있습니다.
https://github.com/openssl/openssl/pull/4276을 참고하세요.
이번 버그는 2006년부터 존재했습니다.
현재 상황에서는 엠바고 때문에 "중간"단계의 심각도를 가진 수정사항의 내용이 무엇인지 확실치 않고
Node.js 사용자에게 영향을 주는지도 알지 못합니다. 만약 영향이 있다면 다음의 단계를 진행할 것입니다.
OpenSSL 1.0.2m이 릴리스 되고 대략 24시간 이내에 crypto 팀은 Node.js 사용자의 영향 평가를
작성할 것입니다. 이 정보는 활성화된 릴리스 라인에 따라 다를 수도 있고 여기에 올릴 것입니다.
영향 평가와 함께 영향을 처리하는 각 활성 릴리스 라인의 릴리스 계획을 발표할 것입니다.
Node.js 4 “Argon”, Node.js 6 “Boron”, Node.js 8 “Carbon”, Node.js 9(현재 버전)에
중요 업데이트가 있을 수 있으므로 2017년 11월 3일 금요일 이후 가능한 한 빨리 준비해 두길 바랍니다.
영향 평가에서 OpenSSL “중간” 심각도 이슈가 Node.js 사용자에게 영향이 거의 없다고 나온다면
Node.js 릴리스 팀은 LTS와 현재 버전 릴리스 라인 모두에 대해 예정된 정기 Node.js 릴리스에서
이번 OpenSSL 업그레이드 버전을 포함하고 별도의 보안 릴리스를 진행하지 않기로 할 수 있습니다.
nodejs-sec 구글 그룹에 OpenSSL 릴리스 이후 24시간 이내에 확정된 릴리스 시기와 최종 릴리스에
포함될 자세한 결함 내용을 올릴 예정이니 참고하길 바랍니다.
https://groups.google.com/forum/#!forum/nodejs-sec
연락처와 차기 업데이트
현재 Node.js 보안 정책은 https://nodejs.org/en/security/에서 볼 수 있습니다.
Node.js 취약점에 대해 보고하고 싶다면 security@nodejs.org로 연락을 주세요.
보안 취약점과 보안과 관련된 릴리스에 대한 최신 정보를 받고 싶다면
https://groups.google.com/forum/#!forum/nodejs-sec에서 약간의 공지만 올라오는
nodejs-sec 메일링 리스트를 구독하기 바랍니다. 프로젝트는
nodejs GitHub 조직에서 관리되고 있습니다.