Browser Extension Pentesting Methodology

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Основна інформація

Розширення для браузера написані на JavaScript та завантажуються браузером в фоновому режимі. Вони мають свій DOM, але можуть взаємодіяти з DOM інших сайтів. Це означає, що вони можуть порушити конфіденційність, цілісність та доступність (CIA) інших сайтів.

Основні компоненти

Макети розширень виглядають краще, коли їх візуалізувати, і складаються з трьох компонентів. Давайте детальніше розглянемо кожен компонент.

Сценарії вмісту

Кожен сценарій вмісту має прямий доступ до DOM однієї веб-сторінки і тим самим відкритий для потенційно шкідливого вводу. Однак сценарій вмісту не має інших дозволів, крім можливості надсилати повідомлення ядрі розширення.

Ядро розширення

Ядро розширення містить більшість привілеїв/доступів розширення, але ядро розширення може взаємодіяти лише з вмістом веб-сторінки через XMLHttpRequest та сценарії вмісту. Крім того, ядро розширення не має прямого доступу до хост-машини.

Нативний бінарний файл

Розширення дозволяє нативному бінарному файлу, який може отримати доступ до хост-машини з повними привілеями користувача. Нативний бінарний файл взаємодіє з ядром розширення через стандартний інтерфейс програмування додатків Netscape (NPAPI), який використовується Flash та іншими додатками для браузера.

Межі

Для отримання повних привілеїв користувача зловмиснику потрібно переконати розширення передавати шкідливий ввід від сценарію вмісту до ядра розширення та від ядра розширення до нативного бінарного файлу.

Кожен компонент розширення відокремлений один від одного міцними захисними межами. Кожен компонент працює в окремому процесі операційної системи. Сценарії вмісту та ядра розширення працюють в пісочницях, недоступних для більшості служб операційної системи.

Крім того, сценарії вмісту відокремлені від пов'язаних з ними веб-сторінок за допомогою запуску в окремому купі JavaScript. Сценарій вмісту та веб-сторінка мають доступ до одного й того ж DOM, але два ніколи не обмінюються вказівниками JavaScript, що запобігає витоку функціональності JavaScript.

manifest.json

Розширення Chrome - це просто ZIP-папка з розширенням .crx. Ядро розширення - це файл manifest.json у корені папки, який вказує макет, дозволи та інші параметри конфігурації.

Приклад:

{
"manifest_version": 2,
"name": "My extension",
"version": "1.0",
"permissions": [
"storage"
],
"content_scripts": [
{
"js": [
"script.js"
],
"matches": [
"https://example.com/*",
"https://www.example.com/*"
],
"exclude_matches": ["*://*/*business*"],
}
],
"background": {
"scripts": [
"background.js"
]
},
"options_ui": {
"page": "options.html"
}
}

content_scripts

Сценарії вмісту завантажуються кожного разу, коли користувач переходить на відповідну сторінку, у нашому випадку будь-яку сторінку, яка відповідає виразу https://example.com/*, і не відповідає регулярному виразу *://*/*/business*. Вони виконуються так, як власні скрипти сторінки і мають довільний доступ до об'єктної моделі документа (DOM) сторінки.

"content_scripts": [
{
"js": [
"script.js"
],
"matches": [
"https://example.com/*",
"https://www.example.com/*"
],
"exclude_matches": ["*://*/*business*"],
}
],

Для включення або виключення додаткових URL-адрес можна використовувати include_globs та exclude_globs.

Ось приклад вмістового скрипту, який додасть кнопку пояснення на сторінку, коли API сховища використовується для отримання значення message з сховища розширення.

chrome.storage.local.get("message", result =>
{
let div = document.createElement("div");
div.innerHTML = result.message + " <button>Explain</button>";
div.querySelector("button").addEventListener("click", () =>
{
chrome.runtime.sendMessage("explain");
});
document.body.appendChild(div);
});

Повідомлення надсилається на сторінки розширення за допомогою скрипта вмісту, коли цю кнопку натискають, через використання API runtime.sendMessage(). Це через обмеження скрипта вмісту у прямому доступі до API, де storage є одним із кількох винятків. Для функціоналу поза цими винятками, повідомлення надсилаються на сторінки розширення, з якими можуть спілкуватися скрипти вмісту.

Залежно від браузера, можливості скрипта вмісту можуть трохи відрізнятися. Для браузерів на основі Chromium, список можливостей доступний у документації розробників Chrome, а для Firefox - на MDN є основне джерело. Також варто зазначити, що скрипти вмісту можуть спілкуватися з фоновими скриптами, що дозволяє їм виконувати дії та передавати відповіді назад.

Для перегляду та налагодження скриптів вмісту в Chrome, можна отримати доступ до меню інструментів розробника Chrome з Опції > Інструменти > Інструменти розробника або натиснувши Ctrl + Shift + I.

Після відображення інструментів розробника, слід натиснути на вкладку Source, а потім на вкладку Content Scripts. Це дозволяє спостерігати за виконанням скриптів вмісту з різних розширень та встановлювати точки зупинки для відстеження потоку виконання.

Впроваджені скрипти вмісту

Зверніть увагу, що Скрипти вмісту не є обов'язковими, оскільки також можливо динамічно впроваджувати скрипти та програмно впроваджувати їх на веб-сторінки через tabs.executeScript. Це фактично надає більше гранульного контролю.

Для програмного впровадження скрипта вмісту, розширенню потрібно мати права хоста для сторінки, в яку будуть впроваджені скрипти. Ці дозволи можна забезпечити або запитавши їх у маніфесті розширення, або тимчасово через activeTab.

Приклад розширення на основі activeTab

manifest.json
{
"name": "My extension",
...
"permissions": [
"activeTab",
"scripting"
],
"background": {
"service_worker": "background.js"
},
"action": {
"default_title": "Action Button"
}
}
  • Впровадження JS-файлу при натисканні:

// content-script.js
document.body.style.backgroundColor = "orange";

//service-worker.js - Inject the JS file
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ["content-script.js"]
});
});
  • Впровадити функцію при кліці:

//service-worker.js - Inject a function
function injectedFunction() {
document.body.style.backgroundColor = "orange";
}

chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target : {tabId : tab.id},
func : injectedFunction,
});
});

Приклад з дозволами на скриптизацію

// service-workser.js
chrome.scripting.registerContentScripts([{
id : "test",
matches : [ "https://*.example.com/*" ],
excludeMatches : [ "*://*/*business*" ],
js : [ "contentScript.js" ],
}]);

// Another example
chrome.tabs.executeScript(tabId, { file: "content_script.js" });

Для включення або виключення додаткових URL-адрес також можна використовувати include_globs та exclude_globs.

Сценарії вмісту run_at

Поле run_at контролює коли файли JavaScript внедрюються на веб-сторінку. Перевага та значення за замовчуванням - "document_idle".

Можливі значення:

  • document_idle: Коли це можливо

  • document_start: Після будь-яких файлів з css, але перед будь-якою іншою побудовою DOM або запуском будь-якого іншого скрипту.

  • document_end: Негайно після завершення DOM, але перед завантаженням додаткових ресурсів, таких як зображення та фрейми.

Через manifest.json

{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"run_at": "document_idle",
"js": ["contentScript.js"]
}
],
...
}

Через service-worker.js

chrome.scripting.registerContentScripts([{
id : "test",
matches : [ "https://*.example.com/*" ],
runAt : "document_idle",
js : [ "contentScript.js" ],
}]);

фон

Повідомлення, відправлені контент-скриптами, отримує фонова сторінка, яка виконує центральну роль у координації компонентів розширення. Зокрема, фонова сторінка існує протягом усього терміну дії розширення, працюючи непомітно без прямої взаємодії з користувачем. Вона має власну модель об'єктів документа (DOM), що дозволяє складні взаємодії та управління станом.

Ключові моменти:

  • Роль фонової сторінки: Діє як нервовий центр для розширення, забезпечуючи комунікацію та координацію між різними частинами розширення.

  • Постійність: Це завжди присутня сутність, невидима для користувача, але необхідна для функціонування розширення.

  • Автоматичне створення: Якщо не вказано явно, браузер автоматично створить фонову сторінку. Ця автоматично створена сторінка буде містити всі фонові скрипти, вказані в маніфесті розширення, забезпечуючи безперервну роботу фонових завдань розширення.

