[3] WebContent sandbox bypass for local file reads
Severity: High | Component: WebKit WebProcess loader / NetworkProcess resource load parameters | dfe2e0e
WebContent process가 Networking process를 경유해 임의의 로컬 파일을 읽을 수 있다는 점에서 High로 평가되었습니다. sandbox extension 생성 실패가 조용히 무시되었으며, Networking process의 광범위한 파일 접근 권한은 WebKit multi-process 모델의 잘 알려진 아키텍처 특성입니다.
WebContent process는 접근 권한이 없는 파일에 대한 로컬 파일 로드를 시작해서는 안 됩니다. 패치 이전에는 가능했습니다. Networking process가 권한 여부와 무관하게 요청을 처리했기 때문입니다.
Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp
- void NetworkResourceLoadParameters::createSandboxExtensionHandlesIfNecessary()
+ bool NetworkResourceLoadParameters::createSandboxExtensionHandlesIfNecessary()
{
...
if (request.url().protocolIsFile()) {
...
if (auto handle = SandboxExtension::createHandle(request.url().fileSystemPath(), SandboxExtension::Type::ReadOnly))
resourceSandboxExtension = WTF::move(*handle);
}
+ return resourceSandboxExtension.has_value();
}
+ return true;
}
Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
- loadParameters.createSandboxExtensionHandlesIfNecessary();
+ if (!loadParameters.createSandboxExtensionHandlesIfNecessary()) {
+ RunLoop::mainSingleton().dispatch([resourceLoader = Ref { resourceLoader }, error = blockedError(request)] {
+ resourceLoader->didFail(error);
+ });
+ return;
+ }
Patch Details
이번 수정은 createSandboxExtensionHandlesIfNecessary()의 반환 타입을 void에서 bool로 변경했습니다. 요청이 file:// URL이고 WebContent process가 sandbox extension handle 생성에 실패하면 false를 반환합니다. WebLoaderStrategy::scheduleLoadFromNetworkProcess에서는 이제 반환값을 확인합니다. false인 경우, 요청이 Networking process에 도달하기 전에 blockedError와 함께 즉시 실패 처리됩니다.
로컬 파일 로드 시 WebContent process와 Networking process 사이의 IPC 경계에서 접근 제어가 강제되지 않는 패턴.
Background
WebKit의 multi-process 아키텍처는 작업을 두 process로 분리합니다. 페이지 렌더링을 담당하는 sandboxed WebContent process와, 네트워크 및 파일 I/O를 처리하는 Networking process입니다. WebContent process는 파일 시스템 접근을 제한하는 엄격한 sandbox 환경에서 실행됩니다. file:// URL을 로드해야 할 때, WebContent process는 SandboxExtension handle을 생성해야 합니다. 이는 Networking process가 특정 파일을 WebContent process 대신 읽을 수 있도록 권한을 부여하는 capability token입니다. SandboxExtension::createHandle은 호출 process 자체가 해당 파일에 접근 권한을 가진 경우에만 성공합니다. Networking process는 WebContent process보다 광범위한 파일 시스템 접근 권한으로 실행됩니다. 모든 origin에 걸쳐 다운로드, 쿠키 저장, 캐시 파일을 처리해야 하기 때문입니다.
Analysis
이는 IPC 경계에서 발생하는 전형적인 confused-deputy 패턴입니다. 패치 이전에는 createSandboxExtensionHandlesIfNecessary()가 void를 반환했습니다. WebContent process가 접근 권한이 없는 file:// URL을 요청하면, SandboxExtension::createHandle이 실패하고 resourceSandboxExtension은 빈 상태로 유지됩니다. 그럼에도 로드는 계속 진행되어 sandbox extension 없이 요청이 Networking process로 전달되었습니다. 광범위한 파일 접근 권한을 가진 Networking process는 파일을 읽어 그 내용을 WebContent process에 반환했습니다. 접근 검사 자체는 형식상 존재했습니다. extension 생성 시도는 이루어졌지만, 실패가 조용히 무시된 것입니다.
Aaaaaaaaaa Aaaaaaaaa Aaaaaa Aa Aaa Aaa Aaaa Aaaaaa Aaaaaaaa Aaaa Aaaaaaaaa Aaa Aaa Aaaa Aaaa Aaaaaa a Aaaa Aaa Aa Aaa Aaaa Aaaaaaaaa Aaaa Aaa a Aaaaa Aaaaaaaaaa Aaaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaa Aaa Aaaaaa Aaaaaaaaaa Aaaaaaaa Aa Aaa Aa Aaa Aaa Aa Aa Aaaaaa Aaa Aaa Aaaaaaaaaa Aaaaaaaa Aa Aaaaaa Aaaa Aa Aaa Aa Aaaaaaaaaa Aaaaaaaa Aaa Aa a Aaa Aaaaaa Aaa Aaaaaaaaaaaaa Aaaaa Aa Aaa Aaa Aaaaaaaaaa Aaaaaaaa Aa Aaa Aa Aaa Aaa a Aaaaa Aaaaa Aaa Aa Aa Aaaaaaaaaa Aaaaaaaaaa Aa a Aaaaa
a Aaaaaaaaaaaaaa Aaaaaaaaaa Aaaaaaa Aaaaaaaa Aa Aaa Aa Aaa Aaaaaaa Aaaaaaa Aaa Aaaaaaaaaa Aaaaaaaa Aaaaaaa Aaaaaaaaaa Aa Aaaaa Aaa Aa Aaaa Aaa a Aaa Aaaaaa Aa Aaaa Aaaaaaaaaa Aaaaaaaa Aaa Aaaaaaaaa Aaa Aaa Aa Aa Aa Aaa Aaaa Aaaaaaaaaa Aaaaaaaa Aa Aaa a Aaaaaa Aaaaa Aaaaaaaaaa Aaaaaaaa Aa Aaa Aaa Aaaa Aaaaaaaa
Aaa Aa Aaaaa Aa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaa Aa Aa Aaaa Aaaa Aaaaaa Aaa Aaa Aa Aaaaa Aaa Aaa Aaaaa
Aaaaaaaaa Aaaaaaaaaa Aaaaaaaa Aaaa Aa Aaa Aaa Aaaaaaa a Aaa Aaaa Aaaaaa Aa Aaaaaa Aaaaa Aaaaaa Aa Aaaaaa
🔒Explores the cross-process trust model and how silent failure at a sandbox boundary creates an exploitable file-read primitive
더 확인하려면 구독해 주세요
Audit directions
a Aaaaaa Aaaa Aa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaa Aaa Aaaaaaaaa Aaa Aaaaaaa Aaaaaa Aaaa Aaaaa Aa Aaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa a Aaaa Aaaaaa Aa Aa Aaaa Aaa Aaaaaa Aaaa Aaaaa Aaaaaaa Aaaaaaaaa Aa Aa Aa Aaaaaaaaaa Aaaaaaaa Aaa Aaaa Aaaaaaaaaa Aa Aa Aa Aaa Aaaa Aaaa
a Aaaaaaaaaaa Aaaaaaaa a Aa Aaa Aa Aaaaaaaa Aaa Aaaaa Aa Aaa Aaaa Aa Aaaaaa Aa Aaaaaaaaa Aaaaaaaaaa Aaaaa Aaaaaaa Aaaaaaaaaa Aaaa Aaaaaaaaaa a Aaaaaaaaaaaaaaaa Aaaaaaaaaaa Aaa Aaaa Aaaa Aaaa Aaaa Aaaa Aaa Aaaaaaaaa Aa Aa Aaa Aaa Aa Aa Aaaaa Aaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaa Aaaaaaaaaaaaaaaaaa Aaaaa Aaaa Aa Aaaaa
a Aaaaaaaaaaaa Aaaaa Aaa Aaaaaa Aaaaaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaa Aaaaaa Aaaaaaa Aaaaaaaaa Aa Aa Aaaa Aa Aaa Aaaaaaa Aaaaaa Aaaa Aaaaa Aaaaaaaaaa Aa Aaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaa Aaa Aaa Aaaa Aa Aa Aaa Aaa Aaaa Aaaaaa Aaaaa Aaaa Aaaa
🔒Multiple audit patterns identified around IPC sandbox extension validation, with concrete call sites and search targets
더 확인하려면 구독해 주세요