2018년 6월 보안 릴리스

(2018년 6월 12일 수정됨) 보안 릴리스를 사용할 수 있습니다.

요약

모든 활성 Node.js 릴리스 라인의 수정 버전을 이제 사용할 수 있습니다. 이번 버전에서는
최초 공지(하단 참고)에서 취약점으로 분류한 부분을 수정했습니다.

모든 사용자가 최대한 빨리 업그레이드하기를 권장합니다.

다운로드와 릴리스 상세내용

HTTP/2의 서비스 거부 취약점(CVE-2018-7161)

8.x이상의 모든 버전에 취약점이 존재하고 심각도는 높음(HIGH)입니다. 공격자가 http2 서버를 제공하는
노드 서버를 망가뜨려서 서비스 거부(DoS)를 일으킬 수 있습니다. 이는 네이티브 코드에서 사용하는 객체가
사용할 수 없게 되었을 때 정리하는 과정에서의 버그를 실행하는 방법으로 http2 서버와 상호작용하면서
공격할 수 있습니다. 이는 http2 구현체를 업데이트해서 수정했습니다.
이슈를 보고한 F5 Networks의 Jordan Zebor에게 감사합니다.

영향:

  • Node.js 6.x(LTS “Boron”)의 모든 버전은 취약하지 않습니다.
  • Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약합니다.
  • Node.js 9.x의 모든 버전은 취약합니다.
  • Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.

서비스 거부, nghttp2 의존성(CVE-2018-1000168)

9.x이상의 모든 버전에 취약점이 존재하고 심각도는 높음(HIGH)입니다. 특정 조건에서
악의적인 클라이언트가 조작된 ALTSVC 프레임을 보내서 초기화되지 않은 읽기를
일으킬 수 있습니다(이어서 세그먼트 폴트가 발생합니다). 이는 nghttp2를 업데이트해서 수정했습니다.
자세한 내용은 https://nghttp2.org/blog/2018/04/12/nghttp2-v1-31-1/를 참고하세요.

영향:

  • Node.js 6.x(LTS “Boron”)의 모든 버전은 취약하지 않습니다.
  • Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약하지 않습니다.
  • Node.js 9.x의 모든 버전은 취약합니다.
  • Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.

TLS의 서비스 거부 취약점(CVE-2018-7162)

9.x이상의 모든 버전에 취약점이 존재하고 심각도는 높음(HIGH)입니다. 공격자가 TLS 서버를 지원하는
http 서버를 제공하는 node 프로세스를 망가뜨려서 서비스 거부(DoS)를 일으킬 수 있습니다.
이는 핸드셰이크 과정에서 중복된 혹은 기대하지 않은 메시지를 보내서 공격할 수 있습니다. 이 취약점은
TLS 구현체를 업데이트해서 수정했습니다. Node.js 팀과 함께 이 이슈를 살펴볼 수 있게 도와준
F5 Networks의 Jordan Zebor에게 감사합니다.

영향:

  • Node.js 6.x(LTS “Boron”)의 모든 버전은 취약하지 않습니다.
  • Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약하지 않습니다.
  • Node.js 9.x의 모든 버전은 취약합니다.
  • Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.

v9.x의 메모리 소진 DoS(CVE-2018-7164)

9.7.0 이상의 모든 버전에 취약점이 존재하고 심각도는 중간(MEDIUM)입니다. 9.7.0에서 발생한
이 버그는 net.Socket 객체를 직접 사용해서 스트림으로 네트워크에서 JavaScript로 읽을 때
소비 메모리가 증가합니다. 공격자는 이 버그를 이용해서 짧은 간격으로 작은 청크의 데이터를 계속 보내면
서비스 거부를 일으킬 수 있습니다. 이 취약점은 이전 동작으로 되돌려서 수정했습니다.

영향:

  • Node.js 6.x(LTS “Boron”)의 모든 버전은 취약하지 않습니다.
  • Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약하지 않습니다.
  • Node.js 9.7.0 이상의 모든 버전은 취약합니다.
  • Node.js 10.x(현재 버전)의 모든 버전은 취약합니다.

Buffer.fill()이나 Buffer.alloc()을 호출하면 행이 걸릴 수 있습니다(CVE-2018-7167)

Buffer.fill()이나 Buffer.alloc()을 일부 파라미터로 호출했을 때 행이 걸려서 서비스 거부가
일어날 수 있습니다. 다음 예제는 행이 걸리는 경우를 보여줍니다.

  • Buffer.alloc(100).fill(Buffer.alloc(0))
  • Buffer.alloc(100).fill(Buffer.from(''))
  • Buffer.alloc(100).fill(new Uint8Array([]))
  • Buffer.alloc(100, Buffer.alloc(0))
  • Buffer.alloc(100, new Uint8Array([]))
  • new Buffer(10).fill(new Buffer(''))

이 취약점을 수정하기 위해 Buffer.alloc()과 Buffer.fill()의 구현체를 업데이트해서
이럴 때 행이 걸리지 않고 0으로 채워지도록 했습니다.

  • Node.js 6.x(LTS “Boron”)의 모든 버전은 취약합니다.
  • Node.js 8.x(LTS “Carbon”)의 모든 버전은 취약합니다.
  • Node.js 9.x의 모든 버전은 취약합니다.
  • Node.js 10.x(현재 버전)의 모든 버전은 취약하지 않습니다.

아래부터는 원래의 글입니다.

요약

Node.js 프로젝트는 지원 중인 모든 릴리스 라인의 새 버전을 2018년 6월 12일(UTC) 정도에
릴리스할 것입니다. 이번 릴리스에는 다수의 보안 수정사항이 포함되어 있습니다.

영향

  • Node.js 6.x(LTS “Boron”)의 모든 버전에는 심각도가 낮은(LOW) 하나의 서비스 거부(DoS) 취약점이 존재합니다.
  • Node.js 8.x(LTS “Carbon”)의 모든 버전에는 두 개의 서비스 거부(DoS) 취약점이 존재하고 가장 높은 심각도는 높음(HIGH)입니다.(노트 이는 3개의 취약점이라고 해야 합니다.)
  • Node.js 9.x의 모든 보전에는 5개의 서비스 거부(DoS) 취약점이 존재하고 가장 높은 심각도는 높음(HIGH)입니다.
  • Node.js 10.x(현재 버전)의 모든 버전은 4개의 서비스 거부(DoS) 취약점이 존재하고 가장 높은 심각도는 높음(HIGH)입니다.

릴리스 시기

2018년 6월 12일(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 조직에서 관리하고 있습니다.