CVE-2026-94418 in wolfSSL
요약
\~에 의해 VulDB • 2026. 09. 27.
WOLFSSL_SMALL_CERT_VERIFY 설정 하에서 ProcessPeerCertParse()는 최대 메모리 사용량을 낮추기 위해 인증서 서명 검사를 파싱 작업과 별도로 실행한 후 두 결과를 병합합니다. 그러나 이 함수는 파싱이 0(성공)을 반환할 때만 서명 결과를 병합하므로, 모든 파싱 오류가 서명 검사 결과를 가리게 됩니다. ParseCertRelative()는 ConfirmSignature()가 성공적으로 통과된 후에야 유효 기간, 이름 제약 조건 및 중요 확장자 검사를 수행합니다. 따라서 서명 검사를 분리하면 "날짜 오류를 무시(override)"하는 정책의 우선순위가 뒤집어지며, ASN_SIG_CONFIRM_E 에러는 어디에서도 노출되지 않습니다. 공격자는 실제 PKI에서 키 자료를 얻거나 CA를 침해할 필요가 없습니다. 예상되는 주체 이름(trusted subject name), 신뢰된 CA의 주체를 발행자(issuer)로 지정하고 서명 필드에 임의 바이트를 넣으며, 과거 시점의 유효 기간과 공격자의 자체 키 쌍을 포함하는 자기서명 인증서만으로도 충분합니다.
영향을 받는 빌드는 WOLFSSL_SMALL_CERT_VERIFY가 정의되어 있습니다. 이 옵션은 기본적으로 꺼져 있으며, 어떤 플랫폼이나 프리셋 헤더에서도 암묵적으로 설정되지 않으며, CMake 옵션에서 접근할 수 없습니다. autotools 경로에서는 --enable-lowresource, --enable-leantls, --enable-tinytls13=cert 및 --enable-tinytls13=mutualauth를 통해 활성화됩니다. 또한 examples/configs/user_settings_embedded.h는 WC_CFG_SMALL_CERT_VERIFY를 통해 이 기능에 접근하며, 이는 기본값으로 0(비활성)입니다. --enable-all 또는 --enable-distro 옵션은 이를 전혀 활성화하지 않습니다.
애플리케이션은 wolfSSL_CTX_set_verify() 또는 wolfSSL_set_verify()를 사용하여 WOLFSSL_VERIFY_PEER 플래그와 함께 검증 콜백을 설치해야 하며, 이 콜백은 ASN_BEFORE_DATE_E 또는 ASN_AFTER_DATE_E에 대해 1(성공)을 반환해야 합니다. wolfSSL의 wolfssl/test.h에는 VERIFY_OVERRIDE_DATE_ERR 정의 하에 myVerify()라는 이름으로 이러한 형태의 콜백이 포함되어 있으며, examples/client -D 옵션에서 이를 선택합니다. 검증 콜백이 없거나 날짜 오류에 대해 preverify를 반환하는 애플리케이션은 여전히 핸드셰이크가 실패하며, wolfSSL_CertManagerVerifyBuffer() 및 wc_CheckCertSignature()는 동일한 바이너리 내에서 ASN_SIG_CONFIRM_E를 올바르게 보고합니다. TLS 1.2와 TLS 1.3 모두 양방향으로 영향을 받으며, DTLS도 동일한 함수에 도달합니다. 위조된 인증서가 체인 인증서일 경우 콜백의 승인으로 인해 WOLFSSL_CTX 인증서 관리자에 캐시되므로, 노출된 배포 환경에서는 단순히 재연결하는 대신 컨텍스트 또는 프로세스를 다시 시작해야 합니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.