Xevia AccueilBlogActualitésA propos

Les services publics ou comment provoquer un DoS en Javascript

C'est le genre d'informations qui démangent, on a envie de les publier mais du fait de leur trop grande importance, on doit les garder pour soi afin d'éviter le désordre ... et pour cause, il est ici question de mettre hors-service le site d'un service public dont je tairai le nom, un service de transports en commun (des bus pour être plus précis). On bloque le site et plus personne n'a accès aux horaires de bus. Bon, bien sûr, il faut vraiment être anormal pour s'amuser à s'attaquer à ce genre de sites mais si j'en fais un post aujourd'hui c'est à cause de la facilité déconcertante qu'on a à effectuer cette attaque.

Sur une page du site en question, on nous propose de nous déplacer sur la carte du réseau de transports. Pour cela on clique sur les "flèches directionnelles" ou on peut zoomer sur l'image. Dès qu'on clique sur l'un des boutons, la page est actualisée ... en y regardant de plus près, j'ai remarqué que la carte affichée était une image générée par un script s'exécutant côté serveur. Les paramètres que demande ce script sont les coordonnées du point en haut à gauche de l'image, la taille de l'image et des informations sur l'échelle (servant à traiter le zoom). Ces paramètres sont transmis au serveur par requête HTTP GET, autrement dit dans l'url de l'image. Il suffit de donner des valeurs énormes pour la hauteur et la largeur de l'image pour monopoliser la charge CPU du serveur — qui est sûrement aussi vieux que le site, donc ne doit pouvoir traiter pleinement qu'un seul thread à la fois. Comment automatiser tout ça ? Avec Javascript et AJAX. Et voilà, cinq minutes après, sept lignes et deux cent quarante sept octets plus tard, j'ai mon (tout) petit script qui si petit soit-il, va paralyser entièrement le site ... et faire le malheur des habitués — déjà malheureux de prendre cette "compagnie" de bus — qui vont devoir se rendre jusqu'à leur arrêt pour lire les horaires !

Remarque : d'un côté c'est pas plus mal, combien de personnes se sont faites avoir parce qu'ils ont mis à jour leurs horaires dans les arrêts mais pas sur le site ...