- Le sandbox V8 est un sandbox léger, in-process, pour le moteur V8
- Il a désormais dépassé le stade expérimental et est inclus dans le Vulnerability Reward Program (VRP) de Chrome
- Certains problèmes de sécurité restent à résoudre, et Chrome 123 peut encore être considéré comme une version « bêta » du sandbox
Motivation
- La sûreté mémoire reste un enjeu majeur : tous les exploits Chrome découverts au cours des trois dernières années ont commencé par une vulnérabilité de corruption mémoire dans V8
- 60 % de ces vulnérabilités provenaient de V8, mais la plupart n’étaient pas des bogues de corruption mémoire « classiques », plutôt des problèmes logiques subtils
- La plupart des solutions actuelles de sûreté mémoire ne s’appliquent pas à V8, et ni une migration vers un langage memory-safe comme Rust ni des fonctionnalités matérielles comme le memory tagging n’aident à relever les défis de sécurité de V8
Sandbox V8 (heap)
- L’idée de base du sandbox est d’isoler la mémoire du heap de V8 afin d’empêcher qu’une corruption mémoire ne se « propage » à d’autres parties du processus
- Il pourrait être implémenté avec un support matériel, mais faute de fonctionnalités matérielles adaptées à ce jour, il est mis en œuvre en logiciel
- Le sandbox remplace les types de données pouvant accéder à toute mémoire externe par des alternatives « compatibles sandbox »
- Seul le heap V8 à l’intérieur du sandbox se trouve dans le sandbox, ce qui est similaire au modèle de sandboxing de WebAssembly
Performances
- Le principal avantage de cette approche par sandbox est qu’elle a fondamentalement un faible coût
- Le surcoût du sandbox provient surtout des indirections via des tables de pointeurs vers les objets externes, et il est actuellement inférieur à 1 % sur les charges de travail typiques
Tests
- La testabilité de la frontière de sécurité signifie la capacité à vérifier manuellement et automatiquement que les garanties de sécurité sont bien maintenues en pratique
- Le sandbox V8 remplit toutes les conditions : un modèle d’attaquant clair, un moyen d’émuler cet attaquant et une méthode pour déterminer automatiquement quand la frontière de sécurité échoue
Utilisation
- Le sandbox V8 doit être activé/désactivé au moment de la compilation à l’aide du build flag
v8_enable_sandbox.
- Il n’est disponible que sur les systèmes 64 bits et nécessite actuellement la réservation de 1 téraoctet d’espace d’adressage virtuel.
- Le sandbox V8 est déjà activé par défaut depuis environ deux ans dans Chrome 64 bits sur Android, ChromeOS, Linux, macOS et Windows.
Conclusion
- Le sandbox V8 est un nouveau mécanisme de sécurité conçu pour empêcher qu’une corruption mémoire dans V8 n’affecte d’autres zones mémoire du processus
- Les technologies actuelles de sûreté mémoire s’appliquent difficilement aux moteurs JavaScript optimisés, mais elles sont efficaces pour protéger la surface d’attaque du sandbox V8
- Le sandbox constitue une étape essentielle vers une meilleure sûreté mémoire
L’avis de GN⁺
- Le sandbox V8 est une réponse moderne aux vulnérabilités de corruption mémoire, en apportant une solution à des problèmes que les techniques classiques de sûreté mémoire ne parviennent pas à résoudre
- Compte tenu de la complexité des moteurs JavaScript, ce sandbox joue un rôle important pour renforcer la frontière de sécurité et améliorer la sûreté mémoire
- Le faible surcoût en performances peut le rendre attractif pour les développeurs, ce qui devrait favoriser son adoption à grande échelle
- Cependant, la technologie de sandbox peut aussi introduire de nouvelles vulnérabilités de sécurité, qui devront être gérées par une surveillance et des tests continus
- Une implémentation efficace du sandbox joue un rôle crucial pour empêcher qu’un attaquant ne propage une corruption mémoire à d’autres parties du système, contribuant ainsi au renforcement de la sécurité du Web
Aucun commentaire pour le moment.