This Week in WebKit — June 06 - June 12, 2026
484
전체 commit 수
31
Security fix 수
High 심층 분석 6건 + 추가 보안 관련 25건
114
기여자 수
Top components
WebCore · Platform · WebKit · JSC · Other
Notable development
-
[GTK][WPE] Skia Compositor: use deferred display lists to paint tiles
refactor
-
[JSC] `Heap::clearConcurrentRetainedDataIfPossible()` should not run while concurrent marking is active
bug
-
[JSC] Move RegExp.prototype[Symbol.match] to C++
optimization
-
[JSC] Add DFG MultiGetByVal and MultiPutByVal
optimization
-
[JSC] `isDefinitelyNonThenable` Structure cache can go stale when the prototype belongs to another realm
feature
-
[YARR] Add auto-possession optimization
bug
-
Implement calc-mix()
optimization
Other security-relevant changes
- [WebCore DOM Range] (Data race UAF)
ab48873— Range 경계 지점(m_start, m_end)에 대한 변경에 locking이 추가되었습니다. garbage collection 도중 동시 변경이 발생하면 container node에서 use-after-free가 유발될 수 있었기 때문입니다. - [WebCore Streams] (type confusion)
96ec73a— ReadableStream cancel handler에서jsCast를jsDynamicCast로 교체했습니다. 가짜 Promise 객체를 이용해 runtime 검사를 우회하고 메모리를 오염시키는 type confusion을 방지하기 위함입니다. - [WebCore DOM] (UAF)
934ecdc—Node::shadowIncludingRoot의 heap use-after-free를 수정했습니다. node가 분리될 때m_shadowIncludingRoot가 초기화되지 않아 stale pointer가 남는 것이 원인이었습니다. - [JSC DFG] (type confusion)
c7fe05e— DFG JIT의typeof/ToBoolean/CompareEqconstant folding이MasqueradesAsUndefined객체의 realm 의존적 의미를 올바르게 반영하도록 수정되었습니다. cross-realm 검사에서 type confusion이 발생하는 문제를 방지합니다. - [JSC BBQJIT] (aliasing)
a6f42da— BBQJIT tail call shuffle에서 16바이트 정렬된 caller temp와 packed callee argument(v128 범위 등) 사이에 겹치는 stack slot을 감지하지 못하는 문제를 수정했습니다. 이 버그로 인해 값이 최종 위치로 이동하기 전에 덮어써지는 상황이 가능했습니다. - [GPU Process AVF image decoder] (IPC boundary validation)
2f07319— GPU process 경계에MESSAGE_CHECK를 추가하여 remote AVF image decoder 생성 전 MIME type 지원 여부를 검증하도록 했습니다. WebProcess가 IPC를 통해 지원되지 않는 type을 전송하고 검증되지 않은 decoder 경로를 실행하는 것을 방지합니다. - [WebCore FocusController] (UAF)
7aacc65— shadow tree 내부의 포커스 요소가 event 처리 도중 제거되고 garbage collected되는 경우, blur event dispatch에서 use-after-free가 발생하는 문제를 수정했습니다. 패치 이전에는 해제된 메모리에 접근하여 브라우저가 crash되었습니다. - [JSC FTL OSR] (hole handling)
392f508— FTL OSR exit materialization 과정에서operationPopulateObjectInOSR이 기록되지 않은 array slot을putDirectIndex에 전달하지 않고 올바르게 건너뛰도록 수정했습니다. 초기화되지 않은 값이 잘못 처리되는 문제를 방지합니다. - [WebKit focus / gesture validation] (validator bypass)
f3a769a— window 생성과 focus 작업 전반에서 user gesture 소비 여부를 추적하여 popunder attack을 방지합니다.SetFocus및FocusRemoteFrameIPC에UserGestureTokenIdentifier를 추가하여 gesture가 이미 소비된 경우 focus 요청을 거부합니다. - [WebCore SharedWorkerScriptLoader] (CSP bypass)
d65bd81—blob:/data:URL에서 생성된 SharedWorker의 CSP 상속 문제를 수정했습니다. 기존에는importScripts()호출 시 생성 문서의 CSP를 우회하는 것이 가능했습니다. - [WebCore CSP] (policy loss)
f8ed382—setHTTPHeaderField()가 여러 CSP 헤더를 추가하는 대신 덮어써 CSP 정책이 유실되는 버그를 수정했습니다. 이제blob:문서는 생성자로부터 마지막 정책만이 아닌 모든 CSP 정책을 올바르게 상속받습니다. - [JSC DFG] (hardening)
0f5acb5— DFG가 Promise 서브클래스에 대해Promise.resolve를 identity로 잘못 folding하던 문제를 수정했습니다. 사양에 따라 이제 builtin Promise에만 해당 최적화를 적용합니다. - [JSC wasm] (race condition)
24362e6— WebAssembly name section 파싱 과정에서 compiler 스레드와 main 스레드가 동기화 없이 동시에 해당 섹션에 접근하는 data race를 수정했습니다. 이제 release/acquire accessor를 통해 접근이 이루어지며, 초기 name section 참조를 유지함으로써 lifetime 안전성이 보장됩니다. - [ANGLE validation] (OOB read)
08713e9— WebGLdrawElements()에서 큰UNSIGNED_INT인덱스에 대한 잘못된 검증 문제를 수정했습니다. 올바른 범위 검사를 막는 잘못된 explicit static cast를 제거한 것이 핵심입니다. 이 버그를 통해 공격자가 제어하는 인덱스 값으로 buffer 경계 밖에 접근하는 것이 이론적으로 가능했습니다. - [WebCore Streams] (UAF)
42ec79c— GC 스레드가m_controller를 순회하는 동안 main 스레드에서 해제될 수 있는 use-after-free를 수정했습니다. stream을JSValueInWrappedObject로 저장하는 방식으로 변경하여 스레드 경계를 넘어 올바르게 관리되도록 했습니다. - [WebCore AV1 decoder] (Undefined left-shift)
74eb129— AV1 ULEB 크기 디코딩에서uint8_t를 32비트 이상 left-shift하면 파싱된 크기가 오염될 수 있는 undefined behavior를 수정했습니다.size_t로 캐스팅하여 해당 UB를 방지합니다. - [WebCore graphics] (OOB write)
d343d17—removeClient()에서 반전된 bounds check를 수정했습니다. 이 버그는 유효하지 않은 인덱스 접근 시 out-of-bounds write를 유발하는 동시에, 유효한 client의 제거를 방해하고 있었습니다. - [WebCore CSP] (CSP bypass)
3ac584d— sandboxed srcdoc iframe에서 meta CSP 태그 처리 도중 상속된 self-origin이 opaque origin으로 초기화되는 문제를 수정했습니다. 이 버그는 cross-origin base URL injection을 가능하게 하는 CSP'self'우회로 이어졌습니다. - [WebCore WebGL] (UAF)
6eff33b—EXTDisjointTimerQuery에서 event loop task에 예약된 query 객체가 실행 전에 garbage collected될 수 있는 use-after-free를 수정했습니다. 적절한 ref-counting을 추가하여 task가 완료될 때까지 객체가 유지되도록 했습니다. - [WebCore badging] (hardening)
3fa40e6— W3C 사양에 따라Navigator.setAppBadge/clearAppBadge에 same-origin 검사를 강제 적용하여 cross-origin iframe이 app badge를 설정하는 것을 차단했습니다. 기존에는 cross-origin 스크립트가 이 작업에 성공할 수 있어 origin isolation 원칙을 위반하는 상태였습니다. - [WebKit Safe Browsing] (bypass)
0e4040c— COOP process swap 도중 response policy handler보다 먼저 도착한 lookup 결과가 safe browsing 경고를 건너뛸 수 있는 우회 문제를 수정했습니다. 이제 lookup이 완료되는 즉시 경고가 표시됩니다. - [WebCore DOM] (race condition)
f88c5d9—Node::traverseToOpaqueRoot의 race condition을 수정했습니다. GC marking 단계에서 계산하는 대신 opaque root를 Node에 직접 저장하는 방식으로 변경했습니다. garbage collection 도중 발생할 수 있는 동시 접근 문제를 방지합니다. - [WebCore SpeechSynthesis] (null dereference)
ccfb13a— speech synthesis delegate callback에 null 검사를 추가했습니다. callback이 대기 중인 상태에서m_synthesizerObject가 해제되면 null dereference crash가 발생할 수 있었기 때문입니다. - [WebCore SourceBuffer] (crash)
1fd5d97—SourceBufferPrivate::removeCodedFramesInternal의 crash를 수정했습니다. 유효하지 않은MediaTime비교가 unordered 값을 반환하면 guard를 우회하여 유효하지 않은 time 값이 map의 key로 사용되는 문제가 있었습니다. - [WebCore Streams] (lifetime fix)
64ad3f3—stream.pipeTo()error 처리 도중 iframe이 분리될 때StreamPipeToState::globalObject에서 crash가 발생하는 문제를 방지했습니다.context->globalObject()가 null을 반환할 수 있는데,jsDynamicCast내부에서 검사 없이 역참조하는 것이 원인이었습니다.