12월 보안 릴리스 요약

지난주에 두 가지 취약점을 수정하려고 v0.12.x, v4.x, v5.x 버전의 패치 업데이트 릴리스 계획을 발표했습니다. 중간 정도의 심각도로 표시된 취약점을 수정하는 OpenSSL 업데이트의 발표에 의한 추가적인 수정이 있었습니다. OpenSSL 업데이트는 v0.10.x을 포함한 모든 릴리스 라인에 영향을 줍니다.

발표된 취약점과 OpenSSL을 업데이트하는 수정사항을 담은 Node.js v0.10.41(유지보수 버전), v0.12.9(LTS), v4.2.3 “Argon”(LTS), v5.1.1(안정 버전)을 오늘 릴리스 했습니다.

사용 중인 Node.js 버전의 수정된 취약점이 주는 영향도와 환경을 업그레이드해야 하는 긴급성을 알리기 위해 아래에 자세한 내용을 정리했습니다.

CVE-2015-8027 서비스 거부 취약점

치명적인 서비스 거부(DoS, denial of service) 취약점은 v0.12.x부터 v5.x까지 모든 버전에 영향을 줍니다. 이 취약점은 Node.js 코어 팀 멤버인 Fedor Indutny가 발견했고 HTTP 파이프라인과 관련이 있습니다. 특정 조건에서 HTTP 소켓에 연결된 파서가 없을 수가 있는데 이때 파이프라인에 연결된 요청이 존재하지 않는 파서에서 일시 정지(pause)나 속행(resume)을 실행할 수 있으므로 uncaughtException이 발생하게 됩니다. 외부 공격자가 이 조건을 만들어서 Node.js 서비스를 종료시킬 수 있으므로 이를 심각한 취약점으로 분류했습니다. 이 취약점에 영향을 받는 버전의 Node.js로 HTTP 서비스를 외부에 노출하는 사용자는 가능한 빨리 수정된 버전으로 업그레이드 하기를 권합니다.

  • Node.js 0.10.x 버전은 영향받지 않습니다.
  • Node.js 0.12.x 버전은 취약합니다. v0.12.9(LTS)로 업그레이드하세요.
  • LTS Argon을 포함한 Node.js 4.x 버전은 취약합니다. v4.2.3 “Argon”(LTS)로 업그레이드하세요.
  • Node.js 5.x 버전은 취약합니다. v5.1.1(안정 버전)로 업그레이드하세요.

CVE-2015-6764 V8 Out-of-bounds 접근 취약점

이 버그는 배열에서 out-of-bounds 접근을 일으킬 수 있는 JSON.stringify()의 V8 구현체에서 발견되었습니다. 패치는 이번 주의 크롬 안정 버전의 업데이트에 포함되었습니다. 이 버그가 브라우저에서는 심각도가 높지만 Node.js에서 이 버그를 사용할 수 있으려면 애플리케이션 내에서 제삼자의 JavaScript를 실행해야 하므로 Node.js 사용자에게는 덜 위험한 것으로 간주합니다.

신뢰할 수 없는 사용자의 JavaScript를 처리하는 서비스를 노출하는 Node.js 사용자는 분명히 위험합니다. 하지만 다른 방법으로 Node.js 프로세스에서 실행될 수 있는 악성 제삼자 JavaScript를 차단하기 위해 영향받는 버전의 Node.js를 사용하는 사용자는 모두 적절한 수정 버전으로 업그레이드하기를 권합니다.

  • Node.js 0.10.x 버전은 영향받지 않습니다.
  • Node.js 0.12.x 버전은 영향받지 않습니다.
  • LTS Argon을 포함한 Node.js 4.x 버전은 취약합니다. v4.2.3 “Argon”(LTS)로 업그레이드하세요.
  • Node.js 5.x 버전은 취약합니다. v5.1.1(안정 버전)으로 업그레이드하세요.

CVE-2015-3193 OpenSSL BN_mod_exp가 x86_64에서 올바르지 않은 결과를 생산할 수 있음

OpenSSL v1.0.2에 존재하는 이 버그는 x64 아키텍처에서 몽고메리 제곱을 처리할 때 잠재적인 공격 벡터를 노출합니다. RSA와 DSA에 대한 공격은 가능해 보이지만 실현하기는 엄청나게 어렵습니다. DHE 키 교환에 대한 공격은 실현할 수 있지만 어렵습니다. EC 알고리즘은 취약하지 않습니다. Node.js에서 현재 사용하는 SSL_OP_SINGLE_DH_USEDHE 공격을 실현불가능하게 만들 수 있다고 믿어왔지만 DHE 키 교환을 사용하는 Node.js TLS 서버가 가장 위험한 것으로 간주합니다. 자세한 내용은 http://openssl.org/news/secadv/20151203.txt에서 볼 수 있습니다.

Node.js v4.x LTS와 v5.x는 OpenSSL v1.0.2를 사용합니다. TLS 서버를 노출하는 Node.js 사용자는 가능한 빨리 수정된 버전으로 업그레이드하기를 강력하게 권장합니다.

  • Node.js 0.10.x 버전은 영향받지 않습니다.
  • Node.js 0.12.x 버전은 영향받지 않습니다.
  • LTS Argon을 포함한 Node.js 4.x 버전은 취약합니다. v4.2.3 “Argon”(LTS)로 업그레이드하세요.
  • Node.js 5.x 버전은 취약합니다. v5.1.1(안정 버전)으로 업그레이드하세요.

CVE-2015-3194 PSS 파라미터 누락시 OpenSSL 인증서 검증 종료

OpenSSL v1.0.1과 v1.0.2에 존재하는 이 버그는 RSA PSS 알고리즘을 사용하면서 잘못된 ASN.1 서명이 제공되었을 때 보안서 검증 처리 중 종료를 일으킬 수 있습니다. 이는 클라이언트 인증을 사용하는 Node.js TLS 서버에 대해서 서비스 거부(DoS, denial of service) 공격의 토대로 사용될 수 있습니다. 자세한 내용은 http://openssl.org/news/secadv/20151203.txt에서 볼 수 있습니다.

Node.js v0.10.x와 v0.12.x는 OpenSSL v1.0.0을 사용합니다. Node.js v4.x LTS와 v5.x는 OpenSSL v1.0.2를 사용합니다. TLS 클라이언트나 서버 코드를 사용하는 Node.js는 가능한 빨리 업그레이드하기를 강력하게 권합니다.

Note: Node.js 사용자는 추가로 발표된 두 가지 OpenSSL 취약점인 CVE-2015-3195 “X509_ATTRIBUTE 메모리 누수”와 CVE-2015-3196 “PSK 확인 힌트를 다루는 레이스 컨디션”에는 취약하지 않은 것으로 판단됩니다. 하지만 이 버그에 대한 수정사항은 Node.js의 새로운 수정 버전에 포함된 새 버전의 OpenSSL에 포함되었습니다.