Une faille critique dans GnuTLS

Par:
fredericmazue

ven, 07/03/2014 - 22:30

GnuTLS est une implémentation libre des protocoles SSL et TLS.  La faille a été découverte lors d'un audit fait par Nikos Mavrogiannopoulos de l'équipe Red Hat Security Technologies. Cette faille serait présente depuis au moins  neuf ans et est due à une mauvaise programmation, comme pour la faille découverte récemment dans OS X et iOS et qui a fait beaucoup parler (pour ne pas dire beaucoup gausser :-)

Dans le cas d'Apple, une instruction goto doublée :

    if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0)

       goto fail;

    if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0)
       goto fail;

    if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
       goto fail;

    if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
       goto fail;
       goto fail;

    if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
       goto fail;

Dans le cas de GnuTLS, un horrible code à base d'intruction goto qui mérite le qualificatif de programmation spaghetti.

La faille permet des attaques de type "Man in the middle" pouvant, lors d'une connexion TLS, faire accepter comme authentique un certificat X.509 contrefait.

Cette utilisation intensive, pourtant fortement déconseillée, de l'instruction goto, que ce soit dans du code commercial ou open source, laisse songeur.