Зручність, яку надає браузер у автоматичному створенні фонової сторінки (якщо не вказано явно), забезпечує інтеграцію всіх необхідних фонових скриптів та їхню операційність, спрощуючи процес налаштування розширення.

Приклад фонового скрипта:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>
{
if (request == "explain")
{
chrome.tabs.create({ url: "https://example.net/explanation" });
}
})

Він використовує API runtime.onMessage для прослуховування повідомлень. Коли отримується повідомлення "explain", він використовує API вкладок для відкриття сторінки в новій вкладці.

Для налагодження фонового скрипту ви можете перейти до деталей розширення та перевірити робочий скрипт служби, це відкриє інструменти розробника з фоновим скриптом:

Сторінки параметрів та інші

Розширення браузера можуть містити різноманітні види сторінок:

  • Сторінки дій відображаються в розкривному списку при натисканні на значок розширення.

  • Сторінки, які розширення завантажує в новій вкладці.

  • Сторінки параметрів: Ця сторінка відображається вгорі розширення при натисканні. У попередньому маніфесті в моєму випадку я міг отримати доступ до цієї сторінки за адресою chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca або натиснувши:

Зауважте, що ці сторінки не є постійними, як фонові сторінки, оскільки вони динамічно завантажують вміст за потребою. Незважаючи на це, вони мають спільні можливості з фоновою сторінкою:

  • Взаємодія з контентними скриптами: Подібно до фонової сторінки, ці сторінки можуть отримувати повідомлення від контентних скриптів, сприяючи взаємодії всередині розширення.

  • Доступ до API, специфічних для розширення: Ці сторінки мають повний доступ до API, специфічних для розширення, залежно від дозволів, визначених для розширення.

permissions та host_permissions

permissions та host_permissions - це записи з manifest.json, які вказують, які дозволи мають розширення браузера (зберігання, місцезнаходження...) та на яких веб-сторінках.

Оскільки розширення браузера можуть мати таку велику кількість привілеїв, зловмисний або компрометований може дозволити зловмиснику різні способи крадіжки чутливої інформації та шпигунства за користувачем.

Перевірте, як працюють ці налаштування та як вони можуть бути зловживані в:

pageBrowExt - permissions & host_permissions

content_security_policy

Політика безпеки контенту також може бути визначена всередині manifest.json. Якщо вона визначена, вона може бути уразливою.

Стандартне налаштування сторінок розширення браузера досить обмежене:

script-src 'self'; object-src 'self';

Для отримання додаткової інформації про CSP та можливі обхідні шляхи перевірте:

pageContent Security Policy (CSP) Bypass

web_accessible_resources

для того, щоб веб-сторінка могла отримати доступ до сторінки розширення браузера, наприклад, до сторінки .html, цю сторінку потрібно вказати в полі web_accessible_resources файлу manifest.json. Наприклад:

{
...
"web_accessible_resources": [
{
"resources": [ "images/*.png" ],
"matches": [ "https://example.com/*" ]
},
{
"resources": [ "fonts/*.woff" ],
"matches": [ "https://example.com/*" ]
}
],
...
}

Ці сторінки доступні за URL-адресою:

chrome-extension://<extension-id>/message.html

У публічних розширень ідентифікатор розширення доступний:

Хоча, якщо використовується параметр manifest.json use_dynamic_url, цей ідентифікатор може бути динамічним.

Можливість доступу до цих сторінок робить їх потенційно вразливими до атак ClickJacking:

pageBrowExt - ClickJacking

Дозволити завантаження цих сторінок лише розширенням, а не випадковим URL-адресам може запобігти атакам CLickJacking.

externally_connectable

Згідно з документацією, властивість маніфесту "externally_connectable" вказує, які розширення та веб-сторінки можуть підключатися до вашого розширення через runtime.connect та runtime.sendMessage.

  • Якщо ключ externally_connectable не вказаний у маніфесті вашого розширення або вказаний як "ids": ["*"], всі розширення можуть підключатися, але жодна веб-сторінка не може підключатися.

  • Якщо вказані конкретні ідентифікатори, як у "ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"], лише ці додатки можуть підключатися.

  • Якщо вказані відповідності, ці веб-додатки зможуть підключатися:

