← All issues

Cherry-pick 305413.548@safari-7624-branch — Web Locks origin validation

49c4af0

+bool WebProcessProxy::hasCommittedClientOrigin(const WebCore::ClientOrigin& clientOrigin) const
+{
+    return m_committedClientOrigins.contains(clientOrigin);
+}
+void WebProcessProxy::didCommitLoadClientOrigin(const WebCore::ClientOrigin& clientOrigin)
+{
+    m_committedClientOrigins.add(clientOrigin);
+}

Web Locks API(navigator.locks)는 페이지에 이름 기반의 origin 범위 mutex를 제공합니다. 이 mutex들은 UI process의 레지스트리(WebLockRegistryProxy)가 관리합니다. Renderer는 IPC를 통해 레지스트리에 접근하며, 메시지에 ClientOrigin을 함께 전송합니다. 손상된 renderer에서 오는 IPC는 신뢰할 수 없으므로, UI process는 요청된 origin이 실제로 해당 process에서 정상적으로 로드된 것인지 독립적으로 검증해야 합니다.

이 commit은 IPC origin 위조 취약점을 수정합니다. WebFrameProxy::didCommitLoad가 각 ClientOriginWebProcessProxy::m_committedClientOrigins에 기록하도록 변경되었습니다. 또한 WebLockRegistryProxy::requestLock은 처리 전에 해당 origin이 실제로 그 web process에서 commit된 것인지 검증합니다. releaseLock, abortLockRequest, snapshot, clientIsGoingAway도 동일한 검증을 적용합니다. 패치 이전에는 이런 검증이 전혀 없었습니다. UI process는 renderer가 선언한 origin을 그대로 수용했습니다.

이 패치 이전에는 손상된 renderer가 lock 요청에서 임의의 ClientOrigin을 위조할 수 있었습니다. 이를 통해 완전히 다른 origin에 속한 lock을 획득하거나, 차단하거나, 열람하는 것이 가능했습니다.

🔒

Origin registration paths for special contexts and cross-handler coverage gaps are worth examining for bypass conditions.

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