nss: return error if seemingly stuck in a cert loop
CVE-2022-27781 Reported-by: Florian Kohnhäuser Bug: https://curl.se/docs/CVE-2022-27781.html Closes #8822
This commit is contained in:
parent
46d45ea3af
commit
5c7da89d40
@ -983,6 +983,9 @@ static void display_cert_info(struct Curl_easy *data,
|
||||
PR_Free(common_name);
|
||||
}
|
||||
|
||||
/* A number of certs that will never occur in a real server handshake */
|
||||
#define TOO_MANY_CERTS 300
|
||||
|
||||
static CURLcode display_conn_info(struct Curl_easy *data, PRFileDesc *sock)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
@ -1018,6 +1021,11 @@ static CURLcode display_conn_info(struct Curl_easy *data, PRFileDesc *sock)
|
||||
cert2 = CERT_FindCertIssuer(cert, now, certUsageSSLCA);
|
||||
while(cert2) {
|
||||
i++;
|
||||
if(i >= TOO_MANY_CERTS) {
|
||||
CERT_DestroyCertificate(cert2);
|
||||
failf(data, "certificate loop");
|
||||
return CURLE_SSL_CERTPROBLEM;
|
||||
}
|
||||
if(cert2->isRoot) {
|
||||
CERT_DestroyCertificate(cert2);
|
||||
break;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user