BrowExt - permissions & host_permissions

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

permissions

Los permisos se definen en el archivo manifest.json de la extensión utilizando la propiedad permissions y permiten acceder a casi cualquier cosa a la que un navegador pueda acceder (Cookies o Almacenamiento Físico):

El manifiesto anterior declara que la extensión requiere el permiso storage. Esto significa que puede utilizar la API de almacenamiento para almacenar sus datos de forma persistente. A diferencia de las cookies o las APIs de localStorage que dan a los usuarios cierto nivel de control, el almacenamiento de la extensión normalmente solo se puede borrar desinstalando la extensión.

Una extensión solicitará los permisos indicados en su archivo manifest.json y después de instalar la extensión, siempre puedes verificar sus permisos en tu navegador, como se muestra en esta imagen:

Puedes encontrar la lista completa de permisos que una Extensión del Navegador Chromium puede solicitar aquí y una lista completa para extensiones de Firefox aquí.

host_permissions

El ajuste opcional pero poderoso host_permissions indica con qué hosts la extensión podrá interactuar a través de APIs como cookies, webRequest y tabs.

Los siguientes host_permissions básicamente permiten todo en la web:

"host_permissions": [
"*://*/*"
]

// Or:
"host_permissions": [
"http://*/*",
"https://*/*"
]

// Or:
"host_permissions": [
"<all_urls>"
]

Estos son los hosts a los que la extensión del navegador puede acceder libremente. Esto se debe a que cuando una extensión del navegador llama a fetch("https://gmail.com/") no está restringida por CORS.

Abusando de permissions y host_permissions

Pestañas

Además, host_permissions también desbloquean la funcionalidad "avanzada" de la API de pestañas. Permiten que la extensión llame a tabs.query() y no solo obtenga una lista de pestañas del navegador del usuario, sino que también sepa qué página web (dirección y título) está cargada.

No solo eso, los listeners como tabs.onUpdated también se vuelven mucho más útiles. Serán notificados cada vez que una nueva página se cargue en una pestaña.

Ejecución de scripts de contenido

Los scripts de contenido no necesariamente están escritos estáticamente en el manifiesto de la extensión. Con suficientes host_permissions, las extensiones también pueden cargarlos dinámicamente llamando tabs.executeScript() o scripting.executeScript().

Ambas APIs permiten ejecutar no solo archivos contenidos en las extensiones como scripts de contenido, sino también código arbitrario. La primera permite pasar código JavaScript como una cadena, mientras que la segunda espera una función JavaScript que es menos propensa a vulnerabilidades de inyección. Aun así, ambas APIs causarán estragos si se usan incorrectamente.

Además de las capacidades mencionadas anteriormente, los scripts de contenido podrían, por ejemplo, interceptar credenciales a medida que se ingresan en páginas web. Otra forma clásica de abusar de ellos es inyectar publicidad en cada sitio web. Agregar mensajes de estafa para abusar de la credibilidad de los sitios de noticias también es posible. Finalmente, podrían manipular sitios web bancarios para redirigir transferencias de dinero.

Privilegios implícitos

Algunos privilegios de extensión no tienen que ser declarados explícitamente. Un ejemplo es la API de pestañas: su funcionalidad básica es accesible sin ningún privilegio. Cualquier extensión puede ser notificada cuando abres y cierras pestañas, simplemente no sabrá con qué sitio web corresponden esas pestañas.

¿Suena demasiado inofensivo? La API tabs.create() es algo menos inofensiva. Se puede usar para crear una nueva pestaña, esencialmente lo mismo que window.open() que puede ser llamado por cualquier sitio web. Sin embargo, mientras window.open() está sujeto al bloqueador de ventanas emergentes, tabs.create() no lo está.

Una extensión puede crear cualquier cantidad de pestañas cuando lo desee.

Si revisas los posibles parámetros de tabs.create(), también notarás que sus capacidades van mucho más allá de lo que window.open() está autorizado a controlar. Y mientras Firefox no permite que se utilicen URIs data: con esta API, Chrome no tiene esa protección. El uso de tales URIs en el nivel superior ha sido prohibido debido a su abuso para phishing.

