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 signedParams, uint8_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