OpenSSL 업그레이드와 심각도가 낮은 Node.js 보안 수정사항

요약

Node.js 프로젝트는 다음 주 초에 현재 진행 중인 모든 릴리스 라인의 새 버전을 출시할 예정입니다. 출시 일정은 전체 영향 평가에 따라 더 빨라질 수도 있습니다. 이번 릴리스에서는 OpenSSL에서 나온 업스트림 패치를 포함하며 그 밖에 HTTP 처리와 관련된 심각도가 낮은 문제점 몇 가지를 수정합니다. 전체 상세 내용은 관련 문서를 참고하기 바랍니다.

OpenSSL

OpenSSL 프로젝트는 UTC 기준으로 1월 28일에 1.0.2f와 1.0.1r 버전을 릴리스할 것이라고 이번 주에 발표했습니다. 이번 릴리스에서는 OpenSSL의 보안 정책에서 “높은” 심각도로 평가된 보안 결함을 수정할 것입니다. 여기서 “높은” 심각도는 다음을 의미합니다.

보편적이지 않은 설정에 영향을 거거나 이용 가능성이 크지 않기 때문에 낮은 위험성을 가지는 이슈

Node.js v0.10과 v0.12는 모두 OpenSSL v1.0.1을 사용하고 Node.js v4와 v5는 OpenSSL v1.0.2를 사용합니다. 일반적으로 정적으로 컴파일되어 있으므로 모든 릴리스 라인이 이번 업데이트의 영향을 받습니다.

지금 단계에서는 엠바고 때문에 이 결함에 대한 자세한 내용이 확실하지 않고 Node.js 사용자에 대한 영향도 확실하지 않습니다.

심각도가 낮은 Node.js 보안 수정

추가로 Node.js의 HTTP 처리와 관련된 수정사항이 있습니다. 이 문제는 낮은 심각도로 분류되었고 이 결함을 이용한 어떤 방법도 발견되지 않았습니다. 새 릴리스가 나올 때까지는 전체 상세 내용을 공개하지 않습니다.

공통 취약점 점수 시스템(CVSS, Common Vulnerability Scoring System) v3의 기본 점수

Metric Score
기초 점수: 4.8 (Medium)
기초 벡터: CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
공격 벡터: 네트워크 (AV:N)
공격 복잡도: 높음 (AC:H)
권한 필요성: 없음 (PR:N)
사용자 상호작용: 없음 (UI:N)
권한 변경: 변화없음 (S:U)
비밀 보호 영향도: 낮음 (C:L)
무결성 영향도: 낮음 (I:L)
가용성 영향도: 없음 (A:N)

영향도

OpenSSL 업데이트와 Node.js 수정사항은 모두 Node.js에서 관리하는 모든 릴리스 라인에 영향을 줍니다.

  • Node.js 0.10.x 버전은 영향을 받습니다.
  • Node.js 0.12.x 버전은 영향을 받습니다.
  • Node.js LTS Argon을 포함한 4.x 버전은 영향을 받습니다.
  • Node.js 5.x 버전은 영향을 받습니다.

릴리스 시기

OpenSSL 릴리스가 이번 주 후반으로 계획되어 있으므로 다음 주 초까지 Node.js의 릴리스 계획은 연기하고 있습니다. 이는 업그레이드 과정이 복잡하기도 하고 평일 후반이나 주말에 보안 수정사항을 릴리스하는 것은 피하기 때문입니다.

UTC 기준 2월 1일 월요일 오전 11시 (태평양시 기준 2월 1일 월요일 오후 3시) 직후에 릴리스할 예정이며 이때 사용자가 전체 영향 평가를 할 수 있도록 자세한 결함 내용도 공개할 것입니다.

