Skip to content

Commit 1a529eb

Browse files
committed
Saner origin normalization for sandboxed iframes (thanks Security Research Labs for report).
1 parent db9ce70 commit 1a529eb

1 file changed

Lines changed: 11 additions & 22 deletions

File tree

src/bg/RequestGuard.js

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -608,39 +608,28 @@
608608
return redirected;
609609
}
610610

611-
let normalizeRequest = request => {
612-
613-
function fakeOriginFromTab({tabId, type} = request) {
614-
if (type !== "main_frame") {
615-
let tabUrl = request.tabUrl || tabId !== -1 && TabCache.get(tabId)?.url;
616-
if (tabUrl) {
617-
return request.initiator = request.originUrl = request.documentUrl = tabUrl;
618-
}
619-
}
620-
return request.initiator || request.originUrl;
621-
}
611+
const normalizeRequest = request => {
622612

623613
if ("initiator" in request && !("originUrl" in request)) {
624-
if (request.initiator === "null") {
625-
// Chromium sandboxed content?
626-
fakeOriginFromTab();
627-
}
628614
request.originUrl = request.initiator;
629615
if (request.type !== "main_frame" && !("documentUrl" in request)) {
630616
request.documentUrl = request.initiator;
631617
}
632618
}
633-
if ("frameAncestors" in request && (!request.originUrl || request.documentUrl)) {
634-
// Gecko sandboxed content?
619+
if (request.frameAncestors && !request.originUrl && request.type == "sub_frame") {
620+
// Gecko sandboxed iframe
635621
for (let f of request.frameAncestors) {
636622
if (f.url !== "null" && !f.url.startsWith("moz-nullprincipal:")) {
637-
request.originUrl = request.documentUrl = f.url;
623+
let { url } = f;
624+
if (url === "") {
625+
// redacted ancestor url in sandboxed frame, let's grab the real one from NavCache
626+
url = NavCache.getFrame(request.tabId, f.frameId)?.url;
627+
}
628+
request.originUrl = request.documentUrl = url;
638629
break;
639630
}
640631
}
641-
if (!request.originUrl) {
642-
fakeOriginFromTab();
643-
}
632+
request.originUrl ||= request.documentUrl;
644633
}
645634
};
646635

@@ -760,7 +749,7 @@
760749

761750
let {tabId, type, url, originUrl} = request;
762751

763-
const {policy} = ns
752+
const { policy } = ns;
764753

765754
let previous = recent.find(request);
766755
if (previous) {

0 commit comments

Comments
 (0)