Moderate firefox Logic Error 🔧 Commit mapped

Overview

Moderate
Severity
—
CVSS
No
Exploited ITW
Fixed
Fix Status
Impactmoderate
DescriptionSame-origin policy bypass in the DevTools component
ComponentCore
Bug ClassLogic Error
Tracker2063658
Fix commitdc61551c7e36 (firefox) +23/-0
CISA KEVNot listed
CreditedFinn Westendorf
Disclosed2026-09-29

Files Changed

  • devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js
diff --git a/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js b/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js
index 52cb8416693..6c751449ce4 100644
--- a/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js
+++ b/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js
@@ -153,6 +153,29 @@ add_task(async function testLocalMode() {
     }
   );
 
+  info("Assert that other origins can't fetch local mode origin");
+  await loadURL(
+    gBrowser.selectedBrowser,
+    "data:text/html,page from another origin, not a local mode page"
+  );
+  await SpecialPowers.spawn(
+    gBrowser.selectedBrowser,
+    [TEST_URL],
+    async localModeUrl => {
+      await Assert.rejects(
+        content.fetch(localModeUrl),
+        /NetworkError when attempting to fetch resource./,
+        "Fetching local mode URL should be blocked by cors"
+      );
+      const response = await content.fetch(localModeUrl, { mode: "no-cors" });
+      is(
+        response.type,
+        "opaque",
+        "But we can do no-cors request with opaque response"
+      );
+    }
+  );
+
   info(
     "Open a new tab without network interception and assert that the mappings aren't working"
   );
Loading diff…

Regression Test / PoC

shipped with the fix
diff --git a/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js b/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js
index 52cb8416693..6c751449ce4 100644
--- a/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js
+++ b/devtools/shared/network-observer/test/browser/browser_networkobserver_localMode.js
@@ -153,6 +153,29 @@ add_task(async function testLocalMode() {
     }
   );
 
+  info("Assert that other origins can't fetch local mode origin");
+  await loadURL(
+    gBrowser.selectedBrowser,
+    "data:text/html,page from another origin, not a local mode page"
+  );
+  await SpecialPowers.spawn(
+    gBrowser.selectedBrowser,
+    [TEST_URL],
+    async localModeUrl => {
+      await Assert.rejects(
+        content.fetch(localModeUrl),
+        /NetworkError when attempting to fetch resource./,
+        "Fetching local mode URL should be blocked by cors"
+      );
+      const response = await content.fetch(localModeUrl, { mode: "no-cors" });
+      is(
+        response.type,
+        "opaque",
+        "But we can do no-cors request with opaque response"
+      );
+    }
+  );
+
   info(
     "Open a new tab without network interception and assert that the mappings aren't working"
   );
Loading diff…