"matches": [
"https://*.google.com/*",
"*://*.chromium.org/*",
  • Якщо вказано як порожнє: "externally_connectable": {}, жоден додаток або веб-сторінка не зможе підключитися.

Чим менше розширень та URL-адрес вказано тут, тим менша поверхня атаки буде.

Якщо веб-сторінка, вразлива до XSS або захоплення, вказана в externally_connectable, зловмисник зможе надсилати повідомлення безпосередньо до фонового скрипта, повністю обходячи Скрипт вмісту та його CSP.

Отже, це дуже потужний обхід.

Більше того, якщо клієнт встановлює підроблене розширення, навіть якщо йому не дозволено спілкуватися з вразливим розширенням, воно може впровадити дані XSS на дозволену веб-сторінку або зловживати API WebRequest або DeclarativeNetRequest для маніпулювання запитами на цільовому домені, змінюючи запит сторінки для файлу JavaScript. (Зауважте, що CSP на цільовій сторінці може запобігти цим атакам). Ця ідея взята з цього опису.

Взаємодія між веб-сторінкою ↔︎ Скриптом вмісту

Середовища, де працюють скрипти вмісту та де існують сторінки-господарі, відокремлені одне від одного, забезпечуючи ізоляцію. Незважаючи на цю ізоляцію, обидва мають можливість взаємодіяти з Об'єктною моделлю документа (DOM) сторінки, спільним ресурсом. Для того щоб сторінка-господар взаємодіяла з скриптом вмісту, або опосередковано з розширенням через скрипт вмісту, потрібно використовувати DOM, до якого мають доступ обидві сторони, як канал зв'язку.

Повідомлення Post

content-script.js
var port = chrome.runtime.connect();

window.addEventListener("message", (event) => {
// We only accept messages from ourselves
if (event.source !== window) {
return;
}

if (event.data.type && (event.data.type === "FROM_PAGE")) {
console.log("Content script received: " + event.data.text);
port.postMessage(event.data.text);
}
}, false);
example.js
document.getElementById("theButton").addEventListener("click", () => {
window.postMessage(
{type : "FROM_PAGE", text : "Hello from the webpage!"}, "*");
}, false);

Безпечна комунікація Post Message повинна перевіряти автентичність отриманого повідомлення, це можна зробити, перевіривши:

  • event.isTrusted: Це правда лише в тому випадку, якщо подія була спровокована дією користувача

  • Сценарій контенту може очікувати повідомлення лише у випадку, якщо користувач виконує певну дію

  • початковий домен: може очікувати повідомлення лише від списку доменів.

  • Якщо використовується регулярний вираз, будьте дуже обережні

  • Джерело: received_message.source !== window може бути використаний для перевірки, чи було повідомлення з того ж вікна, де прослуховується сценарій контенту.

Попередні перевірки, навіть якщо вони виконані, можуть бути вразливими, тому перевірте наступну сторінку потенційних обхідів Post Message:

pagePostMessage Vulnerabilities

Iframe

Ще один можливий спосіб комунікації може бути через URL-адреси Iframe, ви можете знайти приклад у:

pageBrowExt - XSS Example

DOM

Це не "точно" спосіб комунікації, але веб-сторінка та сценарій контенту матимуть доступ до DOM веб-сторінки. Таким чином, якщо сценарій контенту читає певну інформацію з нього, довіряючи DOM веб-сторінки, веб може змінити ці дані (тому що веб не повинен довіряти, або тому що веб вразливий до XSS) і пошкодити сценарій контенту.

Ви також можете знайти приклад DOM-основаного XSS для компрометації розширення браузера в:

pageBrowExt - XSS Example

Чутлива інформація в пам'яті/коді

Якщо Розширення Браузера зберігає чутливу інформацію всередині своєї пам'яті, це може бути витягнуто (особливо на машинах з Windows) і пошуково для цієї інформації.

Отже, пам'ять Розширення Браузера не повинна вважатися безпечною і чутлива інформація така як облікові дані або мнемонічні фрази не повинні зберігатися.

Звісно, не розміщуйте чутливу інформацію в коді, оскільки вона буде публічною.

Комунікація між сценарієм контенту ↔︎ Сценарієм Фону

Сценарій контенту може використовувати функції runtime.sendMessage() або tabs.sendMessage() для відправлення одноразового JSON-серіалізованого повідомлення.

Для обробки відповіді використовуйте повернену обіцянку. Хоча, для забезпечення сумісності з попередніми версіями, все ще можна передавати зворотний виклик як останній аргумент.

Відправлення запиту з сценарію контенту виглядає наступним чином:

(async () => {
const response = await chrome.runtime.sendMessage({greeting: "hello"});
// do something with response here, not outside the function
console.log(response);
})();

Надсилання запиту з розширення (зазвичай фоновий скрипт) Скрипт контенту може використовувати функції, за винятком того, що потрібно вказати, на яку вкладку його відправити. Приклад того, як надіслати повідомлення у скрипт контенту на вибраній вкладці:

// From https://stackoverflow.com/questions/36153999/how-to-send-a-message-between-chrome-extension-popup-and-content-script
(async () => {
const [tab] = await chrome.tabs.query({active: true, lastFocusedWindow: true});
const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});
// do something with response here, not outside the function
console.log(response);
})();

