BigSig, 코드 실행을 허용할 수 있는 Mozilla NSS의 취약점

에 대한 뉴스 치명적인 취약점 식별 (이미 CVE-2021-43527에 나열됨) en 암호화 라이브러리 세트 NSS (네트워크 보안 서비스) 악성 코드의 실행으로 이어질 수 있는 Mozilla에서 DER(Distinguished Encoding Rules)을 사용하여 지정된 DSA 또는 RSA-PSS 디지털 서명을 처리할 때.

문제 NSS를 사용하여 디지털 서명을 처리하는 응용 프로그램에서 나타납니다. CMS, S/MIME, PKCS # 7 및 PKCS # 12, 또는 배포에서 인증서를 확인할 때 TLS, X.509, OCSP 및 CRL. 이 취약점은 NSS CERT_VerifyCertificate() 호출을 사용하여 디지털 서명을 확인하는 TLS, DTLS 및 S/MIME 지원, 이메일 클라이언트 및 PDF 뷰어를 사용하는 다양한 클라이언트 및 서버 응용 프로그램에서 발생할 수 있습니다.

LibreOffice, Evolution 및 Evince는 취약한 응용 프로그램의 예로 언급됩니다.. 잠재적으로 이 문제는 Pidgin, Apache OpenOffice, Suricata, Curl 등과 같은 프로젝트에도 영향을 미칠 수 있습니다.

동시에, 취약점은 Firefox, Thunderbird 및 Tor 브라우저에 나타나지 않습니다., 검증을 위해 별도의 mozilla :: pkix 라이브러리를 사용하며 이는 NSS의 일부이기도 합니다. NS 크롬 기반 브라우저 (NSS로 특별히 컴파일되지 않은 경우) 2015년까지 NSS를 사용했지만 이후 BoringSSL로 이월되었습니다. 문제의 영향을 받지 않습니다.

취약점은 vfy_CreateContext에 있는 인증서 확인 코드의 버그로 인한 것입니다. secvfy.c 파일의 기능. 클라이언트가 서버에서 인증서를 읽을 때 오류가 나타납니다. 서버가 클라이언트의 인증서를 처리할 때와 같습니다.

DER로 인코딩된 디지털 서명을 확인할 때 NSS는 서명을 고정 크기 버퍼로 디코딩하고 이 버퍼를 PKCS # 11 모듈에 전달합니다. 사후 처리 중에 DSA 및 RSA-PSS 서명의 경우 크기가 잘못 확인되어 결과적으로 디지털 서명의 크기가 16384비트를 초과하면 VFYContextStr 구조에 할당된 버퍼의 오버플로가 발생합니다(버퍼에 2048바이트가 할당되지만 서명이 더 클 수 있는지는 확인되지 않음).

취약점이 포함된 코드는 2003년으로 거슬러 올라갑니다., 하지만 2012년 리팩토링할 때까지는 위협이 되지 않았습니다. 2017년에는 RSA-PSS 지원을 구현할 때도 같은 실수를 했습니다. 전자서명 유효성 검증 전 단계에서 오버플로가 발생하기 때문에 공격을 수행하기 위해 필요한 데이터를 얻기 위해 특정 키를 자원 집약적으로 생성할 필요가 없다. 데이터의 범위를 벗어난 부분은 함수 포인터가 포함된 메모리 영역에 기록되므로 작업 익스플로잇을 쉽게 만들 수 있습니다.

취약점은 Google Project Zero 연구원에 의해 식별되었습니다. 새로운 퍼징 테스트 방법으로 실험하는 동안 잘 테스트된 알려진 프로젝트에서 사소한 취약점이 오랫동안 탐지되지 않을 수 있다는 것을 보여주는 좋은 시연입니다.

용으로 문제가 주목받지 못한 주요 문제 오랫동안:

  • NSS 드라이브 라이브러리 및 퍼징 테스트는 전체가 아니라 개별 구성 요소 수준에서 수행되었습니다.
  • 예를 들어 DER 및 프로세스 인증서를 디코딩하는 코드는 별도로 확인되었습니다. 퍼징 과정에서 인증서를 잘 획득하여 문제의 취약점이 드러날 수 있었으나, 검증이 인증코드에 도달하지 않아 문제점이 드러나지 않았다.
  • 퍼징 테스트 동안 NSS에서 이러한 제한이 없는 경우 출력 크기(10,000바이트)에 엄격한 제한이 설정되었습니다(일반 모드의 많은 구조는 10,000바이트보다 클 수 있으므로 문제를 식별하기 위해 더 많은 입력 데이터가 필요함). ). 전체 확인을 위해 제한은 TLS에서 허용되는 인증서의 최대 크기에 해당하는 2 24 -1바이트(16MB)여야 합니다.
  • 퍼징 테스트에 의한 코드 커버리지에 대한 오해. 취약한 코드는 적극적으로 테스트했지만 필요한 입력 데이터를 생성할 수 없는 퓨저를 사용했습니다. 예를 들어 fuzzer tls_server_target은 사전 정의된 즉시 사용 가능한 인증서 세트를 사용하여 인증서 확인 코드의 확인을 TLS 메시지 및 프로토콜 상태 변경으로만 제한했습니다.

마지막으로, 코드명 BigSig의 문제가 NSS 3.73 및 NSS ESR 3.68.1에서 수정되었음을 언급할 가치가 있습니다. 패키지 형태의 솔루션 업데이트는 이미 Debian, RHEL, Ubuntu, SUSE, Arch Linux, Gentoo, FreeBSD 등 다양한 배포판에서 릴리스되었습니다.

그것에 대해 더 알고 싶다면 상담 할 수 있습니다. 다음 링크.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자: AB Internet Networks 2008 SL
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.