tabs.update() es muy similar a tabs.create() pero modificará una pestaña existente. Por lo tanto, una extensión maliciosa puede, por ejemplo, cargar arbitrariamente una página de publicidad en una de tus pestañas, y también puede activar la pestaña correspondiente.

Cámara web, geolocalización y amigos

Probablemente sepas que los sitios web pueden solicitar permisos especiales, por ejemplo, para acceder a tu cámara web (herramientas de videoconferencia) o ubicación geográfica (mapas). Son funciones con un considerable potencial de abuso, por lo que los usuarios deben confirmar cada vez que desean permitirlo.

No es así con las extensiones del navegador. Si una extensión del navegador quiere acceder a tu cámara web o micrófono, solo necesita pedir permiso una vez

Normalmente, una extensión lo hará inmediatamente después de ser instalada. Una vez que se acepta este aviso, el acceso a la cámara web es posible en cualquier momento, incluso si el usuario no está interactuando con la extensión en ese momento. Sí, un usuario solo aceptará este aviso si la extensión realmente necesita acceso a la cámara web. Pero después de eso, debe confiar en que la extensión no grabará nada en secreto.

Con acceso a tu ubicación geográfica exacta o contenido de tu portapapeles, no es necesario otorgar permiso explícitamente. Una extensión simplemente agrega geolocation o clipboard a la entrada de permisos de su manifiesto. Estos privilegios de acceso se otorgan implícitamente cuando se instala la extensión. Por lo tanto, una extensión maliciosa o comprometida con estos privilegios puede crear tu perfil de movimiento o monitorear tu portapapeles en busca de contraseñas copiadas sin que te des cuenta.

Agregar la palabra clave history a la entrada de permisos del manifiesto de la extensión otorga acceso a la API de historial. Permite recuperar todo el historial de navegación del usuario de una vez, sin esperar a que el usuario visite estos sitios web nuevamente.

El permiso bookmarks tiene un potencial de abuso similar, este permite leer todos los marcadores a través de la API de marcadores.

Permiso de almacenamiento

El almacenamiento de la extensión es simplemente una colección de clave-valor, muy similar a localStorage que cualquier sitio web podría usar. Por lo tanto, no se debe almacenar información sensible aquí.

Sin embargo, las compañías de publicidad también podrían abusar de este almacenamiento.

Más permisos

Puedes encontrar la lista completa de permisos que una Extensión de Navegador Chromium puede solicitar aquí y una lista completa para extensiones de Firefox aquí.

Prevención

La política del desarrollador de Google prohíbe explícitamente a las extensiones solicitar más privilegios de los necesarios para su funcionalidad, mitigando efectivamente las solicitudes excesivas de permisos. Un caso en el que una extensión del navegador sobrepasó este límite involucró su distribución con el navegador en sí en lugar de a través de una tienda de complementos.

Los navegadores podrían limitar aún más el uso indebido de los privilegios de extensión. Por ejemplo, las APIs tabCapture y desktopCapture de Chrome, utilizadas para grabación de pantalla, están diseñadas para minimizar el abuso. La API tabCapture solo puede activarse a través de interacción directa del usuario, como hacer clic en el ícono de la extensión, mientras que desktopCapture requiere confirmación del usuario para que la ventana sea grabada, evitando actividades de grabación clandestinas.

Sin embargo, endurecer las medidas de seguridad a menudo resulta en una disminución de la flexibilidad y la facilidad de uso de las extensiones. El permiso activeTab ilustra este compromiso. Se introdujo para eliminar la necesidad de que las extensiones soliciten privilegios de host en toda la internet, permitiendo que las extensiones accedan solo a la pestaña actual mediante activación explícita por parte del usuario. Este modelo es efectivo para extensiones que requieren acciones iniciadas por el usuario, pero es insuficiente para aquellas que requieren acciones automáticas o preventivas, comprometiendo así la conveniencia y la capacidad de respuesta inmediata.

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización