L'updater de SCP:CB : dix ans sans TLS
Résumé
L'updater de SCP: Containment Breach télécharge ses mises à jour en HTTP non chiffré depuis 2016, avec un support HTTPS purement cosmétique : même code path que HTTP, aucun TLS. La pull request qui l'a introduit documente elle-même la limite dans sa propre description. Jamais corrigé depuis, toujours livré dans la dernière version officielle.
SCP: Containment Breach vérifie et télécharge ses mises à jour via http://www.scpcbgame.com/..., en cleartext. Le code prétend gérer HTTPS :
Select protocol$
Case "http", "https" ; https traité comme http
WriteLine(Stream, "GET " + path$ + " HTTP/1.1")
Mais "https" suit exactement le même chemin que "http" : connexion sur le port 80, aucun TLS handshake, aucun certificat vérifié. Le support HTTPS accepté par le code reste purement cosmétique.
Concrètement, un attaquant en position d’intercepter le trafic réseau du joueur (Wi-Fi public, DNS compromis, rogue access point) peut mener une attaque MITM et substituer sa propre réponse à celle du vrai serveur : rien dans le protocole ne permet au client de vérifier l’identité du serveur ni l’intégrité du contenu reçu.
La détection de version elle-même repose sur du scraping fragile : le client parse la page d’accueil du site à la recherche d’une ligne contenant à la fois un nom d’hôte de mirroir et l’extension .zip, sans structure ni validation. N’importe quel changement de layout fait échouer la détection silencieusement.
Le plus frappant n’est pas le bug en lui-même, mais son historique. La pull request qui a introduit cette fonctionnalité, en 2016, porte la trace de son propre défaut dès sa description :
“there isn’t any proper handling of HTTP or SSL within Blitz3D”
L’auteur savait, au moment même où il l’écrivait, que l’implémentation ne gérait pas correctement HTTP ni SSL, sous pression pour livrer la release du lendemain. La feature a été mergée telle quelle, désactivée par défaut. Depuis, elle a été shippée sans interruption de la v1.3.3 (octobre 2016) jusqu’à la dernière release officielle du jeu (2018), et reste à ce jour inchangée dans le dépôt public : bientôt dix ans sans fix.