[28] ModelProcess ASSERT promoted to MESSAGE_CHECK for duplicate identifier
ModelProcessModelPlayerManagerProxy::createModelPlayer에서 renderer-supplied identifier에 대한 debug 전용 ASSERT를 release 빌드의 MESSAGE_CHECK로 격상한 diff로, Low로 평가되었습니다.deleteModelPlayer/unloadModelPlayer에도 대칭적인 check가 추가되었습니다.
Source/WebKit/ModelProcess/ModelProcessModelPlayerManagerProxy.cpp
IPC로 전달된 identifier 검증을 debug 전용 ASSERT에만 의존하여, 실제 배포 바이너리에서는 경계 검사가 존재하지 않는 패턴.
HashMap::add는 key가 없을 때만 삽입하는 insert-if-absent 방식으로, ASSERT가 컴파일에서 제거된 상태에서 identifier가 충돌하면 삽입이 조용히 무시되고 기존 entry가 그대로 남습니다. crash 없이 state confusion이 유발됩니다.
ModelProcess는 비교적 신규 컴포넌트(ENABLE(MODEL_PROCESS))로, IPC surface에 대한 점검이 WebContent↔UIProcess 수준으로 축적되지 않은 상태입니다.
이 vulnerability는 WebContent(비신뢰)와 ModelProcess(model rendering을 담당하는 privileged auxiliary process) 사이의 IPC trust 경계를 약화시킵니다.
Audit directions
MESSAGE_CHECK대신ASSERT로 attacker가 제공한 identifier를 검증하는 IPC handler.Source/WebKit/UIProcess/,NetworkProcess/,GPUProcess/,ModelProcess/를 검색하되, 특히m_*.add(직전에 위치한ASSERT(.*contains.*identifier패턴을 중점적으로 살펴봅니다.- auxiliary process 내에서 create/delete 검증이 비대칭적인 ObjectIdentifier 키 맵.
ModelProcessModelPlayerProxy,RemoteRenderingBackend,RemoteAudioDestinationManager,RemoteMediaPlayerManagerProxy를 점검합니다. - WebContent 관행을 불완전하게 상속한 신규 IPC surface (
ENABLE(MODEL_PROCESS)등).Source/WebKit/ModelProcess/에서IPC::Decoder로부터 유래한 값에 대한ASSERT사용을 살펴봅니다.