← webkit
commit bf820aa57d04
SharedWorker process placement potential spoofing
webkit
spoofing
heuristic
WebKit
commit message
SharedWorker process placement potential spoofing
rdar://183347241
Reviewed by Rupin Mittal and Chris Dumez.
SharedWorker registration and requesting was only validating the registrable domain of a WebContent-supplied security origin.
Instead, rely on a full Site (that includes the scheme) as provided by the UI process to validate.
An opaque top origin has no scheme, and RegistrableDomain maps its empty host to "nullOrigin", so every
opaque origin collapses to a single Site and cannot be validated this way. Skip the check for those rather
than terminating a document that legitimately has one: a top-level document sandboxed by CSP has an opaque
origin, and AbstractWorker::validateURL lets it name a data: worker script.
Tests: Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SharedWorker.mm
fast/workers/shared-worker-file-url-top-origin.html
http/tests/ipc/shared-worker-forged-top-origin-scheme.html
* LayoutTests/fast/workers/resources/shared-worker-file-url-top-origin.js: Added.
* LayoutTests/fast/workers/shared-worker-file-url-top-origin-expected.txt: Added.
* LayoutTests/fast/workers/shared-worker-file-url-top-origin.html: Added.
* LayoutTests/http/tests/ipc/resources/shared-worker-forged-top-origin-scheme-worker.js: Added.
* LayoutTests/http/tests/ipc/shared-worker-forged-top-origin-scheme-expected.txt: Added.
* LayoutTests/http/tests/ipc/shared-worker-forged-top-origin-scheme.html: Added.
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::createNetworkConnectionToWebProcess):
(WebKit::NetworkProcess::addAllowedFirstPartyForCookies):
(WebKit::NetworkProcess::addAllowedFirstPartyDomainForCookies):
(WebKit::NetworkProcess::allowsFirstPartyForCookies):
(WebKit::NetworkProcess::allowsFirstPartySite const):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::didReceiveResponse):
(WebKit::NetworkResourceLoader::handleProvisionalLoadFailureFromContentFilter):
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::addAllowedFirstPartyForCookies):
* Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.cpp:
(WebKit::WebSharedWorkerServerConnection::requestSharedWorker):
* Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.cpp:
(WebKit::WebSharedWorkerServerToContextConnection::launchSharedWorker):
* Source/WebKit/Shared/NetworkProcessConnectionParameters.h:
* Source/WebKit/Shared/NetworkProcessConnectionParameters.serialization.in:
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::addAllowedFirstPartyForCookies):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:
* Source/WebKit/UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::prepareForProvisionalLoadInProcess):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::addAllowedFirstPartyForCookies):
(WebKit::WebPageProxy::loadAlternateHTML):
(WebKit::WebPageProxy::receivedNavigationActionPolicyDecision):
(WebKit::WebPageProxy::continueNavigationInNewProcess):
(WebKit::WebPageProxy::performProcessSwapForNavigationResponse):
(WebKit::canReuseProvisionalProcessForBrowsingContextGroupSwitch):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::establishRemoteWorkerContextConnectionToNetworkProcess):
(WebKit::WebProcessPool::processForNavigation):
(WebKit::WebProcessPool::prepareProcessForNavigation):
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::addAllowedFirstPartyForCookies):
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SharedWorker.mm: Added.
(if):
(cloneParsedMessage):
(harvestFailedSharedWorker):
(harvest):
(restoreTransferredMessagePort):
(requestSharedWorker):
(messagesFromWorkers):
(TestWebKitAPI::(SharedWorkerProcessPlacement, ReplayedRequestStartsWorkerWithoutNewProcess)):
(TestWebKitAPI::(SharedWorkerProcessPlacement, ForgedTopOriginSchemeDoesNotCreateNewProcess)):
(TestWebKitAPI::runDataURLSharedWorkerInSandboxedDocumentTest):
(TestWebKitAPI::(SharedWorkerProcessPlacement, SandboxedFrameCanStartDataURLSharedWorker)):
(TestWebKitAPI::(SharedWorkerProcessPlacement, SandboxedTopLevelDocumentCanStartDataURLSharedWorker)):
(TestWebKitAPI::(SharedWorkerProcessPlacement, CustomSchemeDocumentWithoutHostCanStartSharedWorker)):
(-[SharedWorkerHostSchemeHandler webView:startURLSchemeTask:]):
(-[SharedWorkerHostSchemeHandler webView:stopURLSchemeTask:]):
Originally-landed-as: 316606.631@safari-7625-branch (bc550432a2f0). rdar://191060009
Canonical link: https://commits.webkit.org/326231@main
files
LayoutTests/fast/workers/resources/shared-worker-file-url-top-origin.jsLayoutTests/fast/workers/shared-worker-file-url-top-origin-expected.txtLayoutTests/fast/workers/shared-worker-file-url-top-origin.htmlLayoutTests/http/tests/ipc/resources/shared-worker-forged-top-origin-scheme-worker.jsLayoutTests/http/tests/ipc/shared-worker-forged-top-origin-scheme-expected.txtLayoutTests/http/tests/ipc/shared-worker-forged-top-origin-scheme.htmlSource/WebKit/NetworkProcess/NetworkProcess.cppSource/WebKit/NetworkProcess/NetworkProcess.hSource/WebKit/NetworkProcess/NetworkProcess.messages.inSource/WebKit/NetworkProcess/NetworkResourceLoader.cppSource/WebKit/NetworkProcess/NetworkSession.cppSource/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.cppSource/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.cppSource/WebKit/Shared/NetworkProcessConnectionParameters.hSource/WebKit/Shared/NetworkProcessConnectionParameters.serialization.inSource/WebKit/UIProcess/Network/NetworkProcessProxy.cppSource/WebKit/UIProcess/Network/NetworkProcessProxy.hSource/WebKit/UIProcess/WebFrameProxy.cppSource/WebKit/UIProcess/WebPageProxy.cppSource/WebKit/UIProcess/WebPageProxy.hSource/WebKit/UIProcess/WebProcessPool.cppSource/WebKit/UIProcess/WebProcessProxy.cppSource/WebKit/UIProcess/WebProcessProxy.hTools/TestWebKitAPI/SourcesCocoa.txtTools/TestWebKitAPI/Tests/WebKit/WKWebView/SharedWorker.mm
this commit matched a vulnerability pattern in its message. WebKit does not publish a security bug for every fix, so treat it as a lead, not as a CVE record.