Étapes de la reproduction
Les versions de jQuery antérieures à la 3.4.0 contiennent cette vulnérabilité de niveau moyen, appelée Pollution de Prototype. Si un objet source non assaini contient une propriété __proto_ énumérable (énumérable signifie qu'elle peut être utilisée dans une boucle for...next), le code malveillant a accès à l'objet natif Object.prototype. Avec cet accès, l'attaquant peut étendre cet objet fondamental de manière à ce que tous les objets Javascript en héritent, introduisant ainsi de nombreux vecteurs d'attaque possibles. L'article de blog sur la version 3.4.0 de jQuery contient des explications supplémentaires qui valent la peine d'être lues.
Aborder la question
Les clients devraient mettre à jour vers jQuery 3.4.0 immédiatement et toujours s'assurer que leur programmation personnalisée assainit les objets sources dans le but de prévenir la vulnérabilité de la pollution par les prototypes. Pour les clients incapables de migrer vers jQuery 3, HeroDevs fournit un support sans fin pour jQuery 1 et 2 avec des correctifs en place.
Apprentissage et prévention
Outre l'assainissement des objets, de nombreuses pratiques permettent d'éviter le problème, de l'utilisation d'objets immuables à la liste blanche des propriétés, en passant par l'utilisation de Object.create(null) pour créer un objet sans prototype. Notez que cette liste n'est pas exhaustive et que les développeurs jQuery doivent connaître les pratiques de programmation sûres afin de réduire le risque de ce type d'exploit.
Conclusion
HeroDevs jQuery Never-Ending Support fournit des versions de jQuery 1 ainsi que jQuery 2 avec des correctifs en place pour corriger la faille de sécurité potentielle décrite par CVE-2019-11358. Pour rester informé des mises à jour de sécurité comme celles-ci, contactez-nous dès aujourd'hui pour devenir client.
Ressources
- NIST CVE-2019-11358 entrée
- jQuery 3.4.0 Release blog entry
Soyez alerté chaque fois qu'une nouvelle vulnérabilité est corrigée dans les logiciels open source que nous soutenons.