하지만 28일에 OpenSSL의 자세한 결함이 공개될 때 Node.js의 crypto 팀에서 Node.js 사용자에게 예상되는 심각도에 대한 자세한 평가 내용을 만들 것입니다. Node.js 사용자에게 실제로 중요한 수정사항이라고 판단된다면 공개된 취약점을 막기 위해 사용자들이 배포할 수 있도록 금요일이나 토요일에 릴리스를 추진할 수도 있습니다.

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 조직에서 관리되고 있습니다.

(2016년 1월 29일 갱신됨) OpenSSL 영향 평가

OpenSSL 1.0.1r과 1.0.21 버전이 릴리스 되었습니다. 공지는 https://mta.openssl.org/pipermail/openssl-announce/2016-January/000061.html에서 볼 수 있습니다.

Node.js 팀에서 공개된 결함에 대한 영향도를 평가한 결과 이번 릴리스와 관련해서는 Node.js의 수정 버전에는 급한 이슈가 없다고 결론지었습니다. 그래서 계획한 대로 진행해 UTC 기준 2월 1일 월요일 오후 11시 (태평양시 기준 2월 1일 월요일 오후 3시)에 관리 중인 각 릴리스 라인의 새 버전을 릴리스하기로 했습니다. 이는 단순 추정한 릴리스 시기입니다. 릴리스가 완료되었다는 공지는 nodejs-sec (https://groups.google.com/forum/#!forum/nodejs-sec)에 올릴 것입니다.

자세한 내용

DH small 하위 그룹 (CVE-2016-0701)

v0.10과 v0.12 버전의 Node.js는 이 취약성에 영향을 받지 않습니다.

v4와 v5 버전의 Node.js는 SSL_OP_SINGLE_DH_USE 옵션을 이미 사용하기 때문에 이 취약성에 영향을 받지 않습니다.

SSLv2가 비활성화된 암호를 막지 않음 (CVE-2015-3197)

기본적으로 v0.10과 v0.12 버전의 Node.js에서는 SSLv2를 사용하지 않고, --enable-ssl2 명령행 인수가 사용되지 않는 한 영향을 받지 않습니다. (이 인수는 사용하지 않는 것을 추천합니다.)

Node.js v4 버전과 v5 버전은 SSLv2를 지원하지 않습니다.

DHE man-in-the-middle 보호 업데이트(Logjam)

이전 버전의 OpenSSL에서는(Node.js v0.10.39, v0.12.5, v4.0.0, v5.0.0 버전 이상) 디피-헬만 파라미터가 768비트보다 짧으면 서버에서 접속을 거부하여 TLS 클라이언트로그잼 문제를 방지했습니다.

모든 Nodes.js 라인에 적용된 OpenSSL 새 버전에서는 이 값을 1024비트로 증가시켰습니다. 이번 변경 사항은 길이가 짧은 DH 파라미터를 사용해 서버에 접속하는 TLS 클라이언트에만 영향이 있습니다.

(2016년 1월 30일 갱신됨) 릴리스 연기

공지했던 보안 릴리스는 이전에 공지한 2월 1일에는 진행되지 않을 예정입니다. 대신 UTC 기준 2월 9일 화요일 오후 11시 (태평양시 기준 2월 9일 화요일 오후 3시) 정도에 릴리스할 것입니다.

계획했던 수정사항이 일반적인 상황에서 하위 호환성이 깨지는 관계로 Node.js의 다음 주 버전인 v6가 나올 때까지 지연될 것입니다. 하지만 수정사항이 모든 릴리스 라인(LTS 라인인 v4, v0.12, v0.10을 포함해서)에 존재하는 보안 문제를 해결하기 때문에 변경사항을 더 자세히 리뷰하고 사용자에게 영향을 최소화하는 가장 좋은 방법을 찾는 데 조금 더 시간이 필요합니다.

이 일정 변경으로 발생한 불편함이 있다면 사과드립니다.

이후의 변경내용을 보려면 nodejs-sec(https://groups.google.com/forum/#!forum/nodejs-sec)를 보시기 바랍니다.