Un bug dans le protocole de la plateforme de jeux provoquait une corruption de la mémoire, ouvrant la porte à l’exécution de code arbitraire. Cette erreur de code est passée inaperçue depuis 2008.
Si vous êtes abonné à la plateforme de jeux Steam, peut-être avez-vous remarqué la mise à jour du logiciel client du 4 avril dernier. Elle a corrigé un mystérieux bug qui faisait planter le logiciel avec des paquets UDP malformés. Le chercheur qui a trouvé cette faille, Tom Court, vient maintenant de publier tous les détails techniques. Surprise : il s’avère que ce bug permettait en fait de prendre le contrôle du PC de n’importe quel utilisateur connecté, et cela pendant une période qui s’étend au moins de 2008 jusqu’en juillet 2017. Soit une dizaine d’années.
Le problème se situe dans le protocole de Steam, qui s’appuie sur UDP. Dans son implémentation logicielle, une mauvaise vérification de la longueur des paquets permettait de provoquer une corruption de la mémoire. Il suffisait par conséquent d’envoyer des paquets UDP malformés vers le PC de l’utilisateur pour y exécuter n’importe quel code.
L’attaquant doit d’abord analyser le trafic de la victime
Pour y arriver, l’attaquant devait néanmoins être capable d’observer auparavant le trafic de sa victime, histoire d’identifier l’adresse IP et le numéro de port utilisés, ainsi que les numéros de séquençage des paquets Steam. Ces informations sont nécessaires pour faire passer son paquet malveillant pour un paquet légitime auprès du logiciel client.
Dans une vidéo YouTube, Tom Court fait la démonstration d’une telle attaque. On voit à la fin les paquets envoyés provoquer l’ouverture de la calculatrice.
Cette attaque n’était possible que jusqu’au 11 juillet 2017, date à laquelle Steam a intégré dans son logiciel client une fonction de protection de la mémoire appelé ASLR (Address Space Layout Randomization). Après cette date, la corruption de la mémoire ne permettait plus l’exécution de code arbitraire. Elle pouvait néanmoins faire planter le logiciel.
Tom Court souligne la très forte réactivité des développeurs de Steam. Alertés le 20 février 2018, ils ont développé un patch en moins de 12 heures. Ce qui est regrettable, c’est qu’un tel bug, somme toute assez simpliste, reste dans le code pendant si longtemps sans être vu. C’est le pourquoi le chercheur en sécurité encourage les développeurs à régulièrement auditer leur ancien code et le mettre à jour.