SharedArrayBuffer enabled for cross-origin-isolated GLib ports
Component: JSC WebAssembly | 104506c
SharedArrayBuffer(SAB)를 사용하면 여러 thread/worker가 복사 없이 backing memory를 공유할 수 있습니다. 다만 바로 이런 세밀한 공유 상태가 cache-timing 및 speculative side channel을 가능하게 만듭니다. 그래서 브라우저는 SAB를 cross-origin isolation(COOP+COEP) 조건 뒤에 두고 있습니다. 이번 commit으로 GLib 기반 WebKit(WPE, GTK)에서도 origin이 cross-origin isolated 상태이면 JSC_useSharedArrayBuffer가 설정되도록 변경되었습니다. 이와 함께 COI WPT 테스트 35개의 skip이 해제되었고, 오래된 baseline 4개가 제거되었습니다.
Significance
Spectre 계열 timing attack의 핵심 primitive인 SAB와 그에 따른 위험 표면이 처음으로 WPE/GTK/Android까지 확장되었습니다. 해당 flag는 VM 시작 직전, WebProcess::initializeWebProcess에서 설정됩니다. commit message에 따르면 Cocoa는 process signal handling 때문에 flag를 더 이른 시점에 설정해야 할 수도 있습니다. 반면 GLib/Android process는 service 형태로 spawn되므로 이런 early-init 제약이 없습니다. 즉 늦은 시점의 설정은 의도된 것이며, 이것으로 충분합니다.
Audit directions
Narrow: 모든 WPE/GTK 진입 경로에서 COOP/COEP 조건이 실제로 flag 앞단에서 동작하는지 확인해야 합니다. Isolation 없이 SAB를 얻는 페이지가 존재한다면 그것이 곧 실패 사례입니다. Wider: initializeWebProcess에서 VM 시작 시점을 기준으로 설정되는 port별 flag는 모두 타이밍에 민감합니다. side channel과 관련된 다른 JSC flag에도 같은 late-set 패턴이 있는지 점검할 필요가 있습니다. 판별 신호는 initializeWebProcess에서 토글되면서 process 초기화 순서에 관한 주석이 붙어 있는 JSC_use* flag입니다.