Sí , en el pasado hubo muchas vulnerabilidades que solo se basaban en códigos HTML y CSS maliciosos.
Tienes razón en que analizar un lenguaje complejo y completo es potencialmente más propenso a errores, lo que le brinda al atacante más herramientas para crear un exploit.
Sin embargo, hay muchas maneras diferentes en que la implementación del analizador CSS u otros módulos involucrados en el procesamiento del código puede ser vulnerable.
Como ejemplo , toma CVE-2010-2752
- fuente CSS de Mozilla Firefox -Vulnerabilidad de ejecución remota de código . Esta vulnerabilidad se podría desencadenar simplemente creando un sitio web con reglas CSS font-face
especialmente diseñadas y, sin embargo, tenía el potencial de comprometer al host.
El código defectuoso se encontraba en el analizador CSS de Mozilla y tenía un error trivial: al asignar memoria para almacenar las referencias font-face
, se usaba un entero de 16 bits para el índice. Sin embargo, cuando se completaron los valores reales, en su lugar se usó un entero de 32 bits. Esta incoherencia llevó a un desbordamiento de enteros cuando una hoja de estilo proporcionó un número excesivo de referencias de fuentes externas. En consecuencia, un atacante podría escribir en ubicaciones de memoria inesperadas y convertir el desbordamiento de índice en una vulnerabilidad de ejecución de código arbitrario .
Dado que la mayoría del núcleo de Mozilla está escrito en C ++, no hay una protección contra desbordamiento integrada y los desarrolladores se encargan de manejar la memoria de forma segura. Un navegador escrito en Python probablemente enfrentaría diferentes tipos de vulnerabilidades (y también sería muy lento).