• Votre panier est vide.

  • COMPTE

Pollution de classe – Une variante de pollution prototype affectant Python


Certains articles de veille peuvent faire l'objet de traduction automatique.


Un chercheur en sécurité a découvert une grave vulnérabilité de pollution prototype dans le langage de programmation Python. L’exploitation de la faille entraîne des plantages de l’application, ce qui peut également entraîner d’autres impacts.

Variante de pollution prototype trouvée en Python

Un chercheur indépendant en sécurité, Abdulraheem Khaled, a récemment partagé des détails sur un prototype de vulnérabilité à la pollution affectant Python.

Pollution prototype est une vulnérabilité commun au langage de programmation JavaScript, permettant aux attaquants de se mêler des prototypes existants. Un attaquant peut injecter des valeurs dans le prototype d’un objet de base (« polluant » le prototype) pour perturber les autres objets, compromettant finalement l’application. De tels exploits peuvent entraîner divers impacts, du déni de service à l’exécution de code à distance.

Dans son article de blog, Khaled a expliqué que la plupart des vulnérabilités de pollution des prototypes sont souvent signalées pour les applications JavaScript. Et d’autres langages basés sur des classes, tels que Python, semblent immunisés contre de telles vulnérabilités.

Cependant, Khaled a expliqué comment il pouvait observer des prototypes de variantes de pollution en Python, où la faille existe généralement dans pollué l’attribut modifiable « _class_» dans les objets.

Comme indiqué dans son message,

Du point de vue d’un attaquant, nous nous intéressons davantage aux attributs que nous pouvons remplacer/écraser pour pouvoir exploiter cette vulnérabilité plutôt qu’aux méthodes magiques. Comme notre entrée sera toujours traitée comme des données (str, int, etc.) et non comme du code réel à évaluer. Par conséquent, si nous essayons d’écraser l’une des méthodes magiques, cela entraînera le blocage de l’application lors de la tentative d’invocation de cette méthode, car des données telles que des chaînes ne peuvent pas être exécutées.

Brièvement, pour démontrer la faille qu’il a appelée « pollution de classe », le chercheur a créé une instance de Employee class – une classe vide, puis a tenté de la polluer de manière à polluer également la classe parent. Pour cela, il a fixé le __qualname__ attribut à l’intérieur __class__ à une chaîne et ensuite pollué le __base__ attribut. Finalement, cela lui a permis de polluer le parent Employee classer. C’est ainsi qu’un adversaire peut polluer n’importe quelle classe mère.

Le chercheur a expliqué que Python applique certaines restrictions sur la modification du object attributs de classe – la classe parent de toutes les classes. Par conséquent, un attaquant doit procéder en conséquence, en exploitant les fonctions de fusion non sécurisées, pour parvenir à une pollution de classe dans Python.

Et ensuite ?

Pour l’instant, le chercheur a confirmé n’avoir trouvé aucun exploit complet avec un impact autre que le DoS. Néanmoins, il pense qu’un adversaire peut tirer parti de la faille pour obtenir divers autres résultats, tels que l’écrasement de la clé secrète dans l’application Web Flask pour les sessions de signature ou le détournement de chemin.

Faites-nous part de vos réflexions dans les commentaires.

Voir aussi :

janvier 26, 2023

Poster un commentaire

Please Login to comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Culte du code | 2015-2022  (Vecteurs par Freepik, Parallax par fullvector)