# SOME - Same Origin Method Execution {{#include ../../banners/hacktricks-training.md}} ## Same Origin Method Execution Habrá ocasiones en las que podrás ejecutar algo de javascript limitado en una página. Por ejemplo, en el caso en que puedes [**controlar un valor de callback que será ejecutado**](./#javascript-function). En esos casos, una de las mejores cosas que podrías hacer es **acceder al DOM para llamar a cualquier** acción sensible que puedas encontrar allí (como hacer clic en un botón). Sin embargo, generalmente encontrarás esta vulnerabilidad en **pequeños endpoints sin nada interesante en el DOM**. En esos escenarios, este ataque será muy útil, porque su objetivo es poder **abusar de la ejecución limitada de JS dentro de un DOM desde una página diferente del mismo dominio** con acciones mucho más interesantes. Básicamente, el flujo del ataque es el siguiente: - Encontrar un **callback que puedas abusar** (potencialmente limitado a \[\w\\.\_]). - Si no está limitado y puedes ejecutar cualquier JS, podrías simplemente abusar de esto como un XSS regular. - Hacer que la **víctima abra una página** controlada por el **atacante**. - La **página se abrirá sola** en una **ventana diferente** (la nueva ventana tendrá el objeto **`opener`** referenciando a la inicial). - La **página inicial** cargará la **página** donde se encuentra el **DOM interesante**. - La **segunda página** cargará la **página vulnerable abusando del callback** y usando el objeto **`opener`** para **acceder y ejecutar alguna acción en la página inicial** (que ahora contiene el DOM interesante). > [!CAUTION] > Ten en cuenta que incluso si la página inicial accede a una nueva URL después de haber creado la segunda página, el **objeto `opener` de la segunda página sigue siendo una referencia válida a la primera página en el nuevo DOM**. > > Además, para que la segunda página pueda usar el objeto opener **ambas páginas deben estar en el mismo origen**. Esta es la razón por la cual, para abusar de esta vulnerabilidad, necesitas encontrar algún tipo de **XSS en el mismo origen**. ### Exploitation - Puedes usar este formulario para **generar un PoC** para explotar este tipo de vulnerabilidad: [https://www.someattack.com/Playground/SOMEGenerator](https://www.someattack.com/Playground/SOMEGenerator) - Para encontrar una ruta DOM a un elemento HTML con un clic, puedes usar esta extensión de navegador: [https://www.someattack.com/Playground/targeting_tool](https://www.someattack.com/Playground/targeting_tool) ### Example - Puedes encontrar un ejemplo vulnerable en [https://www.someattack.com/Playground/](https://www.someattack.com/Playground/) - Ten en cuenta que en este ejemplo el servidor está **generando código javascript** y **agregándolo** al HTML basado en el **contenido del parámetro de callback:** ``. Por eso en este ejemplo no necesitas indicar el uso de `opener` explícitamente. - También revisa este writeup de CTF: [https://ctftime.org/writeup/36068](https://ctftime.org/writeup/36068) ## References - [https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/](https://conference.hitb.org/hitbsecconf2017ams/sessions/everybody-wants-some-advance-same-origin-method-execution/) {{#include ../../banners/hacktricks-training.md}}