2019년 12월 보안 릴리스

(2019년 12월 18일 업데이트됨) 릴리스 되었습니다.

이번 릴리스에서는 아래 정리된 세 가지 취약점을 해결하려고 npm을 v6.13.4로 업데이트했습니다.

현재의 모든 릴리스 라인이 영향을 받습니다.

이번에는 CVE는 npm, Inc.가 요청했고 아직 리뷰 중입니다. 자세한 정보는
https://twitter.com/ahmadnassri/status/1205132161961123841를 참고하세요.

전역 node_modules 바이너리 덮어쓰기

npm CLI 6.13.4 이전의 버전은 전역 node_modules 바이너리 덮어쓰기에 취약합니다.
다른 패키지 설치가 기존에 전역으로 설치된 바이너리를 덮어쓰는 걸 막지 못합니다.

예를 들어 전역으로 설치된 패키지가 serve라는 바이너리를 생성했는데 이후 설치하는
패키지도 serve라는 바이너리를 생성한다면 앞서 설치된 바이너리를 덮어씁니다.
단, node_modules 디렉터리에 있는 바이너리만 덮어쓰고 시스템 바이너리는
덮어쓰지 않습니다.

이 동작은 로컬 설치와 설치 스크립트를 통해서는 여전히 허용됩니다. 이 취약점은 사용자가
--ignore-scripts 설치 옵션을 사용하면 우회하게 됩니다.

node_modules 외부의 심볼릭 링크 참조

npm CLI 6.13.3 이전의 버전은 node_modules 외부의 심볼릭 링크 참조에 취약합니다.
패키지가 설치 중 bin 필드를 통해 node_modules 폴더 외부의 파일에 대한 심볼릭 링크를
생성할 수 있습니다. 패키지 발행자는 package.jsonbin 필드에 제대로 구성된 진입점을 통해,
패키지가 설치될 때 사용자 시스템에 있는 임의 파일을 가리키는 심볼릭 링크를 생성할 수 있습니다.
npm install을 실행하는 사용자가 접근할 수 있는 파일만 영향을 받습니다.

이 동작은 설치 스크립트를 통해서는 여전히 가능합니다. 이 취약점은 사용자가
--ignore-scripts 설치 옵션을 사용하면 우회하게 됩니다.

임의의 파일 쓰기

npm CLI 6.13.3 이전의 버전은 임의의 파일 쓰기에 취약합니다. bin 필드를 통해 의도된
node_modules 폴더 외부에 있는 폴더에 대한 접근을 막지 못합니다. 패키지 발행자가
package.jsonbin 필드를 제대로 구성한 경우, 패키지 설치 시 사용자 시스템에 파일을
생성할 수 있게 합니다. 이는 npm install을 실행하는 사용자가 접근할 수 있는 파일만
영향을 받고 이미 디스크에 있는 파일을 덮어쓸 수는 없습니다.

이 동작은 설치 스크립트를 통해서는 여전히 가능합니다. 이 취약점은 사용자가
--ignore-scripts 설치 옵션을 사용하면 우회하게 됩니다.

다운로드

2019년 12월 31일 지원이 끝나기 때문에 v8.x 라인의 마지막 릴리스가 될 것입니다.


요약

Node.js 프로젝트는 2019년 12월 17일 화요일(UTC) 또는 그 직후에 지원하는 모든 릴리스 라인에서 새로운 버전을 릴리스할 것입니다. 버전 8, 10, 12의 이번 릴리스에서 런타임의 유일한 업데이트는 https://blog.npmjs.org/post/189618601100/binary-planting-with-the-npm-cli에 공개된 취약점을 해결하는 npm의 업데이트된 버전일 겁니다. 13 버전도 여전히 보안 릴리스이지만 원래 계획된 릴리스에 포함되어 있던 모든 커밋도 포함될 것입니다.

그동안 npm 권고의 안내에 따라 사용자는 npm을 6.13.4로 업데이트해야 합니다. 일반적인 규칙처럼 프로덕션 환경에서 npm을 실행하는 것을 피해야 합니다.

영향

LTS와 현재 버전의 릴리스를 포함한 Node.js의 모든 버전은 취약합니다. Node.js 8(LTS “Carbon”), Node.js 10(LTS “Dubnium”), Node.js 12(LTS “Erbium”), Node.js 13

릴리스 시기

2019년 12월 17일 화요일(UTC) 또는 그 직후 릴리스될 것입니다.

연락처 및 향후 업데이트

현재 Node.js의 보안 정책은 https://nodejs.org/en/security/에서 볼 수 있습니다.
Node.js의 취약점을 보고하고 싶다면
https://github.com/nodejs/node/blob/master/SECURITY.md에 정리된 절차를 따르기 바랍니다.

Node.js의 보안 취약점과 보안과 관련된 릴리스의 최신 정보를 얻으려면
https://groups.google.com/forum/#!forum/nodejs-sec에서 소수의 공지만 하는
nodejs-sec 메일링 리스트를 구독해 주세요. 이 프로젝트는
nodejs GitHub 조직에서 관리하고 있습니다.