На приймаючому кінці, вам потрібно налаштувати runtime.onMessage слухач подій для обробки повідомлення. Це виглядає однаково як з контент-скрипта, так і з сторінки розширення.

// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting === "hello")
sendResponse({farewell: "goodbye"});
}
);

У вказаному прикладі sendResponse() виконувалася синхронно. Щоб змінити обробник подій onMessage для асинхронного виконання sendResponse(), необхідно включити return true;.

Важливою розглядати те, що в сценаріях, де кілька сторінок призначені для отримання подій onMessage, перша сторінка, яка виконує sendResponse() для певної події буде єдиною, яка зможе ефективно доставити відповідь. Будь-які подальші відповіді на ту ж подію не будуть враховуватися.

При створенні нових розширень, перевага повинна бути надана обіцянкам, а не зворотнім викликам. Щодо використання зворотних викликів, функція sendResponse() вважається дійсною лише в тому випадку, якщо вона виконується безпосередньо в синхронному контексті, або якщо обробник подій вказує на асинхронну операцію, повертаючи true. Якщо жоден з обробників не повертає true, або якщо функція sendResponse() видалена з пам'яті (сміттєзбірником), зворотний виклик, пов'язаний з функцією sendMessage(), буде запущений за замовчуванням.

Завантаження розширення в браузер

  1. Завантажте розширення для браузера та розпакуйте його

  2. Перейдіть до chrome://extensions/ та увімкніть Режим розробника

  3. Натисніть кнопку Завантажити розпаковане

У Firefox перейдіть до about:debugging#/runtime/this-firefox та натисніть кнопку Завантажити тимчасове додаток.

Отримання вихідного коду з магазину

Вихідний код розширення Chrome можна отримати за допомогою різних методів. Нижче наведено детальні пояснення та інструкції для кожної опції.

Завантаження розширення як ZIP через командний рядок

Вихідний код розширення Chrome можна завантажити як ZIP-файл за допомогою командного рядка. Це включає в себе використання curl для отримання ZIP-файлу з конкретного URL, а потім розпакування вмісту ZIP-файлу в каталог. Ось кроки:

  1. Замініть "extension_id" на фактичний ID розширення.

  2. Виконайте наступні команди:

extension_id=your_extension_id   # Replace with the actual extension ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc"
unzip -d "$extension_id-source" "$extension_id.zip"

Використовуйте веб-сайт CRX Viewer

https://robwu.nl/crxviewer/

Використовуйте розширення CRX Viewer

Ще один зручний метод - використання переглядача вихідного коду розширення Chrome, який є проектом з відкритим вихідним кодом. Його можна встановити з Chrome Web Store. Вихідний код переглядача доступний у його сховищі на GitHub.

Перегляд вихідного коду локально встановленого розширення

Розширення Chrome, встановлені локально, також можна переглядати. Ось як це зробити:

  1. Отримайте доступ до каталогу вашого локального профілю Chrome, відвідавши chrome://version/ та знаходячи поле "Шлях профілю".

  2. Перейдіть до підкаталогу Extensions/ у каталозі профілю.

  3. Цей каталог містить всі встановлені розширення, зазвичай з їх вихідним кодом у читабельному форматі.

