Échec logique de bas niveau
Flawed enforcement of business rules
Description du laboratoire
Ce laboratoire contient un défaut logique dans le processus d’achat. En raison d’une mauvaise application des règles métier, il est possible de manipuler le calcul du panier afin d’acheter une « Lightweight l33t leather jacket » à un prix non prévu.
Identifiants fournis :
Utilisateur : wiener
Mot de passe : peter
Analyse du comportement
Lors de l’ajout d’un produit au panier, la requête suivante est utilisée :
Ce paramètre peut être envoyé un grand nombre de fois sans qu’il y ait de contrôle strict sur la valeur cumulée.

La requête est envoyée à Intruder avec un null payload configuré en mode Continue indefinitely, et un maximum de 1 requête concurrente.

Après suffisamment d’itérations, le prix total du panier devient négatif.

Cause du problème
La vulnérabilité provient d’un overflow d’entier signé. L’application utilise un entier signé sur 32 bits, dont les limites sont :
Valeur minimale :
-2 147 483 648Valeur maximale :
2 147 483 647
Lorsque le total dépasse la valeur maximale autorisée, il rebascule dans les valeurs négatives à cause du dépassement arithmétique.
Contrôles insuffisants
Même si l’application empêche le paiement lorsque le total est inférieur à 0, aucune vérification correcte n’est faite pendant les calculs intermédiaires.
Cela permet d’ajuster le panier jusqu’à obtenir un montant final positif mais très faible.

Ajustement du calcul final
Pour obtenir un montant supérieur à 0 et inférieur à 100 dollars, le calcul suivant est effectué :
Prix de la veste : 1337 $
Valeur nécessaire pour provoquer l’overflow : 14 018 329
Calcul :
Envoi par lots (quantity = 99) :
Composition finale du panier
Pour obtenir un total valide après l’overflow :
32 123 vestes à 1337 $
21 Baby minding shoes à 60,79 $
Total final : 54,63 $
Mis à jour