É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 648

  • Valeur 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