SSL : une faille majeure dans iOS et OS X

Christophe Laporte |

La faille de sécurité relative à la vérification de la connexion SSL est sans doute l’une des plus graves dans l’histoire d’Apple. Avant d’entrer dans les détails, nous ne pouvons que vous encourager à faire de toute urgence la mise à jour de tous vos terminaux iOS. Au passage, elle n'est pas problématique pour le jailbreak.

La sortie des mises à jour de sécurité pour iOS 6.1.x et 7.0.x fait l’objet d’une belle polémique depuis hier. En proposant ce correctif, Apple a officialisé cette faille en quelque sorte et rendu publique son existence. Comment a-t-elle pu faire cela tout en laissant OS X dans le noir et dans une moindre mesure ses testeurs sous 7.1 ? Précisons d’emblée que celle-ci touche « seulement » les personnes sous Mavericks.

Pourquoi cette faille est dangereuse

Revenons-en à la faille : Transport Layer Security (TLS), et son prédécesseur Secure Sockets Layer (SSL) sont des protocoles permettant de sécuriser les échanges sur Internet. Le problème dans l’implémentation d’Apple, c’est que le système de vérification de l’authentification SSL est en proie à un gros bogue d’une étonnante maladresse (on reviendra sur ce point un peu plus tard).

Qu’est-ce que cela signifie concrètement ? Une personne malintentionnée peut exploiter ce bogue très simplement. Elle peut initier une connexion soi-disant sécurisée en disant « je suis Google.com, regarde mon certificat ». Normalement, grâce à un système de clé, le système qui initie la connexion est en mesure de vérifier l’authenticité de ce certificat. Malheureusement, le système de vérification n’étant pas du tout opérationnel, la personne malintentionnée peut sans la moindre difficulté se faire passer pour quelqu’un d’autre.

Cette faille peut être très facilement exploitée par exemple avec un hot-spot Wi-Fi. En se débrouillant bien, son propriétaire peut par exemple déchiffrer vos échanges de données. Ce n'est qu'un exemple (le plus parlant), mais les angles d'attaque sont très nombreux.

Une erreur de programmation à peine croyable

Ce qui est hallucinant dans cette affaire, c’est que cette faille est particulièrement grossière. Spécialiste de ce genre de questions, Adam Langley a publié le code fautif en question, celui-ci étant open source. Il est relatif à SecureTransport, l’implémentation d’Apple donc pour SSL et TLS.

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;

}

Si vous développez un peu, même sans tout comprendre, vous comprendrez aisément le problème. Ces quelques lignes de code sont donc censées vérifier l’authenticité de la connexion SSL. Le problème se situe dans la vérification de la seconde condition if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)

Il y a, à la suite de cette condition, deux goto fail. Si le premier obéit à une condition, le second s’exécute directement. Résultat, tout programme faisant appel à cette routine, pour vérifier l’authenticité d’une connexion SSL, obtient une réponse « bidon ».

L’erreur est tellement grossière que certains spécialistes en sécurité se demandent s’il ne s’agit pas d’un acte malveillant. À l’heure où nous écrivons ces lignes, personne ne sait si cette faille a été exploitée par un hacker malintentionné ou par des organismes de type NSA. Dans sa note de sécurité parue hier, Apple ne crédite personne.

Que faire pour se prémunir de cette faille ?

Ceux qui aiment bidouiller peuvent toujours installer ce correctif réalisé par l’expert en sécurité Stefan Esser. Installez-le uniquement si vous savez ce que vous faites. Et en sachant que celui-ci provoque des incompatibilités avec certains programmes.

Sur OS X, cette faille touche seulement 10.9 et ses « descendants ». Si cette faille est grave, il ne convient pas de céder à la panique pour autant. On peut imaginer qu’Apple proposera un correctif au plus tard en début de semaine prochaine.

D’ici là, pour minimiser les risques, passez-vous de Safari et de Mail. Chrome et Firefox, par exemple, ne sont apparemment pas concernés par ce problème, ils utilisent leur propre implémentation de SSL. Le souci c’est que ce problème n’est pas limité à Safari et Mail, un grand nombre de programmes font appel à des connexions sécurisées. Une page de test a d’ailleurs été mise au point pour savoir si votre navigateur est concerné ou non par cette faille. Si votre configuration est sécurisée, vous devriez obtenir un message d’erreur. Sinon, vous obtiendrez un court message vous confirmant que votre navigateur est bel et bien vulnérable. Enfin, évitez d’utiliser des connexions Internet qui ne sont pas dignes de confiance comme les hot-spot Wi-Fi.

Tags
avatar Theibaud | 

Je crois plutôt à un acte délibéré et malveillant.

avatar falemaster | 

