Hightech und Blech

gotofail.com

goto fail; Das letzte Sicherheitsupdate von Apple behebt einen echten Bug. Im Code befindet sich die doppelte Anweisung goto fail;. Eine prüfende Wenn-Bedingung wird nicht erreicht, was letztlich ausgenutzt werden könnte.

Ob man selbst betroffen ist, testet die Site gotofail.com:

The SSLVerifySignedServerKeyExchange function in libsecurity_ssl/lib/sslKeyExchange.c in the Secure Transport feature in the Data Security component in Apple iOS 6.x before 6.1.6 and 7.x before 7.0.6, Apple TV 6.x before 6.0.2, and Apple OS X 10.9.x before 10.9.2 does not check the signature in a TLS Server Key Exchange message, which allows man-in-the-middle attackers to spoof SSL servers by (1) using an arbitrary private key for the signing step or (2) omitting the signing step.
[ web.nvd.nist.gov ]

Man darf erwarten, dass Apple in Kürze ein Sicherheitsupdate für OS X 10.9 Mavericks herausbringen wird. Systeme vor 10.9 sind nicht betroffen. iOS ist bereits gesichert.

hashOut.length = SSL_SHA1_DIGEST_LEN;
if ((err = SSLFreeBuffer(&hashCtx)) != 0)
goto fail;

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;

err = sslRawVerify(ctx,
ctx->peerPubKey,
dataToSign, /* plaintext */
dataToSignLen, /* plaintext length */
signature,
signatureLen);
if(err) {
sslErrorLog(„SSLDecodeSignedServerKeyExchange: sslRawVerify “
„returned %d\n“, (int)err);
goto fail;
}