[28] ModelProcess ASSERT promoted to MESSAGE_CHECK for duplicate identifier
Rated Low because the diff promotes a debug-only ASSERT on a renderer-supplied identifier to a release-enforced MESSAGE_CHECK in
ModelProcessModelPlayerManagerProxy::createModelPlayer, and adds symmetric checks todeleteModelPlayer/unloadModelPlayer.
Source/WebKit/ModelProcess/ModelProcessModelPlayerManagerProxy.cpp
IPC-supplied identifier validation enforced only by debug-only ASSERT instead of release-build MESSAGE_CHECK, leaving the boundary check absent in shipping binaries.
HashMap::add is insert-if-absent: with ASSERT compiled out, a colliding identifier silently returns the existing entry, producing state confusion rather than a crash. ModelProcess is comparatively new (ENABLE(MODEL_PROCESS)) and its IPC surface has not had the years of audit pressure WebContent↔UIProcess has received.
This vulnerability weakens the IPC trust boundary between WebContent (untrusted) and ModelProcess (a privileged auxiliary process that hosts model rendering).
Audit directions
- IPC handlers validating attacker-supplied identifiers with
ASSERTinstead ofMESSAGE_CHECK. GrepSource/WebKit/UIProcess/,NetworkProcess/,GPUProcess/,ModelProcess/, especiallyASSERT(.*contains.*identifierimmediately followed bym_*.add(. - ObjectIdentifier-keyed maps in auxiliary processes with asymmetric create/delete validation. Audit
ModelProcessModelPlayerProxy,RemoteRenderingBackend,RemoteAudioDestinationManager,RemoteMediaPlayerManagerProxy. - New IPC surfaces (
ENABLE(MODEL_PROCESS)and similar) inheriting WebContent conventions incompletely. ReviewSource/WebKit/ModelProcess/forASSERTon values originating fromIPC::Decoder.