← All issues

[7] [WebCore] Validate SameSite initiator in FrameLoader::load

Severity: High | Component: WebCore FrameLoader | 093f346

FrameLoader::load에서 addSameSiteInfoToRequestIfNeeded를 호출할 때 initiator 인자가 누락되면, 모든 navigation 요청이 same-site로 분류됩니다. 이때 isSameSiteUnspecified=false, isSameSite=true로 설정되었고, cross-site initiator 여부와 무관하게 목적지의 SameSite=Strict 쿠키가 요청에 첨부되었습니다. High로 평가된 이유입니다.

FrameLoader::load는 이제 initiator를 인식하는 addSameSiteInfoToRequestIfNeeded(loader->request(), initiator) 형태로 호출합니다. 이를 통해 하위 처리 단계의 updateRequestAndAddExtraFields가 SameSite disposition을 올바르게 재계산할 수 있게 되었습니다.

Source/WebCore/loader/FrameLoader.cpp

- addSameSiteInfoToRequestIfNeeded(loader->request());
+ addSameSiteInfoToRequestIfNeeded(loader->request(), initiator);

SameSite cookie policy bypass: initiator를 생략한 overload가 요청을 무조건 same-site이자 "specified"로 표시하여, 이후 cross-site 재계산을 억제합니다.

단일 호출 지점에서 인자 목록이 확장되었습니다. initiator가 전달되면 2인자 형태의 helper가 올바르게 분류하는 구조는 이미 갖춰져 있었으며, bypass를 유발한 것은 1인자 overload의 기본값이었습니다.

SameSite 쿠키 귀속은 요청 준비 단계에서 계산됩니다. isSameSite 값이 SameSite=Strict 또는 SameSite=Lax 쿠키의 첨부 여부를 결정하는 기준입니다. disposition이 unspecified 상태이면 하위 레이어가 initiator를 기반으로 이를 계산하며, specified 상태이면 해당 필드를 그대로 사용합니다.

패치 이전에는 addSameSiteInfoToRequestIfNeeded의 1인자 형태가 isSameSite=true, isSameSiteUnspecified=false로 설정했습니다. updateRequestAndAddExtraFieldsisSameSiteUnspecified가 true일 때만 initiator 기반 재계산을 수행합니다. disposition이 이미 specified 상태로 설정되어 있으면, 재계산 자체가 억제되었습니다. 결과적으로 attacker.example에서 시작된 victim.example로의 navigation이 same-site로 분류되었고, 네트워크 레이어는 victim.example의 SameSite=Strict 쿠키를 송신 요청에 첨부했습니다.

🔒

How a missing argument to a single helper call silently overrode the entire SameSite=Strict cookie defense for cross-site navigations — and what the broader two-phase policy stamping pattern means for cookie boundary integrity.

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

🔒

Four reusable audit patterns covering SameSite stamping call sites, navigation entry points that drop the initiator, initial-document predicates, and cross-platform cookie policy parity.

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