[10] [WebKit] Validate Badging IPC origin against WebProcessProxy
Severity: Medium | Component: WebKit UIProcess Badging | fd1fbad
diff는 renderer가 제공한 origin에 대해 UI process의 badging IPC를 강화하고, coreipc.js 기반의 spoof가 거부되는지 검증하는 regression test를 등록합니다. 영향은 피해 origin에 대한 OS 수준 badge spoofing에 한정되며, 추가적인 primitive가 없어 Medium으로 평가되었습니다.
UI process의 app-badge IPC handler는 전달된 origin이 송신 WebProcessProxy에서 호스팅되는 frame, worker, 또는 등록된 Service Worker에 해당하는지 검증합니다. runAppBadgeSpoofTest regression test는 공격자 페이지에서 coreipc.js 형태의 위조 IPC를 실행하고, spoofed origin에 등록된 delegate가 호출되지 않음을 확인합니다.
Source/WebKit/UIProcess/WebPageProxy.cpp
Cross-origin badging spoof 차단: UI process는 이전에 renderer에서 전달된 임의의 origin 필드를 수용하고, OS로 업데이트를 전달했습니다.
Patch Details
handler는 sender에서 호스팅된 frame, worker, Service Worker를 순회하며 origin을 검증합니다. 불일치하면 renderer를 종료하는 경로로 라우팅됩니다. BadgeDelegate에는 FAIL() 분기가 추가되었으며, spoof test를 통해 spoof가 거부되는지 확인합니다.
Background
Badging API(navigator.setAppBadge(...))는 origin별 Service Worker 또는 document에서 UI process로 전달됩니다. UI process는 OS와 통신하여 앱 아이콘 badge를 설정합니다. threat model에서 renderer는 공격자로 가정됩니다.
Analysis
패치 이전에는 UI process의 message handler가 전달된 origin 필드를 그대로 수용했습니다. 침해된 renderer는 관련 없는 origin(예: 금융 앱이나 메시지 앱의 등록된 Service Worker site)을 지정하는 위조 IPC를 전송할 수 있었습니다. 이를 통해 해당 origin 대신 OS 수준의 badge를 업데이트하게 만드는 것이 가능했습니다.