Vendredi dernier, Apple a déployé une mise à jour de son système iOS (également disponible pour iOS 6), en reconnaissant qu'il s'agissait de combler une faille dans la prise en charge du protocole de chiffrement SSL/TLS. "Un assaillant avec une position privilégiée sur le réseau pourrait capturer ou modifier des données dans des sessions protégées", expliquait la firme de Cupertino. "Secure Transport (la librairie d'Apple, ndlr) échouait à valider l'authenticité de la connexion. Le problème a été corrigé en restaurant des étapes de validation manquantes", ajoutait Apple.
Le problème serait apparu sur iOS 6.0 et a persisté jusqu'aux toutes dernières versions d'iOS, jusqu'au patch publié vendredi. La faille existe aussi sous Mac OS X, et n'a pas encore été corrigée sur le système d'exploitation qui équipe les ordinateurs Apple. Outre iOS, seul Apple TV a également bénéficié d'un correctif.
Pour assurer la confidentialité des échanges de données, les sites web ou applications qui souhaitent chiffrer les communications utilisent les surcouches SSL (Secure Sockets Layer) ou TLS (Transport Layer Security) pour rendre illisibles les communications qui seraient interceptées. Mais la faille permettait à un hacker de réaliser une attaque de type man-in-the-middle pour intercepter des données que l'utilisateur croyait sécurisées, alors que la prétendue sécurité était déduite de faux certificats de sécurité prétendument délivrés à des sociétés ayant pignon sur rue.
Il faut pour cela que le hacker ait accès au réseau utilisé par la victime, ce qui possible par exemple en créant un hotspot Wifi public sur laquelle les victimes viennent se connecter.
Un petit doublon aux grandes conséquences
Sur son blog personnel, Adam Langley, un développeur d'Apple, explique que la faille est due à un bug dans l'écriture d'une librairie dont Apple avait rendu le code source public. On y trouve en effet une série d'instructions conditionnées (if), qui visent à vérifier l'une après l'autre qu'aucune des conditions d'échec de la sécurisation de la communication n'est remplie. Le cas échéant, en cas d'erreur, le code renvoie à la fonction de mise en échec (fail) si la condition est remplie, et une fois la fonction fail résolue, les autres conditions sont ensuite étudiées dans l'ordre prévu. Le renvoi éventuel à la fonction d'échec est réalisé par la ligne "goto fail;" que l'on retrouve à plusieurs reprises dans le code.
Mais à un endroit du code source, la ligne "goto fail;" était écrite deux fois de suite. Or seule la première est interprétée comme la marche à suivre si la condition est remplie. Le deuxième "goto fail" est systématiquement exécuté, ce qui a pour effet de sauter toutes les autres vérifications de sécurité prévues. Ainsi quiconque exploitait les problèmes de sécurité non vérifiés pouvait réussir son attaque.
La librairie SecureTransport qui contient ce code source ayant été mise à disposition des développeurs par Apple, ce sont tous les logiciels qui utilisent SecureTransport qui sont victimes du même problème de sécurité.
"Ce type de bug subtile au fin fond du code est un cauchemar", compatit Adam Langley.
Toutefois, il estime que l'erreur aurait pu être évitée en s'obligeant à utiliser des parenthèses { } pour toutes les instructions conditionnées. Dans ce cas, le doublon aurait fait partie du bloc if, et n'aurait jamais été exécutée si la condition décrite n'était pas remplie.
Il estime aussi que la politique d'Apple d'examen du code est peut-être trop laxiste, et qu'il faut toujours que du code modifié soit validé par plusieurs paires d'yeux avant d'être déployé sur des produits aussi sensibles.
+ rapide, + pratique, + exclusif
Zéro publicité, fonctions avancées de lecture, articles résumés par l'I.A, contenus exclusifs et plus encore.
Découvrez les nombreux avantages de Numerama+.
Vous avez lu 0 articles sur Numerama ce mois-ci
Tout le monde n'a pas les moyens de payer pour l'information.
C'est pourquoi nous maintenons notre journalisme ouvert à tous.
Mais si vous le pouvez,
voici trois bonnes raisons de soutenir notre travail :
- 1 Numerama+ contribue à offrir une expérience gratuite à tous les lecteurs de Numerama.
- 2 Vous profiterez d'une lecture sans publicité, de nombreuses fonctions avancées de lecture et des contenus exclusifs.
- 3 Aider Numerama dans sa mission : comprendre le présent pour anticiper l'avenir.
Si vous croyez en un web gratuit et à une information de qualité accessible au plus grand nombre, rejoignez Numerama+.
Marre des réseaux sociaux ? Rejoignez-nous sur WhatsApp !