[8] NetworkProcess setRawCookie IPC validation
Severity: High | Component: WebKit NetworkProcess | fb75cae
두 가지 문제가 동시에 수정되어 High로 평가됩니다. 손상된 WebProcess가 임의의 registrable domain에 cookie를 심을 수 있으며(session fixation, login-CSRF), 잘못된 commentURL이 처리되지 않은 NSException을 통해 NetworkProcess를 crash시킬 수 있습니다.
NetworkConnectionToWebProcess::setRawCookie는 allowsFirstPartyForCookies만 검증했을 뿐, cookie의 domain 필드와 url 파라미터는 검증하지 않았습니다. 이로 인해 손상된 renderer는 evil.com 세션에서 bank.com을 대상으로 cookie를 심는 것이 가능했습니다.
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
MESSAGE_CHECK(allowCookieAccess != NetworkProcess::AllowCookieAccess::Terminate);
+ MESSAGE_CHECK(RegistrableDomain::uncheckedCreateFromHost(cookie.domain).matches(firstParty));
+ MESSAGE_CHECK(RegistrableDomain(url).matches(firstParty));
Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm
+ BEGIN_BLOCK_OBJC_EXCEPTIONS
auto nsCookies = createNSArray(cookies, [] (auto& cookie) -> NSHTTPCookie * {
return cookie.createNSHTTPCookie().autorelease();
});
- BEGIN_BLOCK_OBJC_EXCEPTIONS
[nsCookieStorage() setCookies:nsCookies.get() forURL:url.createNSURL().get() mainDocumentURL:mainDocumentURL.createNSURL().get()];
END_BLOCK_OBJC_EXCEPTIONS
Patch Details
두 개의 MESSAGE_CHECK가 추가되어, cookie.domain과 url 인자가 firstParty와 동일한 registrable domain에 속하는지 확인합니다. 또한 BEGIN_BLOCK_OBJC_EXCEPTIONS 매크로의 범위가 확장되었습니다. 이제 cookie.createNSHTTPCookie() 변환 루프 전체를 감싸도록 변경되어, Foundation initializer가 commentURL 등 잘못된 속성에 대해 NSException을 발생시키더라도 안전하게 처리됩니다.
권한 있는 프로세스 신뢰 경계에서 WebProcess가 전달한 IPC 인자를 그대로 신뢰하면서, 보안상 중요한 필드(cookie domain vs. firstParty)를 선언된 origin에 대해 교차 검증하지 않는 패턴.
Background
WebKit의 multi-process 아키텍처에서 WebProcess는 sandbox 내에서 실행되며, NetworkProcess 관점에서는 신뢰할 수 없는 주체입니다. 따라서 모든 IPC 인자는 반드시 검증되어야 합니다. RegistrableDomain은 Public Suffix List 기반으로 산출된 eTLD+1을 나타냅니다. cookie.domain은 플랫폼 cookie store가 해당 cookie를 어느 사이트에 전송할지 결정하는 Domain= 속성입니다. BEGIN_BLOCK_OBJC_EXCEPTIONS는 감싸진 블록에 @try/@catch를 설치하는 매크로로, NSException이 발생해도 C++ 스택 프레임으로 전파되지 않습니다.
Analysis
전형적인 "NetworkProcess가 WebProcess 제공 튜플을 신뢰하는" 패턴입니다. (firstParty, url, cookie) triple에서 한 요소만 검증하고 나머지 두 요소를 그대로 통과시킨 구조인 셈입니다. 함께 수정된 BEGIN_BLOCK_OBJC_EXCEPTIONS 배치 버그는 반복적으로 등장하는 문제로, 이 매크로는 같은 C++ 함수 내의 변환 헬퍼를 포함하여 예외를 발생시킬 수 있는 모든 Objective-C 호출을 반드시 감싸야 합니다.
a Aa Aa Aaa Aaaaaa
Aaa Aaaaaa Aaa Aaa Aaaa Aaaaaaaaaa Aaaa Aaaaaaaaaa Aaaaa Aa Aa Aaaaaa Aaaa Aaaaaaaaaaaaa Aaaaaa Aaa Aaaa Aaaaaaaa Aaaaa Aaaaaaaaaaaaaaaa Aaaaaaaaaa Aa Aaaa Aaa Aaaaaaaaaaaaaa Aaaa Aaaaaa Aaaaaa Aaaaaa Aaaaaaaaa Aaaa Aaaaaaa Aaaaaa Aa Aaaaaaaaa Aa Aaa Aa Aaaaaaa Aaaaaa Aaaaa Aaaaaaa Aaaaaaaaa Aaaaaaaaaaa Aaaa Aaa Aaaaaaa
Aaa Aaa Aaaaaaaaaaaaa Aaa Aaaaaaaaaaaaaa Aaaa Aa a Aa Aaa Aaaaa Aaaaaaa
a Aaaa Aaaaaaaa Aaaaaaaaaaa Aa Aa Aaaaaaaaaaaaaa Aaa Aaaaaaaaaaaaa Aa Aaa Aaaaaaa Aaa Aaaaaa Aaaaaa Aaaaa Aaa Aaaaaa Aaa Aaaaaaaaa Aa Aaa Aa Aaaaaaaaaa a Aa Aaa a Aa Aaaa Aaaaaaaaa Aaa a Aaaaa
🔒The cross-process trust model around cookie IPC and the realistic attacker model for chaining this with a renderer compromise are analyzed in depth, alongside a secondary NetworkProcess availability angle.
더 확인하려면 구독해 주세요
Audit directions
a Aaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaa Aaaaaa Aa Aaaaaaaaaaaaaa Aaa Aaa a Aaaaaaaaa Aaa Aaaa Aaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaa Aa Aaa Aa Aaaaaaa Aaaaaaaaaaaaaaaaaaa Aaaaaa Aaaaaaaaaaa Aaaaaaa Aaaaaa Aaaaaa Aa Aaaaaaaaaaaaa Aa Aaa Aaaaa Aaaaaa
a Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aa Aaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaa Aa Aa Aa Aaaaaaaaaaa Aaa Aaaa Aaa Aaaaaa Aaaaaaaaaaaaaaaaa Aa Aaa Aaaaa Aaaaaa
a Aaaaaaaaaaaaaaaaaaaa Aaaaaa Aa Aaaaa Aaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaaa Aaaaaa Aaaaaa a Aaaaaaaaa Aaaaaaa Aaaaaaaaaaaaa Aaaaaaaaaa Aaaaaa Aaa Aa Aaa Aaa Aaaa Aaaaa Aaaaaa
a Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aa Aaaaaaaaaaaaa Aaaaaa Aa Aaaa Aaaaa Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Aaaaaaaaaaaaa Aaaaa Aa Aaaaa Aaaaa Aaaa Aaaa Aaaaaaaaaa Aa Aaaa Aaaaaa
🔒Four reusable audit patterns identified spanning IPC validation discipline and Objective-C exception scoping, with concrete grep targets for variant discovery across the NetworkProcess surface.
더 확인하려면 구독해 주세요