martes, 25 de febrero de 2014

Actualización de Apple para iOS 6 y 7

Apple ha publicado actualizaciones de seguridad para iOS 6, 7 y Apple TV 6 por una vulnerabilidad en el soporte SSL/TLS que podría permitir a un atacante interceptar comunicaciones seguras. El problema también afecta a OS X 10.9.x.

El problema reside en la función SSLVerifySignedServerKeyExchange en libsecurity_ssl/lib/sslKeyExchange.c en la característica Secure Transport en el componente Data Security de Apple iOS 6.x (anteriores a 6.1.6) y 7.x (anteriores a 7.0.6), Apple TV 6.x (anteriores a 6.0.2) y Apple OS X 10.9.x (anteriores a.9.2). El problema reside en que no se comprueba la firma en un mensaje TLS Server Key Exchange, que podría permitir ataques de hombre en el medio para falsificar servidores SSL mediante el uso de una llave privada arbitraria para el paso de firmado (o incluso llegar a omitirlo).
 
Apple ha publicado las versiones 7.0.6 y 6.1.6 de iOS y la versión 6.0.2 de Apple TV para corregir este problema. Se ha confirmado que la vulnerabilidad también está presente en OS X 10.9.1 y quedará corregido en la versión 10.9.2 (actualmente en beta), que será publicada en breve. De esta forma, se ven afectados los Apple TV de segunda generación, los iPhone 3GS, 4 (y posteriores), los iPod touch (de cuarta y quinta generación) y los iPad 2 (y posteriores).

Un análisis del código permite revelar la causa del problema

static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, 
                                 SSLBuffer signedParamsuint8_t *signature, 
                                 UInt16 signatureLen)
{
        OSStatus        err;
        ...

        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;
        ...

fail:
        SSLFreeBuffer(&signedHashes);
        SSLFreeBuffer(&hashCtx);
        return err;
}

El problema, con CVE-2014-1266, reside en las dos líneas goto fail seguidas. El primero está enlazado correctamente a la sentencia if pero la segunda línea no está condicionado. De esta forma el código siempre saltará al final desde ese segundo goto, err siempre tendrá un valor exitoso porque la de actualización SHA1 fue exitosa y de esta forma la verificación nunca fallará.

De esta forma, no se llega a efectuar correctamente la verificación de firma en un mensaje ServerKeyExchange. Da igual la clave privada del servidor: si es la correcta, una falsa ¡o incluso si no existe!; dado que no se efectúa la verificación de dicha clave.

Existe una prueba en https://www.imperialviolet.org:1266/ (el número de puerto corresponde con el número de CVE), si al visitar este sitio aparece un mensaje seguramente el sistema estará afectado.

Dada la importancia que puede tener este problema, se recomienda actualizar los dispositivos afectados a la mayor brevedad posible. Para ello, en iOS en Ajustes/General ir a Actualización de software.

Más información:

About the security content of iOS 7.0.6

About the security content of iOS 6.1.6

About the security content of Apple TV 6.0.2

Apple's SSL/TLS bug (22 Feb 2014)

Apple Fixes Dangerous SSL Authentication Flaw In iOS



Antonio Ropero
Twitter: @aropero

No hay comentarios:

Publicar un comentario en la entrada