Bug#752610: lynx: Can connect to CVE-2014-1959 test site

Andreas Metzler ametzler at bebt.de
Sun Jun 29 08:28:50 UTC 2014


Control: reassign 752610 lynx-cur 2.8.8dev.12-2

On 2014-06-27 Kurt Roeckx <kurt at roeckx.be> wrote:
> On Fri, Jun 27, 2014 at 08:05:41PM +0200, Andreas Metzler wrote:
>> On 2014-06-26 Kurt Roeckx <kurt at roeckx.be> wrote:
>>> On Thu, Jun 26, 2014 at 07:58:04PM +0200, Andreas Metzler wrote:
>> [...]
>>>> indeed an important difference comes up when comparing
>>>> gnutls-cli -p 443 gnutls.notary.icsi.berkeley.edu --x509cafile \
>>>> /etc/ssl/certs/ca-certificates.crt
>>>> with libgnutls26_2.12.20-8 and libgnutls26_2.12.20-8+deb7u1. The older
>>>> unfixed version connects successfully and trust the certificate, the
>>>> newer one does not.
 
>>> As said, I can reproduce it with +deb7u2.
>> [...]
 
>> To de-murk waters: You can reproduce it with lynx, not with gnutls-cli.
[...]

Hello,

Well, looking at lynx's source code HTTP.c we find this:

-------------------
ret = gnutls_certificate_verify_peers2(handle->gnutls_state, &tls_status);
if (ret < 0 || (ret == 0 &&
                tls_status & GNUTLS_CERT_SIGNER_NOT_FOUND)) {
    int flag_continue = 1;
    char *msg2;

    if (ret == 0 && tls_status & GNUTLS_CERT_SIGNER_NOT_FOUND) {
        msg2 = gettext("the certificate has no known issuer");
    } else if (tls_status & GNUTLS_CERT_SIGNER_NOT_FOUND) {
        msg2 = gettext("no issuer was found");
    } else if (tls_status & GNUTLS_CERT_SIGNER_NOT_CA) {
        msg2 = gettext("issuer is not a CA");
    } else if (tls_status & GNUTLS_CERT_REVOKED) {
        msg2 = gettext("the certificate has been revoked");
    } else {
        msg2 = gettext("the certificate is not trusted");
    }
    HTSprintf0(&msg, SSL_FORCED_PROMPT, msg2);
    CTRACE((tfp, "HTLoadHTTP: %s\n", msg));
    if (!ssl_noprompt) {
        if (!HTForcedPrompt(ssl_noprompt, msg, YES)) {
            flag_continue = 0;
        }
    } else if (ssl_noprompt == FORCE_PROMPT_NO) {
        flag_continue = 0;
    }
-------------------

Which I read as certificate verification only fails if either
gnutls_certificate_verify_peers2 throws an error (ret<0) or the
verification status is GNUTLS_CERT_SIGNER_NOT_FOUND. The cert throws
GNUTLS_CERT_INVALID.

cu Andreas
-- 
`What a good friend you are to him, Dr. Maturin. His other friends are
so grateful to you.'
`I sew his ears on from time to time, sure'



More information about the Pkg-gnutls-maint mailing list