Contexte et découverte
Un overlay de chat Twitch, développé pour OBS, injecte chaque message du chat directement dans le DOM du navigateur intégré sous forme de HTML brut. L’absence de désinfection crée une faille XSS classique, permettant à un spectateur d’exécuter du JavaScript dans le processus CEF d’OBS. L’auteur a repéré ce comportement sur une capture d’écran montrant le code source de l’overlay, où la fonction innerHTML était utilisée sans filtrage.
Mécanisme d’exploitation
OBS version 32.2.2 embarque Chromium 127.0.6533.120 et le moteur V8 12.7.224.18. Le projet OBS initialise le navigateur avec le paramètre no_sandbox = true, désactivant la sandbox habituelle du rendu Chromium :
settings.no_sandbox = true;
settings.windowless_rendering_enabled = true;Cette configuration supprime la barrière qui sépare le code JavaScript du système d’exploitation. L’exploitation repose ensuite sur la vulnérabilité CVE‑2024‑7971, une confusion de types dans V8 affectant les versions antérieures à 128.0.6613.84. Cette faille, déjà documentée comme utilisée par le groupe nord‑coréen « Citrine Sleet », permet à du code JavaScript d’obtenir un accès mémoire non autorisé, puis de déclencher une exécution native dans le processus du navigateur.
Analyse des failles et implications
Le chainage d’attaque se compose de trois maillons : (1) XSS via le chat overlay, (2) exploitation du bug V8 pour franchir la protection mémoire du moteur, (3) absence de sandbox OBS qui rend inutile toute élévation supplémentaire. Dans un navigateur standard, la même vulnérabilité resterait confinée au sandbox du renderer, mais OBS ne crée pas ce confinement, ce qui conduit à une exécution de code arbitraire sur la machine du streamer. Aucun réglage supplémentaire n’est requis : l’overlay est chargé avec les paramètres par défaut, le WebSocket d’OBS reste désactivé, et aucune interaction utilisateur n’est nécessaire après le chargement de la page.
Le rapport de Microsoft indique que l’exploitation de CVE‑2024‑7971 dans Chrome nécessite un second vecteur pour sortir du sandbox. OBS, en désactivant ce sandbox, fournit implicitement ce second vecteur, transformant une simple injection JavaScript en compromission totale du poste.
Recommandations techniques
Les développeurs d’overlays doivent impérativement sanitiser tout contenu provenant du chat, en utilisant des bibliothèques de filtrage ou en affichant le texte via textContent plutôt que innerHTML. Les mainteneurs d’OBS devraient envisager de réactiver la sandbox CEF par défaut ou d’ajouter une option de configuration sécurisée. Enfin, les streamers sont encouragés à vérifier la version du moteur Chromium intégré et à appliquer les mises à jour d’OBS dès qu’elles incluent un moteur V8 corrigé, afin de réduire la surface d’attaque.