Boutique en ligne, autopsie d'une faille de sécurité

Actuellement, je travail pour une boutique de vente en ligne réservée aux professionnels mais qui, depuis peu, s'ouvre au tout venant. Dans ce billet, pour des raisons évidentes de sécurité, je ne donnerais ni de nom, ni de plus grosses descriptions (Et les captures seront modifiés) : cela afin que vous ne profitiez pas de la faille avant que je la (les) corrige(s)...
Jusqu'à ce que tout soit sécurisé, appelons les Boutique X.

I Première faille de sécurité : Calcul du prix via JavaScript :

Boutique X gère un très grand nombre de produits tous modifiables (Désolé, je ne peux rentrer dans le détails.). Chaque panier doit être calculé en temps réel... C'est à ce niveau qu'intervient JavaScript.

Problème : Le calcul s'effectuant côté client, il est donc facile de le modifier pour changer le prix de façon avantageuse...
Solution : Effectuer le calcul côté serveur (php).

II. Deuxième faille de sécurité : register_global = On :

Autre faille de sécurité : les variables passées via le formulaire grâce à la méthode post (method="post") ne sont pas récupérée via $_POST['variable'] mais par $variable.

Problème : On peux modifier certaines variables en les passant par l'url...
Rustine : Vérifiant que le tableaux $_GET contient uniquement les 2 champs que l'on utilise...

Par soucis de rigueur, et partant du constat : "Qui peux le plus, peux le moins" ; je conseils à tout le mode de travailler sous register_global = Off, plus contraignant... Ce qui marche à Off marche à On mais la réciproque est fausse !!!

III Coup de grâce : WebDeveloper :

WebDeveloppeur est une extension pour FireFox permettant de modifier une page web directement via ce navigateur... J'en parlais déjà et je l'utilise tout le temps pour débuguer mes sites (Essayez là, c'est trop pratique, mais là n'est pas la question).

Le problème vient du fait que le prix calculé précédement (Voir paragraphe I) passe de pages en pages via le formulaire et ce avec d'autres données sensibles... C'est en soit une énorme faille de sécurité que WebDeveloper rend accessible au premier pirate venu...


Vous pouvez voir en arrière plan, une partie des champs "hidden" rendus visible... Il y en a une pleine page !!!

Outre le fait de permettre de rendre les champs hidden (<input type=hidden) visibles, WebDeveloper permet aussi de les modifier comme le montre la capture ci-dessous, où le prix est devenu "LLaumgui Euro". Bien sûr mettre LLaumgui ne sert qu'à signer mon acte, mais modifier le prix pour un autre plus bas, là c'est avantageux !!!


Désolé, là encore, j'ai presque tout masqué ce qui pouvais permettre d'identifier l'entreprise...

Solution : Utiliser les sessions et recalculer le tout avant de passer par le système de payement...

1 réactions

  • De S@M De S@M - 14/10/2007, 18:08 #1

    Vi, 'register_global = On', et surtout calcul du prix en js.... la, c'est vraiment de l'abus ! Y en a qui on peur de rien ! lol

    Donnez moi l'adresse du développeur que je lui mette des coups de fouets !

Attribution - Partage dans les Mêmes Conditions 4.0 International