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à là 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...





Commentaires
par S@M
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 !