Exfiltration de données sensibles via la pollution de prototype côté serveur
Exfiltrating sensitive data via server-side prototype pollution
Description du laboratoire
Ce laboratoire repose sur Node.js et le framework Express. L’application est vulnérable à une pollution de prototype côté serveur car elle fusionne de manière non sécurisée des données contrôlées par l’utilisateur dans des objets JavaScript côté serveur.
À cause de cette configuration, il est possible de polluer Object.prototype afin d’injecter et d’exécuter des commandes système arbitraires.
Objectifs du laboratoire :
Identifier un point de pollution de prototype permettant d’ajouter des propriétés arbitraires à
Object.prototype.Trouver un gadget exploitable pour injecter et exécuter des commandes système.
Déclencher l’exécution d’une commande qui divulgue le contenu du répertoire personnel de Carlos (
/home/carlos) vers un serveur Burp Collaborator public.Exfiltrer le contenu d’un fichier secret présent dans ce répertoire et soumettre la valeur obtenue.
Un accès administrateur est déjà disponible. Connexion possible avec :
Identifiants :
wiener:peter

Point d’entrée vulnérable
La fonctionnalité de modification de l’adresse est vulnérable à la pollution de prototype.
Requête envoyée :

Confirmation de la pollution
La réponse du serveur confirme la pollution de Object.prototype et l’élévation de privilèges :
Fonctionnalité exploitable côté admin

Dans le panneau d’administration, une option Run maintenance est disponible. Elle envoie la requête suivante :
Cette fonctionnalité utilise child_process.execSync() côté serveur. Cette fonction accepte notamment les paramètres shell et input, ce qui constitue un gadget exploitable via la pollution de prototype.

Injection de commandes via execSync
En polluant __proto__, il est possible de contrôler les options passées à execSync :

Lors de l’exécution du job de maintenance, celui-ci échoue côté application, mais une requête est bien envoyée au Burp Collaborator, confirmant l’exécution de commande.

Exfiltration du fichier secret
Pour exfiltrer le contenu du fichier secret de Carlos, la charge utile suivante est utilisée :
OU:
Requête complète :
Résultat
Le serveur Burp Collaborator reçoit une requête contenant la valeur du fichier secret :

Mis à jour