(2018년 8월 16일 수정됨) 보안 릴리스를 사용할 수 있습니다.
요약
모든 활성 Node.js 릴리스 라인의 수정 버전을 이제 사용할 수 있습니다. 이번 버전에서는
최초 공지(하단 참고)에서 취약점으로 분류한 부분을 수정하고 OpenSSL을 업그레이드했습니다.
모든 사용자가 최대한 빨리 업그레이드하기를 권장합니다.
다운로드와 릴리스 상세내용
다음 버전을 다운로드할 수 있습니다. 상세한 코드 변경내역도 각 릴리스 페이지에서 볼 수 있습니다.
OpenSSL: 커다란 DH 파라미터로 인한 클라이언트 DoS(CVE-2018-0732)
Node.js가 지원 중인 모든 릴리스 라인은 이번 결함의 영향을 받습니다.
OpenSSL 1.1.0i(Node.js 10)와
1.0.2p(Node.js 6 LTS “Boron”, Node.js 8 LTS “Carbon”) 모두에 패치가 적용되었습니다.
악의적인 서버가 client 연결에 서비스 거부(DoS) 공격을 일으킬 수 있는 문제를 수정했습니다.
클라이언트와 서버가 DH나 DHE(Diffie–Hellman, 일시적(ephemeral) 모드, 비일시적 모드 포함)를
사용하는 암호화 스위트(cipher-suite)를 사용하기로 동의하는 TLS 통신 핸드셰이킹 과정 중에서
악의적인 서버는 아주 큰 소수를 클라이언트에게 보낼 수 있습니다. OpenSSL이 이를 막지 않으므로
클라이언트는 과도하게 긴 시간 동안 키를 생성하도록 강제되면서 서비스 거부가 발생할 수 있습니다.
영향:
- Node.js 6.x(LTS “Boron”)의 모든 버전은 취약합니다.
- Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약합니다.
- Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.
RSA 키 생성의 캐시 타이밍 취약성(CVE-2018-0737)
Node.js는 RSA 키 생성 기능을 노출하지 않으므로 Node.js는 이 취약성에 영향을 받지 않습니다.
OpenSSL: 로컬 사이드 채널을 통한 ECDSA 키 추출(CVE가 할당되지 않았습니다.)
Node.js가 지원 중인 모든 릴리스 라인은 이번 결함의 영향을 받습니다.
OpenSSL 1.1.0i(Node.js 10)와
1.0.2p(Node.js 6 LTS “Boron”, Node.js 8 LTS “Carbon”) 모두에 패치가 적용되었습니다.
캐시 타이밍을 관찰할 권한이 있는 공격자는 피해자가 다수의 사인을 생성하도록 하고 응답을 감시하면서
DSA나 ECDSA 개인 키를 추출할 수도 있습니다. OpenSSL 정책상 실제적이기보다는 학문적인 로컬에만
적용되는 취약성에는 CVE를 할당하지 않으므로 이 결함은 CVE를 가지지 않습니다. 이 취약성은
NCC Group의 Keegan Ryan이
발견했고 OpenSSL을 포함한 많은 암호 라이브러리가 영향을 받습니다.
영향:
- Node.js 6.x(LTS “Boron”)의 모든 버전은 취약합니다.
- Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약합니다.
- Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.
초기화되지 않은 메모리의 의도치 않은 노출(CVE-2018-7166)
이 결함은 Node.js 10만 영향을 받습니다. 초기 공지에서는 모든 릴리스 라인이 취약하다고 잘못 알렸습니다.
Node.js TSC 멤버인 Сковорода Никита Андреевич(Nikita Skovoroda / @ChALkeR)가
Buffer.alloc()
에서 초기화되지 않은 메모리를 반환하도록 하는 인자 처리 결함을 발견했습니다.
이 메서드는 안전한 메서드여야 하고 초기화되거나 정리된 메모리만을 반환해야 합니다. encoding
을
지정하는 세 번째 인자에 숫자로 전달할 수 있는데 이를 Buffer
의 내부 “fill” 메서드가 채우는 작업의
start
로 잘못 해석하게 됩니다. 이 결함을 통해 Buffer.alloc()
인자를 사용자 입력에서
받는 곳에서는 민감한 정보가 있을 수 있는 정리되지 않은 메모리 블록을 반환하도록 잘못 사용될 수 있습니다.
영향:
- Node.js 6.x(LTS “Boron”)의 모든 버전은 취약하지 않습니다.
- Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약하지 않습니다.
- Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.
Out of bounds(OOB) 쓰기(CVE-2018-12115)
Node.js가 지원 중인 모든 릴리스 라인은 이번 결함의 영향을 받습니다.
Node.js TSC 멤버인 Сковорода Никита Андреевич(Nikita Skovoroda / @ChALkeR)가
Buffer
의 메모리 공간 밖의 메모리에 작성할 수 있는 Buffer
의 OOB 쓰기를 발견했습니다.
이는 관련 없는 Buffer
객체를 오염시키거나 Node.js 프로세스에 크래시를 일으킬 수 있습니다.
UCS-2 인코딩('ucs2'
, 'ucs-2'
, 'utf16le'
, 'utf-16le'
라는 이름으로
Node.js가 인식하는)으로 사용할 때 Buffer#write()
를 통해 단일 Buffer
의 경계
밖에 쓰기를 발생시킬 수 있습니다. 버퍼의 끝에서 두 번째 위치에서 시작하는 쓰기가
쓰일 입력 바이트의 최대 길이를 잘못 계산하게 할 수 있습니다.
영향:
- Node.js 6.x(LTS “Boron”)의 모든 버전은 취약합니다.
- Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약합니다.
- Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.
아래부터는 원래의 글입니다.
요약
Node.js 프로젝트는 지원 중인 모든 릴리스 라인의 새 버전을 2018년 8월 15일(UTC) 정도에 릴리스할
것입니다. 이번 릴리스에는 다수의 보안 수정사항과 OpenSSL의 업그레이드된 버전이 포함되어 있습니다.
이번 릴리스에서 처리되는 모든 결함은 심각도가 낮다고 판단하고 있습니다. 하지만 사용자들은
이 글에서 공개한 정보와 릴리스하면서 공개할 정보를 사용해서 자신의 애플리케이션이 받을
영향의 심각도를 판단해야 합니다.
OpenSSL 1.1.0i와 1.0.2p
OpenSSL팀은 2018년 8월 14일에 OpenSSL 1.1.0i와 1.0.2p를 발표하겠다고
공지했습니다.
이번 릴리스에는 이미 공개된 세 가지 "낮은 심각도"의 보안 수정사항이 포함될 것이고 수정사항은
OpenSSL git 저장소에서 볼 수 있습니다. 이 중 2가지는 Node.js 사용자들과 관련이 있습니다.
- OpenSSL: 커다란 DH 파라미터로 인한 클라이언트 DoS(CVE-2018-0732)
- OpenSSL: 로컬 사이드 채널을 통한 ECDSA 키 추출(CVE가 할당되지 않았습니다.)
영향:
- Node.js 6.x(LTS “Boron”)의 모든 버전은 OpenSSL 1.0.2를 통해 영향을 받습니다.
- Node.js 8.x(LTS “Carbon”)의 모든 버전은 OpenSSL 1.0.2를 통해 영향을 받습니다.
- Node.js 10.x(현재 버전)의 모든 버전은 OpenSSL 1.1.0을 통해 영향을 받습니다.
Node.js 보안 포함사항
- 초기화되지 않은 메모리의 의도치 않은 노출(CVE-2018-7166)
- Out of bounds(OOB) 쓰기(CVE-2018-12115)
Node.js가 지원 중인 모든 릴리스 라인은 이 결함의 영향을 받습니다.
추가적인 포함사항
LTS 릴리스 라인의 이번 릴리스에 다음 사항도 포함할 것입니다.
- inspector: 기본적으로 0.0.0.0에 바인드 하지 않음(v6.x) #21376: Node.js 6.x(LTS “Boron”)만 영향을 받습니다.
- test: 완전히 정리하고 빌드하도록 키/Makefile 수정 #19975: Node.js가 지원 중인 모든 릴리스 라인의 테스트 스위트는 영향을 받습니다.
Node.js 10 “현재 버전” 릴리스는 LTS가 아닌 릴리스 라인의 정책에 따라 보안 관련
수정사항으로만 제한되지 않습니다.
릴리스 시기
2018년 8월 15일(UTC) 정도에 릴리스할 것이며 사용자가 영향도 평가를 할 수 있도록
각 릴리스에서 처리한 결함의 상세내용도 같이 공개할 것입니다.
연락처와 차후 업데이트
현재 Node.js 보안 정책은 https://nodejs.org/en/security/에서 볼 수 있습니다.
Node.js의 취약점을 보고하려면 security@nodejs.org로 연락해주세요.
Node.js의 보안 취약점과 보안과 관련된 릴리스의 최신 정보를 얻으려면
https://groups.google.com/forum/#!forum/nodejs-sec에서 소수의 공지만 하는
nodejs-sec 메일링 리스트를 구독해 주세요. 이 프로젝트는
nodejs GitHub 조직에서 관리하고 있습니다.