BrowExt - ClickJacking

Support HackTricks

Información Básica

Esta página va a abusar de una vulnerabilidad de ClickJacking en una extensión del navegador. Si no sabes qué es ClickJacking, consulta:

Clickjacking

Las extensiones contienen el archivo manifest.json y ese archivo JSON tiene un campo web_accessible_resources. Esto es lo que dicen los documentos de Chrome:

Estos recursos estarían disponibles en una página web a través de la URL chrome-extension://[PACKAGE ID]/[PATH], que se puede generar con el extension.getURL method. Los recursos permitidos se sirven con los encabezados CORS apropiados, por lo que están disponibles a través de mecanismos como XHR.1

Los web_accessible_resources en una extensión del navegador no solo son accesibles a través de la web; también operan con los privilegios inherentes de la extensión. Esto significa que tienen la capacidad de:

  • Cambiar el estado de la extensión

  • Cargar recursos adicionales

  • Interactuar con el navegador hasta cierto punto

Sin embargo, esta característica presenta un riesgo de seguridad. Si un recurso dentro de web_accessible_resources tiene alguna funcionalidad significativa, un atacante podría potencialmente incrustar este recurso en una página web externa. Los usuarios desprevenidos que visiten esta página podrían activar inadvertidamente este recurso incrustado. Tal activación podría llevar a consecuencias no deseadas, dependiendo de los permisos y capacidades de los recursos de la extensión.

Ejemplo de PrivacyBadger

En la extensión PrivacyBadger, se identificó una vulnerabilidad relacionada con el directorio skin/ declarado como web_accessible_resources de la siguiente manera (Consulta la entrada del blog original):

"web_accessible_resources": [
"skin/*",
"icons/*"
]

Esta configuración llevó a un posible problema de seguridad. Específicamente, el archivo skin/popup.html, que se renderiza al interactuar con el ícono de PrivacyBadger en el navegador, podría ser incrustado dentro de un iframe. Esta incrustación podría ser explotada para engañar a los usuarios y hacer que hagan clic inadvertidamente en "Desactivar PrivacyBadger para este sitio web". Tal acción comprometería la privacidad del usuario al desactivar la protección de PrivacyBadger y potencialmente someter al usuario a un mayor seguimiento. Una demostración visual de esta explotación se puede ver en un ejemplo de video de ClickJacking proporcionado en https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm.

Para abordar esta vulnerabilidad, se implementó una solución sencilla: la eliminación de /skin/* de la lista de web_accessible_resources. Este cambio mitigó efectivamente el riesgo al asegurar que el contenido del directorio skin/ no pudiera ser accedido o manipulado a través de recursos accesibles por la web.

La solución fue fácil: eliminar /skin/* de los web_accessible_resources.

PoC

<!--https://blog.lizzie.io/clickjacking-privacy-badger.html-->

<style>
iframe {
width: 430px;
height: 300px;
opacity: 0.01;
float: top;
position: absolute;
}

#stuff {
float: top;
position: absolute;
}

button {
float: top;
position: absolute;
top: 168px;
left: 100px;
}

</style>

<div id="stuff">
<h1>
Click the button
</h1>
<button id="button">
click me
</button>
</div>

<iframe src="chrome-extension://ablpimhddhnaldgkfbpafchflffallca/skin/popup.html">
</iframe>

Ejemplo de Metamask

Una entrada de blog sobre un ClickJacking en metamask se puede encontrar aquí. En este caso, Metamask solucionó la vulnerabilidad verificando que el protocolo utilizado para acceder a él era https: o http: (no chrome: por ejemplo):

Otro ClickJacking solucionado en la extensión de Metamask fue que los usuarios podían Click para agregar a la lista blanca cuando una página era sospechosa de ser phishing debido a “web_accessible_resources”: [“inpage.js”, “phishing.html”]. Como esa página era vulnerable a Clickjacking, un atacante podría abusar de ella mostrando algo normal para hacer que la víctima hiciera clic para agregarla a la lista blanca sin darse cuenta, y luego volver a la página de phishing que será agregada a la lista blanca.

Ejemplo de Steam Inventory Helper

Consulta la siguiente página para ver cómo un XSS en una extensión de navegador se encadenó con una vulnerabilidad de ClickJacking:

BrowExt - XSS Example

Referencias

Apoya a HackTricks

Last updated