← All issues

Deferred process swapping for HTTP redirects with Enhanced Security

127f09e

Enhanced Security(ES)는 평문 HTTP 응답처럼 잠재적으로 위험하다고 판단되는 navigation 대상을 더 격리된 WebContent 프로세스에서 실행합니다. 프로세스 교체는 세 프로세스에 걸쳐 조율됩니다. UIProcess(정책 결정), NetworkProcess(HTTP 로드), WebContent(렌더링)가 이에 해당합니다. 기존에는 ES 교체 결정이 요청 전에 이루어졌지만, 이번 commit으로 응답 수신 시점으로 변경되었습니다.

Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

+void NetworkConnectionToWebProcess::adoptNetworkResourceLoader(
+ WebCore::ResourceLoaderIdentifier resourceLoadIdentifier,
+ Ref<NetworkResourceLoader>&& loader)
+{
+ m_networkResourceLoaders.add(resourceLoadIdentifier, WTF::move(loader));
+}

흔히 발생하는 HTTP→HTTPS redirect의 경우 페이지는 원래 프로세스에 그대로 머무릅니다. 실제 HTTP 응답인 경우에는 NetworkProcess가 진행 중인 NetworkResourceLoader를 보류 상태로 두고, UIProcess가 새로운 ES 프로세스를 생성합니다. 이후 adoptNetworkResourceLoader를 통해 loader를 재연결하여 서버에 요청을 재발행하지 않고도 lifecycle 중간에서 재개합니다. 아키텍처 측면에서는 COOP가 browsing-context-group 전환을 유발하는 방식과 유사합니다.

이 지연 교체 메커니즘은 NetworkResourceLoader가 lifecycle 중간에 프로세스 연결 경계를 넘는 loader 재연결 프로토콜을 도입합니다. 프로세스 격리 경계에서 의미 있는 새로운 IPC attack surface가 생깁니다.

🔒

The loader re-attachment protocol introduces lifetime and identifier-collision edge cases across process boundaries worth close examination.

더 확인하려면 구독해 주세요