
🕵️♂️ 🔎 🕸️ So che hai installato queste estensioni di Chrome qui sotto.
crx-scouter.js può rilevare quali estensioni di Chrome stiamo usando silenziosamente e può rilevare se la persona davanti al browser è un fantastico hacker o un programmatore di alto livello 🐱. Può essere utilizzato per honeypot, identificazione uomo-macchina, contromisure per il blocco degli annunci, pre-verifiche per exploit di estensioni e altro ancora.
Il principio di crx-scouter.js si basa su un esperimento che ho fatto con evi1m0 nel 2017. Google sembra voler risolvere questo problema, ma con scarso successo. I dettagli sono disponibili in il documento del principio.
Demo su: https://blog.neargle.com/crx-scouter/.
Rilevare un'estensione specifica
const { check_one } = await import('./scouter/scouter')
check_one("aapbdbdomjkkjkaonfhkkikfgjllcleb", console.log)
L'output di console.log è simile al seguente:
{
"extid": "aapbdbdomjkkjkaonfhkkikfgjllcleb",
"url": "https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb",
"name": "Google Translate"
}
Ovviamente, esiste anche una funzione check_all_crx(callback) che supporta il rilevamento di tutte le estensioni nelle impronte digitali.
✨ Demo di rilevamento online è basata su questa funzione, e l'effetto è come segue:

Perché possiamo fare questo?
Gli sviluppatori di estensioni Chrome dovrebbero sapere che nel pacchetto con suffisso crx, il file di configurazione manifest.json fornisce informazioni importanti sull'estensione. Il file con suffisso crx può essere decompresso direttamente con unzip. Esempio di manifest.json come di seguito:
{
"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" ]
}
Se l'utente deve accedere alle risorse dell'estensione nella pagina web, deve dichiarare LIST in web_accessible_resources, prendendo json-view come esempio:
"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" ]
Il formato URL per accedere a queste risorse è il seguente:
chrome-extension://' + id dell'estensione + /assets/options.html
Ho sviluppato un crawler per ottenere i manifest delle applicazioni delle estensioni nell'intero Google Store, categorie come le seguenti: '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' e così via.
Poi, otteniamo tutte le impronte digitali delle estensioni che includono web_accessible_resources.
Cinque anni dopo, Chrome ha ancora aggiornato una funzionalità di sicurezza per aggirare questo problema. Cioè, web_accessible_resources aggiunge una funzionalità di sicurezza della whitelist di corrispondenza, e solo gli URL all'interno della whitelist possono accedere a web_accessible_resources, evitando il rilevamento delle impronte digitali lato front-end.
Ma... delle 110.000 estensioni che ho scaricato quest'anno, solo 286 plugin hanno aggiunto la whitelist di corrispondenza web_accessible_resources; e la maggior parte di esse sono configurate con whitelist inutili come *://*/* e altre whitelist chiaramente aggirabili.
Questo mostra quanto sia impotente una funzionalità di sicurezza che nessuno usa o viene usata in modo sbagliato.