Open-panel image transcoding routed to the requesting iframe's process
Component: WebKit UIProcess | d0321d4
WebKit의 Site Isolation 모델에서는 cross-site iframe마다 별도의 WebProcess가 할당될 수 있습니다. 파일 선택 과정은 UIProcess가 중재합니다. 특히 macOS에서는 선택된 이미지를 transcoding한 뒤 sandbox extension을 부여하고, IPC로 파일 URL을 전달하는 경우가 있습니다. 다만 기존의 전달 경로는 page당 web process가 하나라는 가정(legacyMainFrameProcess())에 기반하고 있었습니다. 결과적으로 process-per-site invariant가 깨지는 상황이 발생했습니다. 이 commit에서는 didChooseFilesForOpenPanelWithImageTranscoding이 요청을 보낸 WebProcessProxy&를 명시적으로 인자로 받도록 변경되었습니다. sandbox extension 부여와 IPC 전송 역시 이 process를 기준으로 수행됩니다.
Significance
파일 input 결과와 해당 sandbox extension이 요청한 frame을 소유한 process로 정확히 전달되도록 수정되었습니다. 이로써 cross-site iframe이 사용자가 선택한 파일을 받지 못한 채 별도의 오류 없이 실패하던 문제가 해결되었습니다.
Audit directions
향후 점검 방향: UIProcess의 전달 경로 중에는 sandbox extension 부여나 파일/URL 전달에 여전히 legacyMainFrameProcess()를 사용하는 곳이 남아 있을 수 있습니다. 이런 경로는 Site Isolation 환경에서 capability를 잘못된 process로 전달할 가능성이 있습니다. 따라서 남아 있는 runOpenPanel/didChooseFilesForOpenPanel 계열 함수와 다른 sandbox extension 부여 지점에서 legacyMainFrameProcess() 사용 여부를 점검할 필요가 있습니다. 판별 단서: grantSandboxExtension 호출이나 파일 URL IPC 전송 바로 옆에 위치한 legacyMainFrameProcess() 호출.