Client Side Prototype Pollution
Découverte à l'aide d'outils automatiques
Les outils https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap et https://github.com/kosmosec/proto-find peuvent être utilisés pour trouver des vulnérabilités de pollution de prototype.
De plus, vous pourriez également utiliser l'extension de navigateur PPScan pour analyser automatiquement les pages auxquelles vous accédez à la recherche de vulnérabilités de pollution de prototype.
Débogage de l'utilisation d'une propriété
Trouver la cause profonde de la pollution du prototype
Une fois qu'une vulnérabilité de pollution du prototype a été identifiée par l'un des outils, et si le code n'est pas trop complexe, vous pouvez trouver la vulnérabilité en recherchant des mots-clés tels que location.hash
, decodeURIComponent
, ou location.search
dans les Outils de développement Chrome. Cette approche vous permet de localiser la section vulnérable du code JavaScript.
Pour des bases de code plus grandes et plus complexes, une méthode simple pour découvrir le code vulnérable implique les étapes suivantes :
Utilisez un outil pour identifier une vulnérabilité et obtenir une charge utile conçue pour définir une propriété dans le constructeur. Un exemple fourni par ppmap pourrait ressembler à ceci :
constructor[prototype][ppmap]=reserved
.Définissez un point d'arrêt à la première ligne de code JavaScript qui s'exécutera sur la page. Actualisez la page avec la charge utile, mettant en pause l'exécution à ce point d'arrêt.
Pendant que l'exécution JavaScript est en pause, exécutez le script suivant dans la console JS. Ce script signalera quand la propriété 'ppmap' est créée, aidant à localiser son origine :
Naviguez de nouveau vers l'onglet Sources et sélectionnez "Reprendre l'exécution du script". Le JavaScript continuera à s'exécuter, et la propriété 'ppmap' sera polluée comme prévu. L'utilisation de l'extrait de code fourni facilite l'identification de l'emplacement exact où la propriété 'ppmap' est polluée. En examinant la Pile d'appels, différents empilements où la pollution s'est produite peuvent être observés.
Lorsqu'il s'agit de décider quel empilement enquêter, il est souvent utile de cibler les empilements associés aux fichiers de bibliothèque JavaScript, car la pollution de prototype se produit fréquemment au sein de ces bibliothèques. Identifiez l'empilement pertinent en examinant son lien avec les fichiers de bibliothèque (visible sur le côté droit, similaire à une image fournie à titre indicatif). Dans les scénarios avec plusieurs empilements, comme ceux des lignes 4 et 6, le choix logique est l'empilement de la ligne 4, car il représente l'occurrence initiale de la pollution et donc la cause première de la vulnérabilité. En cliquant sur l'empilement, vous serez dirigé vers le code vulnérable.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1*S8NBOl1a7f1zhJxlh-6g4w.jpeg&width=768&dpr=4&quality=100&sign=7de3adb9&sv=1)
Recherche de Gadgets de Script
Le gadget est le code qui sera exploité une fois qu'une vulnérabilité PP est découverte.
Si l'application est simple, nous pouvons rechercher des mots-clés comme srcdoc/innerHTML/iframe/createElement
et examiner le code source pour vérifier s'il conduit à l'exécution de JavaScript. Parfois, les techniques mentionnées peuvent ne pas trouver de gadgets du tout. Dans ce cas, une simple revue du code source révèle quelques bons gadgets comme dans l'exemple ci-dessous.
Exemple de recherche de gadget PP dans le code de la bibliothèque Mithil
Consultez cet article : https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
Recompilation des charges utiles pour les bibliothèques vulnérables
Contournement des filtres HTML via PP
Cette recherche montre les gadgets PP à utiliser pour contourner les sanitizations fournies par certaines bibliothèques de filtres HTML :
sanitize-html
![https://research.securitum.com/wp-content/uploads/sites/2/2020/08/image-7.png](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-e872c3391790adad061d0942fc97832c050b1c22%252Fimage%2520%28668%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=33d754ef&sv=1)
dompurify
![https://research.securitum.com/wp-content/uploads/sites/2/2020/08/image-9.png](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-f3845061c5174027e9e73b747edaee945ab67a76%252Fimage%2520%28669%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=504f7926&sv=1)
Closure
Références
Last updated