Aunque JavaScript y HTML como lenguajes no tienen uso después de liberarse por diseño (debido a la falta de acceso a memoria de bajo nivel), todavía pueden usarse para explotar UAF en los motores que interpretan y ejecutan JavaScript / HTML. .
Así es como se encuentran las vulnerabilidades de UAF:
- Proporcione una entrada que haga que la aplicación se bloquee o se comporte mal. P.ej. por fuzzing o una suposición basada en el análisis del programa.
- Reduzca la entrada a un ejemplo mínimo que cause el bloqueo.
- Investigue por qué la muestra desencadena un bloqueo. P.ej. siguiendo un depurador, o estudiando el código fuente. Los ejemplos más destacados de aplicaciones que interpretan JavaScript son los navegadores web, y los más populares son de código abierto ( ChakraCore para Microsoft Edge . < a href="https://developers.google.com/v8/"> V8 / Chromium , Firefox ) (todos utilizan C ++), lo que facilita este paso.
Para comenzar, puedes estudiar informes de errores públicos (por ejemplo, errores de gravedad media / alta / crítica de Chrome ( pautas de gravedad ), ( pautas de gravedad ), cualquier CVE). JavaScript es un lenguaje altamente dinámico, a veces puede hacer cosas que los diseñadores / implementadores de una determinada característica no pretendieron o esperaron, lo que generó vulnerabilidades de seguridad (por ejemplo, un serializador JSON que no tuvo en cuenta el hecho de que las devoluciones de llamada personalizadas pueden modificar la entrada ). La mayoría de los errores no están en el motor de JavaScript en sí, sino en la implementación de las API disponibles (por ejemplo, DOM no es parte de JavaScript).
Si está disponible, use AddressSanitizer porque facilita la detección y clasificación del tipo de error de memoria. Puede compilarlo desde la fuente o usar los binarios precompilados (ver, por ejemplo, Firefox o Chrome ).
Nota: Encontrar el UAF es el paso más fácil, en realidad explotarlo es mucho más difícil. Los programas modernos utilizan todo tipo de medidas preventivas para contrarrestar las vulnerabilidades (por ejemplo, ASLR , pilas no ejecutables, protectores de pila / pila, < a href="https://wiki.ubuntu.com/Security/Features"> y más ).