Quand vous dites que ca n'affecte pas le jailbreak cela veut dire qu'en mettant a jour on ne perd pas le jailbreak ?? Ce serait etonnant quand meme ...

avatar patrick86 | 

" cela veut dire qu'en mettant a jour on ne perd pas le jailbreak ??"

Oui

avatar jowe_19 | 

Le bug concerne les bêtas d'iOS 7.1 ?

avatar Karamazow | 

C'est hallucinant !

avatar Domsou | 

Voilà pourquoi une règle de base de programmation en C est de toujours utiliser les accolades pour les blocs...

avatar Batoo82 | 

Sur la page de test on me dit ca :If you can see this message then you are probably affected by CVE-2014-1266! See https://www.imperialviolet.org/2014/02/22/applebug.html for details and http://support.apple.com/kb/HT6147 for the iOS patch. C'est que je suis infecté ?!?!?!

avatar Christophe Laporte | 
non tu n'es pas infecté. Ta configuration n'est juste pas "protégée"
avatar Lem3ssie | 

La beta 5 souffre aussi de ce "bug"... La beta 6 aura sûrement quelques jours de retard sur le planning d'Apple mais corrigera ce problème.

avatar esantirulo | 

Ce qui est un peu décevant est que depuis plus de 30 ans existent sur le marché des analyseurs de code qui détectent tout seul les branches mortes. Je suppose qu'Apple n'est pas à quelques centaines de dollars pour acheter une licence...

avatar Ali Baba | 

@esantirulo :
Ce n'est pas une branche morte et Apple a déjà un analyseur de code très puissant avec LLVC.

avatar flagos | 

Si. Tout ce qui est derrière le deuxième goto est du code mort.

De plus, il est vraiment innaceptable qu'un code aussi critique soit code a base de goto. C'est vraiment honteux.

avatar marc_os | 

C'est quoi LLVC ?
LLVC comme seul critère de recherche dans Google ne donne rien sauf des trucs du genre "Laboratoire en loisir et vie communautaire", ou bien la "LLVC Church"…
Pas grand chose à voir avec la recherche de code mort !
Et là : http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
Rien non plus

avatar Ajioss | 

Le plus drôle aurait été d'apprendre que c'est la nouvelle recrue de 17 ans qui a découverte la faille lol
Voilà l'une des conséquences de diriger une multinationale comme une start up. Ça donne des erreurs comme le retrait accidentel de jonny ive sur l'une page du site web comme ce genre de négligence plus importante.

avatar norman | 

Non, le bug c'est d'avoir remis Ive ;-)))

avatar RDBILL | 

Et si on n'utilise pas la sécurité SSL, on est en sécurité alors ?

avatar Lem3ssie | 

@RDBILL :
Tu l'utilises depuis longtemps, mais tu ne le savais pas, et tu l'utilises tous les jours.

avatar Lem3ssie | 

@RDBILL :
Et non, si tu n'utilises pas ssl, tu n'es pas en sécurité, c'est justement le but de ce protocole.
Utilises chrome, chromium ou Firefox en attendant.

avatar readrom | 

Dans l'hypothèse d'un acte malveillant, malveillant de la part de qui ?

avatar Lem3ssie | 

Et dire que des gouvernements dépensent des milliards pour nous espionner, alors que 10 pauvres caractères "oubliés" dans le code suffisent à mettre le système à genoux.

avatar fabricepsb | 

Ce qui est lamentable c'est que les possesseurs d'iPhone 4 qui sont restés volontairement à la version 6 sont maintenant obligés d'installer iOS 7 pour sécuriser leur téléphone avec le risque de se retrouver avec un veau comme à l'époque d'iOS 4 avec l'iPhone 3G

avatar nifex8 | 

@fabricepsb :
Au début de l'article il est bien indiqué qu'iOS 6 et 7 ont été mise à jour ;0)

avatar dandu | 

Plus exactement, iOS 6 pour iPod touche et iOS 6 pour iPone 3GS sont à jour, mais pas iOS 6 pour iPhone 4 ;)

avatar coolapic | 

Exact, mon iPhone 4 sous IOS 6.1.3 ne me propose QUE de passer à 7.0.6... Fait chier Apple !

avatar patrick86 | 

@coolapic :
iOS ne propose toujours que la mise à jour la plus récente disponible.

avatar coolapic | 

Oui, je sais bien, mais là il s'agit d'une correction de bug, pas d'une "vraie" MAJ...

Et comme ils ont sorti la correction pour iPod etc j'aurais apprécié qu'ils fassent de même pour les iPhones...

Bref, Apple en profite pour "forcer" la main à ceux qui, comme moi, auraient préféré rester sous IOS 6... Et cette manière de faire me gonfle !

avatar melaure | 

