← All issues

[8] [WebKit] Validate firstPartyForCookies on StartDownload/ConvertMainResourceLoadToDownload IPC

Severity: High | Component: WebKit NetworkProcess | e30ca29

이 패치가 High로 평가된 이유는, 손상된 WebContent process에서 전달되는 임의의 firstPartyForCookies URL을 검증 없이 수락하던 NetworkProcess의 download 시작 IPC에 origin 검증이 추가되었기 때문입니다. 패치 이전에는 NetworkProcess가 공격 대상 사이트의 SameSite 쿠키를 공격자가 조작한 download 요청에 그대로 첨부했습니다.

NetworkConnectionToWebProcess::startDownloadconvertMainResourceLoadToDownload는 전달된 firstPartyForCookies가 호출한 WebContent process가 정당하게 처리할 수 있는 origin인지 검증하도록 변경되었습니다.

Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp

+ MESSAGE_CHECK(allowsFirstPartyForCookies(firstPartyForCookies));
downloadManager().startDownload(...);

Download 경로에서의 IPC origin 스푸핑: 손상된 renderer가 firstPartyForCookies를 위조하면, NetworkProcess가 피해자 origin의 쿠키를 공격자가 지정한 요청에 첨부합니다.

download IPC를 수신하는 두 handler 모두에 MESSAGE_CHECK가 추가되었습니다. 전달된 first-party URL이 해당 WebContent process가 실제로 로드한 origin인지 검증합니다. 나머지 요청 필드는 기존과 동일하게 전달됩니다.

firstPartyForCookies는 네트워크 계층이 쿠키 귀속과 SameSite 계산에 활용하는 URL입니다. 손상된 renderer를 가정하는 threat model에서는, NetworkProcess로 유입되는 모든 필드를 해당 연결이 실제로 로드한 origin 목록과 대조해 재검증해야 합니다.

손상된 renderer는 firstPartyForCookies()가 공격 대상 사이트를 가리키는 ResourceRequest를 조작해 Messages::NetworkConnectionToWebProcess::StartDownload를 통해 전송했습니다. NetworkProcess는 이 URL을 HTTP 요청 조립에 활용했고, NetworkStorageSession은 해당 origin의 쿠키(SameSite=Strict 포함)를 요청에 첨부했습니다. 결과적으로 이 download는 피해자 origin에 대한 정상적인 top-level navigation에서 비롯된 것처럼 전송되었고, 사용자의 인증 세션을 그대로 이용했습니다.

🔒

How the WebContent↔NetworkProcess trust boundary breaks down when an IPC handler accepts a web-process-supplied origin field, and what a compromised renderer can do with it

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

🔒

Multiple reusable IPC-validation audit patterns identified, with concrete starting points across the NetworkProcess and storage subsystems

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