Update NOW: Apple finally fixes OS X ‘goto fail’ SSL spying bug
Apple has released OS X 10.9.2 which, you’ll be delighted to know, improves the “accuracy” of the unread message count in Mail, and fixes the autofill feature in Safari among other little tweaks.
It also just so happens to snap shut a gaping security vulnerability that potentially allowed hackers to hijack users’ bank accounts, read their email, steal their passwords, and compromise other SSL-encrypted communications.
On Friday afternoon, the Cupertino giant updated iOS 7 and 6 for iPhones, iPods, iPads, and Apple TVs to squash a flaw that knackered the integrity of SSL connections: a programming bug caused Apple’s SSL code to skip over vital checks of a server’s authenticity when establishing a connection. Apps affected by the flaw were left with no way to securely prove who they were talking to over the network.
Then it quickly became clear over the weekend that Apple’s desktop operating system OS X 10.9.1, the latest publicly available, was also vulnerable since it used the same broken SSL library. But an update to fix the issue was only released on Tuesday.
Any software running on OS X 10.9.1 that relies on Apple’s vulnerable Security library – such as the Safari web browser, the official Twitter for Mac app, iMessage, FaceTime, and the Mail email client – was vulnerable to man-in-the-middle attacks. A malicious router or Wi-Fi point could intercept HTTPS, IMAPS, and other SSL-encrypted traffic from the machine, silently masquerade as a legit website or other online service, and decrypt the information in transit without the victim knowing.
Thanks to tools like mitmproxy, it is trivial to set up a system on a network to pull this off. Your marks will even come to you: Sophos’ James Lyne and his colleague Paul Ducklin set up a free Wi-Fi hotspot in San Francisco on Monday, and had hundreds of Apple users connect to it, although fortunately that access point was not configured to attack.
As described in detail by Google engineer Adam Langley on his personal weblog, the verification fault lies in the SSLVerifySignedServerKeyExchange() function of sslKeyExchange.c deep within the Security framework library used by OS X and iOS to provide supposedly secure connections across the internet.
The following code has two
goto fail; statements, meaning if the first isn’t executed, the second one surely will. A crucial cryptographic signature check is skipped over, allowing the server to offer a public certificate of, say, google.com, and claim to be that site, while not possessing the corresponding private key to prove it.
if ((err = SSLHashSHA1.update(hashCtx, signedParams)) != 0) goto fail; goto fail;
Apple provoked fury on two levels among infosec professionals and its users: first, it allowed a change to the Security framework that broke SSL handling to pass through QA. Second, it waited days to fix the issue even though knowledge of the terrible flaw was in the wild, ready to be exploited, seemingly so that it could conveniently bundle the patch with an upgrade for making voice calls with FaceTime.
Last but certainly not least … a critical security patch (click to enlarge)
Visiting gotofail.com, a reference to the above code cock-up, will test whether your web browser correctly rejects a malicious SSL certificate, rather than blindly trust the server is what it says it is.
On Monday, amid the fallout of the SSL bug, Apple CEO Tim Cook reflected on the anniversary of Apple cofounder Steve Jobs’ birth, tweeting: “Remembering Steve on his birthday: ‘Details matter, it’s worth waiting to get it right.'”
For users fearing their passwords and bank account details were about to be put in the hands of crooks, that wait felt like an eternity. ®