CVE-2018-16395: OpenSSL::X509::Name 비교가 올바르게 동작하지 않는 취약점

루비의 표준 내장 라이브러리인 openssl에서는 OpenSSL::X509::Name 클래스를 이용하여 X.509 증명서에 사용되는 이름 정보를 다룹니다. 그러나 이 클래스의 인스턴스를 서로 비교하는 경우, 데이터의 내용에 따라서 일치해서는 안 되는 경우에도 일치하는 것으로 처리되는 취약점이 발견되었습니다. 이 취약점은 CVE 아이디 CVE-2018-16395로 할당되었습니다.

세부 내용

OpenSSL::X509::Name의 인스턴스는 CN, C 등의 X.509 증명서 내에서 사용되는 정보를 포함하고 있습니다. 인스턴스를 비교할 때는 같은 키를 가지는 요소끼리 비교하여, 같은 키 집합을 가지고 있으며 각 키의 값이 전부 일치하는 경우에만 인스턴스가 동일하다고 봅니다. 그런데 요소의 값을 비교할 때, 인수자(오른쪽) 요소의 값이 수신자(왼쪽) 요소의 값으로 시작하는 경우에도 요소의 값 비교에 성공한 것으로 처리되는 문제가 존재했습니다. 이 때문에, 악의를 가지고 생성된 X.509 증명서를 원본 증명서와 비교했을 경우, 동일하다고 판정할 가능성이 있습니다.

이 문제의 영향을 받는 버전을 사용하는 루비 사용자는 가급적 빨리 문제가 수정된 버전으로 업그레이드하거나 루비 2.4 이후 버전 사용자라면 아래의 해결 방법을 적용하기 바랍니다.

해당 버전

  • 루비 2.3 버전대: 2.3.7 이하
  • 루비 2.4 버전대: 2.4.4 이하
  • 루비 2.5 버전대: 2.5.1 이하
  • 루비 2.6 버전대: 2.6.0-preview2
  • 리비전 65139 이전의 트렁크

해결 방법

루비 2.4 이후의 버전대를 사용하는 경우에는 openssl 젬의 버전을 2.1.2 이상을 설치하는 것으로 이 취약성이 수정된 openssl 확장 라이브러리를 이용할 수 있습니다.

gem install openssl -v ">= 2.1.2"

또한 루비 2.3 버전대에서는 openssl 젬을 설치하더라도 루비에 내장된 openssl 확장 라이브러리가 사용되므로 이 취약성을 해결할 수 없습니다. 루비를 최신 버전으로 업그레이드해주세요.

도움을 준 사람

이 문제는 Tyler Eckstein이 보고했습니다.

수정 이력

  • 2018-10-17 23:00:00 (KST) 최초 공개
  • 취약점이 수정된 리비전을 명시 2018-10-19 09:00:00 (KST)