Для ідентифікації розширень ви можете відображати їх ідентифікатори:

  • Увімкніть режим розробника на сторінці about:extensions, щоб побачити ідентифікатори кожного розширення.

  • У кожному каталозі розширення файл manifest.json містить читабельне поле name, яке допомагає вам ідентифікувати розширення.

Використання файлового архіватора або розпакувальника

Перейдіть до Chrome Web Store та завантажте розширення. Файл матиме розширення .crx. Змініть розширення файлу з .crx на .zip. Використовуйте будь-який файловий архіватор (наприклад, WinRAR, 7-Zip і т. д.), щоб розпакувати вміст ZIP-файлу.

Використання режиму розробника в Chrome

Відкрийте Chrome та перейдіть до chrome://extensions/. Увімкніть "Режим розробника" у правому верхньому куті. Натисніть на "Завантажити розпаковане розширення...". Перейдіть до каталогу вашого розширення. Це не завантажує вихідний код, але корисно для перегляду та модифікації коду вже завантаженого або розробленого розширення.

Шаблон аудиту безпеки

Незважаючи на те, що розширення браузера мають обмежену поверхню атаки, деякі з них можуть містити вразливості або потенційні покращення забезпечення. Ось найпоширеніші з них:

Інструменти

  • Витягує будь-яке розширення Chrome з наданого посилання на магазин Chrome.

  • Переглядач manifest.json: просто відображає JSON-прикрашену версію маніфеста розширення.

  • Аналіз відбитків: Виявлення web_accessible_resources та автоматичне створення JavaScript для відбитків розширення Chrome.

  • Потенційний аналіз Clickjacking: Виявлення сторінок HTML розширення з директивою web_accessible_resources. Вони потенційно вразливі до clickjacking в залежності від призначення сторінок.

  • Переглядач попереджень про дозвіл(и): який показує список всіх попереджень про дозвіл Chrome, які будуть відображені при спробі користувача встановити розширення.

  • Небезпечні функції: показує місце розташування небезпечних функцій, які можуть бути використані зловмисником (наприклад, функції, такі як innerHTML, chrome.tabs.executeScript).

  • Точки входу: показує, де розширення приймає зовнішній/користувацький ввід. Це корисно для розуміння поверхні розширення та пошуку потенційних точок для надсилання зловмисно сформованих даних до розширення.

  • Для їх згенерованих попереджень сканери Dangerous Function(s) та Entry Point(s) мають наступне:

  • Відповідний фрагмент коду та рядок, який викликав попередження.

  • Опис проблеми.

  • Кнопка "Переглянути файл" для перегляду повного вихідного файлу, що містить код.

  • Шлях до файлу, на який було надіслано попередження.

  • Повний URI файлу розширення Chrome, на який було надіслано попередження.

  • Тип файлу, такий як сценарій фонової сторінки, сценарій вмісту, дія браузера тощо.

  • Якщо вразливий рядок знаходиться в файлі JavaScript, шляхи до всіх сторінок, де він включений, а також статус цих сторінок web_accessible_resource.

  • Аналізатор політики безпеки вмісту (CSP) та перевірка обхіду: Це вказує на слабкості у політиці CSP вашого розширення та також підсвічує будь-які потенційні способи обхіду CSP через CDN, які включені до білого списку тощо.

  • Відомі вразливі бібліотеки: Це використовує Retire.js для перевірки використання відомо вразливих бібліотек JavaScript.

  • Завантажте розширення та форматовані версії.

  • Завантажте оригінальне розширення.

  • Завантажте красиву версію розширення (автоматично прикрашений HTML та JavaScript).

  • Автоматичне кешування результатів сканування, запуск сканування розширення займе багато часу вперше, коли ви його запустите. Однак другий раз, за умови, що розширення не було оновлено, це буде майже миттєво через кешування результатів.

  • Посилання на звіти URL, легко надайте комусь посилання на звіт про розширення, згенерований tarnish.

Проект Neto - це пакет Python 3, призначений для аналізу та розкриття прихованих функцій браузерних плагінів та розширень для відомих браузерів, таких як Firefox та Chrome. Він автоматизує процес розпакування упакованих файлів для вилучення цих функцій з відповідних ресурсів у розширенні, таких як manifest.json, локалізаційні теки або файли вихідного коду JavaScript та HTML.

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated