
🕵️♂️ 🔎 🕸️ Sé que has instalado estas extensiones de Chrome a continuación.
[中文文档]
crx-scouter.js puede detectar qué extensiones de Chrome estamos usando en silencio, y puede detectar si la persona frente al navegador es un hacker increíble o un programador de alto nivel 🐱. Se puede usar para honeypots, identificación humano-máquina, contramedidas de bloqueo de anuncios, verificaciones previas para exploits de extensiones, etc.
El principio de crx-scouter.js se basa en un experimento que hice con evi1m0 en 2017. Google parece querer resolver este problema, pero con poco éxito. Los detalles se pueden encontrar en el documento de principio.
Demo en: https://blog.neargle.com/crx-scouter/.
Detectar una extensión específica
const { check_one } = await import('./scouter/scouter')
check_one("aapbdbdomjkkjkaonfhkkikfgjllcleb", console.log)
La salida de console.log como se muestra a continuación:
{
"extid": "aapbdbdomjkkjkaonfhkkikfgjllcleb",
"url": "https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb",
"name": "Google Translate"
}
Por supuesto, también existe una función check_all_crx(callback) que permite detectar todas las extensiones en las huellas digitales.
✨ Demostración de detección en línea se basa en esta función, y el efecto es el siguiente:

¿Por qué podemos hacer esto?
Los desarrolladores de extensiones de Chrome deben saber que en el paquete con el sufijo crx, el archivo de manifiesto manifest.json proporciona información importante de la extensión. El archivo con sufijo crx se puede descomprimir directamente con unzip. Ejemplo de manifest.json a continuación:
{
"background": {
"scripts": [ "background.js" ]
},
"content_scripts": [ {
"all_frames": true,
"js": [ "content.js" ],
"matches": [ "http://*/*", "https://*/*", "ftp://*/*", "file:///*" ],
"run_at": "document_end"
} ],
"description": "Validates and makes JSON documents easy to read. Open source.",
"homepage_url": "https://github.com/teocci/JSONView-for-Chrome",
"icons": {
"128": "assets/images/jsonview128.png",
"16": "assets/images/jsonview16.png",
"48": "assets/images/jsonview48.png"
},
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApA/pG/flimvWWAeUelHGaQ+IJajQm01JkfK0EYOJPyfsdTkHLwD3Aw16N3zuFkmwz09DcGDT+ehww7GSpW7RpbX5kHrovsqyHXtwt+a2Sp8bYFFdpRPj3+HG6366kNkwttDHMtsDkwuKaBtrQofQe5Ud9mKu9h1FDPwc2Qql9vNtvOqKFhV+EOD0vD2QlliB6sKCteu4nYBlFEkh6pYWRaXdAYSKYdE1SYIuQzE3dk11+KCaAC1T6GffL3sia8n5brVX7Qd+XtXyBzuM54w5e3STwK7uLMhLGDIzHoTcldzWUUflfwuI86VQIFBxPbvXJKqFFFno+ZHs/S+Ra2SPmQIDAQAB",
"manifest_version": 2,
"minimum_chrome_version": "21",
"name": "JSON Viewer",
"permissions": [ "clipboardWrite", "http://*/", "contextMenus", "https://*/", "ftp://*/" ],
"short_name": "JSONViewer",
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "0.7.0",
"web_accessible_resources": [ "assets/options.html", "assets/csseditor.html", "assets/css/jsonview.css", "assets/css/jsonview-core.css", "assets/css/content_error.css", "assets/images/options.png", "assets/images/close_icon.gif", "assets/images/error.gif" ]
}
Si el usuario necesita acceder a los recursos de la extensión en la página web, debe declarar LIST en web_accessible_resources, tomemos json-view como ejemplo:
"web_accessible_resources": [ "assets/options.html", "assets/csseditor.html", "assets/css/jsonview.css", "assets/css/jsonview-core.css", "assets/css/content_error.css", "assets/images/options.png", "assets/images/close_icon.gif", "assets/images/error.gif" ]
El formato de URL para acceder a estos recursos es el siguiente:
chrome-extension://' + extension id + /assets/options.html
Desarrollé un rastreador para obtener los manifiestos de las aplicaciones de extensiones en toda la tienda de Google, categorías como las siguientes: 'ext/10-blogging', 'ext/15-by-google', 'ext/12-shopping', 'ext/11-web-development', 'ext/1-communication', 'ext/7-productivity', 'ext/38-search-tools', 'ext/13-sports', 'ext/22-accessibility', 'ext/6-news', 'ext/14-fun', 'ext/28-photos' y así sucesivamente.
Luego, obtenemos todas las huellas digitales de extensiones que incluyen web_accessible_resources.
Cinco años después, Chrome aún actualizó una característica de seguridad para evitar este problema. Es decir, web_accessible_resources agrega una lista blanca de coincidencias, y solo las URL dentro de la lista blanca pueden acceder a web_accessible_resources, evitando la detección de huellas digitales en el front-end.
Pero... de las 110,000 extensiones que he rastreado este año, solo 286 complementos han agregado la lista blanca de coincidencias web_accessible_resources; y la mayoría están configurados con listas blancas inútiles como *://*/* y otras listas blancas claramente eludibles.
Esto demuestra lo impotente que es una característica de seguridad que nadie usa o se usa de manera incorrecta.