Bien pratique pour forcer la main des utilisateurs ....

avatar marc_os | 

Forcer la main ?
Tu préférerais que la mise à jour soit payante ?
Et puis vous n'aviez qu'à rester sous iOS 5, version de l'iPhone 4 à l'origine.

avatar EBLIS | 

Pareil pour mon ipad 2. Je préfère encore me taper la faille qu'ios7. 2 3Gs dont le mien ont été mis à jour aujourd'hui.

avatar Ali Baba | 

@fabricepsb :
Avant d'utiliser des mots forts comme "lamentable" ça serait bien de lire l'article.

avatar redchou | 

iOS 6.1.6 n'est disponible que pour l’iPhone 3GS et l’iPod touch 4G, pas compatible iOS7.
L'iPhone 4, compatible iOS7, na pas le droit à sa version 6.1.6...

avatar duc998 | 

Même chose avec mon iPad 3 : je suis condamné à passer sous iOS 7. Or, je NE VEUX PAS passer au 7. Tant pis, ça restera ainsi. Une fois de plus, merci Apple;

avatar toto160 | 

Chez Android y a pas toute cette merde :-)

Android > iOS

avatar dperetti | 

Les apps Chrome et Gmail sur l'iPad 3 sous iOS6 sont pas mal.

avatar Istrydhil (non vérifié) | 

@fabricepsb

+1000

avatar Yanik | 

Depuis deux ou trois ans, ça déconne bien chez la Pomme. Faudrait vous ressaisir les gars.

avatar PetitGreg | 

Sous iOS 4.2.1, RAS.
Si certains sont encore sous iOS5 ou des version antérieures d'iOS 6, ce serait sympa de savoir quand cette faille est apparue.

avatar nayals | 

@PetitGreg

Sur iOS 5.1.1, RAS aussi.

iOS 5 n'est visiblement pas touché par la faille.

avatar Eaglelouk (non vérifié) | 

Tiens, Stefan Esser ne fait plus dans la chanson ?

avatar Irae00 | 

^^

avatar Domsou | 

Autre point : bravo pour l'utilisation de "goto".
Un beau bout de code à montrer aux étudiants en informatique : ce qu'il ne faut pas faire !

avatar Aurélien-A | 

C'est assez discutable, mais l'usage de goto pour ce type de structure peut se justifier pour éviter la répétition de code ou l'écriture d'une fonction supplémentaire avec son empreinte dans la pile d'exécution. N'oublions pas que nous sommes en assez bas niveau.

Exemple
http://www.cprogramming.com/tutorial/goto.html

avatar Domsou | 

@Aurélien-A :
Ok pour l'optimisation. Mais avant d'optimiser il faut s'assurer d'une chose : que le code fonctionne correctement.

Cette histoire est curieuse sur plusieurs points aussi il convient d'attendre un peu avant de réagir vertement.
Car là on empile les erreurs :
- algorithme faux
- non respect de règles de codage
- pas de tests unitaires
- pas de couverture de code
- pas de revue de code
- un code open source que personne n'a relu

Et tout cela pour du code sensible !
Étrange donc...

avatar kyaude (non vérifié) | 

L'article n'indique pas les options d'optimisation de compilation qui varie en fonction du type de codes applicatif/noyau. J'ai vu des optimiseurs remonter ce type d'erreur en indiquant le n° de ligne dans le fichier de debug.

A la lecture de l'article je conclus que les procédures qualité (vérification automatisée de code/ test détaillé/ test fonctionnel) ne sont pas respectées ou que le bug est intentionnel. Apple doit faire comme nous: ne faire confiance à personne.

avatar belgarion_riva | 

Le plus "drôle" étant que les versions précédentes d'OS X ne sont pas touchées selon l'article !!
Une raison ?

avatar iRobot 5S | 

Certains vont se faire virer !

Ça aurais été Steve Jobs tout Cupertino l'aurais entendu vociférer !

Franchement ça craint du côté d'Apple !

avatar Istrydhil (non vérifié) | 

Ce qui est bien en diffusant ce bout de code c'est que maintenant tout le monde est au courant de la routine à faire appel pour devenir un développeur mal intentionné ?! Comme si cela ne suffisait pas de dire qu'il y a une faille de sécurité, pourquoi montrer clairement où appuyer pour faire mal ? Sérieux, faudrait réfléchir un peu avant de publier un tel article !!!

avatar iRobot 5S | 

@Istrydhil :
Vu l'erreur il n'y a pas grand chose a corriger, ce sera vite fait.

avatar Orus | 

Y a t-il encore quelqu'un de compétant chez Apple ?
Faire de l'argent avec des montres et des iTrucs semblent être la préoccupation principale.

Pages

CONNEXION UTILISATEUR