ASA-2019-00158 – GnuTLS: Use-after-free/double-free em verificação de certificado


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00158

Identificador(es)

ASA-2019-00158, CVE-2019-3829, GNUTLS-SA-2019-03-27

Título

Use-after-free/double-free em verificação de certificado

Fabricante(s)

The GnuTLS Project

Produto(s)

GnuTLS

Versão(ões) afetada(s)

GnuTLS 3.5.8 ou posterior

Versão(ões) corrigida(s)

GnuTLS 3.6.7

Prova de conceito

Sim

Descrição

Uma falha foi encontrada em GnuTLS 3.5.8 ou posterior. Um use-after-free em clientes multi-threaded e uma vulnerabilidade double-free em clientes single-threaded porque _gnutls_x509_get_signature não limpa dados signature->data no caminho de limpeza.

Detalhes técnicos

Esta é uma vulnerabilidade crítica de corrupção de memória em qualquer API suportada por verify_crt(), incluindo gnutls_x509_trust_list_verify_crt() e rotinas relacionadas. Suspeito que qualquer cliente ou servidor que verifique os certificados X.509 com o GnuTLS provavelmente seja afetado e possa ser comprometido por um servidor mal-intencionado ou um atacante de rede ativo.

Em clientes multi-threaded, esta é uma vulnerabilidade de use-after-free, e uma vulnerabilidade de double-free em clientes single-threaded.

O bug principal é que _gnutls_x509_get_signature não limpa dados signature->data no caminho de limpeza:

lib/x509/common.c

cleanup:
gnutls_free(signature->data); // <- pointer in datum parameter freed, but not cleared
return result;
}

Os chamadores, como check_if_ca, assumem que, se _gnutls_x509_get_signature sempre definir esse parâmetro, ele poderá ser liberado com segurança, mas isso não é verdade:

lib/x509/verify.c
ret =
_gnutls_x509_get_signature(cert->cert, "signature", &cert_signature);
if (ret < 0) {
gnutls_assert();
goto fail;
}
// ...
fail:
result = 0;

cleanup:
_gnutls_free_datum(&cert_signed_data);
_gnutls_free_datum(&issuer_signed_data);
_gnutls_free_datum(&cert_signature); // <--- freed again
_gnutls_free_datum(&issuer_signature);
return result;
}

Créditos

Tavis Ormandy (Google Project Zero)

Referência(s)

GnuTLS
https://www.gnutls.org/security-new.html#GNUTLS-SA-2019-03-27

SECURITY: CVE-2019-3829: critical use after free vulnerability in verify_crt()
https://gitlab.com/gnutls/gnutls/issues/694

CVE-2019-3829
https://access.redhat.com/security/cve/CVE-2019-3829

CVE-2019-3829
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-3829

CVE-2019-3829
https://nvd.nist.gov/vuln/detail/CVE-2019-3829

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 27 março 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.