Introduction
Le projet Scratch a connu de nombreuses vulnérabilités liées aux fichiers SVG. L'origine de ces problèmes réside dans le fait que Scratch analyse le contenu généré par les utilisateurs, qui peut inclure des éléments dangereux, et l'insère dans le document principal pour diverses opérations.
Contexte Technique
Scratch a développé une infrastructure complexe pour parser les SVG et supprimer les parties dangereuses. Cependant, malgré ces efforts, de nouvelles vulnérabilités ont été découvertes régulièrement. Parmi ces vulnérabilités, on peut citer les attaques XSS via les balises , les fuites HTTP via les éléments et les règles CSS @import, ainsi que les vulnérabilités liées à la bibliothèque Paper.js.
Les exemples de code suivants illustrent certaines de ces vulnérabilités :
Exemple de code pour une attaque XSS via une balise :
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle cx="250" cy="250" r="50" fill="red" />
<script type="text/javascript"><![CDATA[
alert('from the svg!')
]]></script>
</svg>
Exemple de code pour une fuite HTTP via un élément :
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="https://example.com/ping"/>
</svg>
Analyse et Implications
Ces vulnérabilités ont des implications importantes pour la sécurité des utilisateurs de Scratch. Les attaques XSS peuvent permettre à un attaquant d'exécuter du code malveillant sur le compte d'un utilisateur, tandis que les fuites HTTP peuvent révéler des informations sensibles sur l'utilisateur.
Les correctifs apportés pour résoudre ces vulnérabilités ont souvent été insuffisants ou ont introduit de nouvelles vulnérabilités. Par exemple, l'utilisation d'une expression régulière pour supprimer les balises a été contournée en utilisant des majuscules pour les balises.
Perspective
Il est clair que la sanitization des SVG est un défi important pour la sécurité de Scratch. Les vulnérabilités régulièrement découvertes montrent que les correctifs actuels ne sont pas suffisants pour garantir la sécurité des utilisateurs.
Il est nécessaire de développer des solutions plus robustes pour la sanitization des SVG, en prenant en compte les complexités du langage SVG et les différentes manières dont les attaquants peuvent essayer de contourner les mesures de sécurité. Cela peut inclure l'utilisation de bibliothèques de sanitization plus avancées, la mise en place de tests de sécurité plus rigoureux et la formation des développeurs pour qu'ils soient conscients des risques de sécurité liés aux SVG.