This Week in WebKit — June 13 - June 19, 2026
Featured
A JIT stub outlives collection by refcount, which is fine until the cell it points at doesn't. Page script builds that cache from any custom accessor; the rest depends on who reclaims the slot.
A plain eval of an object literal hands back a JS object whose declared shape disagrees with its real storage. The guard for this exact hazard was already in that function.
Attacker-chosen size, attacker-chosen moment — and what lands in dialog.returnValue is script-readable. The free window is a callback the page wrote itself.
The page picks the number; the graphics process picks nothing. Realistically it lands as a deterministic crash — what it would take to make it a write is the interesting part.
The bad index survives into a string built over out-of-range bounds. One regex from page script is the whole trigger; the surprise is which optimization was still armed.
Security fixes
- Subscriber: teardown callbacks freed while a GC thread walks the snapshot
- ANGLE IndexRange: stored inclusive count replaced by a derived one
Other security-relevant changes
- [WebKit pasteboard proxy] (sandbox bypass)
0d3713d— pasteboard IPC에서 권한 검사가 우회되는 문제가 수정되었습니다.getPasteboardPathnamesForType()가canAccessPasteboardData()대신canAccessPasteboardTypes()를 검사하고 있었는데, 후자는 drag-over 상태에서도 허용되는 권한이라 drop이 일어나기 전부터 파일 경로가 노출되는 상황이 가능했습니다. - [WebCore RTCEncodedStreamProducer] (type confusion)
8384c84—RTCEncodedStreamProducer::writeFrame에 type 검증이 추가되었습니다. 이를 통해 audio frame이 video sender에 enqueue되거나 그 반대 상황이 발생하는 것을 방지하며, out-of-bounds read로 이어지던 type confusion이 해결되었습니다. - [WebKit NetworkProcess] (sandbox bypass)
5ec3ee1— local file load에 대한 sandbox extension 검사 위치가 WebContent에서 Networking process로 이동되었습니다. 접근 제한이 우회되는 경로를 차단하기 위한 조치입니다. - [JSC AccessCase] (UAF)
055680a— AccessCase의 CustomAccessorGetter/CustomAccessorSetter에 customSlotBase 추적 기능이 추가되었습니다. JIT-cached reference가 slot base의 garbage collection보다 더 오래 살아남으면서 발생하던 use-after-free를 방지합니다. - [WebCore HTMLDialogElement] (UAF)
7075344—HTMLDialogElement::handleCommandInternal의 use-after-free가 수정되었습니다. beforetoggle 이벤트 핸들러가 button의 value 속성이close()로 전달되는 도중 이를 제거할 수 있었고, 그 결과 문자열이 dangling 참조 상태가 되는 문제였습니다. - [WebGPU CommandEncoder] (UAF)
5b76a52— render pass 설정에서 texture view를 사용하기 전에 해당 view가 이미 destroy되지 않았는지 검증하도록 변경되었습니다. 무효화된 WebGPU 리소스를 참조하려 할 때 발생하던 use-after-free를 방지합니다. - [JSC Wasm] (UAF)
9a16de4— Wasm JIT의 use-after-free가 수정되었습니다.Heap::stopThePeriphery()가 JS thread는 멈추지만 Wasm thread는 멈추지 않기 때문에, callsite 수집과 repatch 사이에서 BBQCallee가 먼저 소멸할 수 있는 문제였습니다. strong reference를 통해 BBQCallee를 생존시켜 그것이 소유한 OMGOSREntryCallee를 유지하도록 했습니다. - [WebCore FEColorMatrix] (validator bypass)
b5b06c0— decoding 이전 IPC 단계에서 FEColorMatrixvalues벡터 길이를type과 대조해 검증하는 절차가 추가되었습니다. GPU process 메시지에서 web content가 type과 values를 불일치시켜 전송할 때 발생하던 crash를 방지합니다. - [WebCore Attr] (UAF)
8d71b72— GC thread가 main thread의 destruction과 동시에m_element를 역참조하면서 발생하던 use-after-free가 수정되었습니다. cross-thread 동기화를 위해 lock과 CheckedPtr이 추가되었습니다. - [WebKit / NetworkProcess] (sandbox bypass)
f10b871— InstallMockContentFilter IPC가 AllowTestOnlyMockContentFilterIPC 뒤로 게이팅되었습니다. 이전에는 침해된 WebContent process가 process 전역의 MockContentFilterSettings singleton을 덮어써, 모든 NetworkProcess 연결의 navigation을 리다이렉트하거나 차단할 수 있는 상태였습니다. - [WebCore filters/morphology] (race condition)
f076e1a— parallel morphology filter의 race condition이 수정되었습니다. 여러 thread가 thread-safe하지 않은 공유 PixelBuffer에 접근하고 있었는데, 이제는 job마다 별도의 buffer를 사용하도록 변경되었습니다. - [ANGLE Metal backend] (type confusion)
c9fd4a1— ANGLE Metal backend에서 stale texture format 문제가 수정되었습니다. out-of-range mipmap upload 시mFormat이 잘못 갱신되면서, 이후의 GenerateMipmap 및 render 연산이 native storage에 대해 잘못된 format을 사용하는 상황이 발생하고 있었습니다. - [WebCore PlatformScreen] (lifetime fix)
ee05249— PlatformScreen에서 HashMap에 대한 동시 접근으로 발생하던 MTE crash가 수정되었습니다. 원인은 memory leak을 유발하던 불필요한 reference 변수였으며, 이를 제거했습니다. - [WebCore ControlFactory] (UAF)
ab0c1f8— ControlFactory singleton이 여러 thread에서 동시에 ref/deref되고 있었는데, thread-safe하지 않은 RefCounted를 사용하고 있어 UAF 가능성이 존재했습니다. ThreadSafeRefCounted로 전환해 이를 해결했습니다. - [WebKit CoreIPC] (TOCTOU, OOB read)
ca1cd57—logOnBehalfOfWebContent의 TOCTOU가 수정되었습니다. 침해된 WebContent process가 IPC로 전송한 이후 SharedMemory 기반 문자열을 변조해 null terminator를 제거할 수 있었고, 그 결과 UIProcess에서 OOB read가 발생하는 문제였습니다. 이제는 수신 즉시 span을 CString으로 복사합니다. - [WebCore Worklets CSP] (CSP bypass)
933debd— AudioWorklet과 PaintWorklet scope가 빈 CSP로 초기화되면서 eval() 차단 등의 제약이 우회되던 문제가 수정되었습니다. 이제는 생성자 document의 CSP를 정상적으로 상속받습니다. 또한 worklet module fetch에 대한 CSP directive 검사도 worker-src 대신 script-src를 사용하도록 수정되었습니다. - [WebCore WebGL]
d0000ca— offset이 있는 PBO로 pixel을 읽을 때 client buffer 경로가 잘못 사용되던 문제가 수정되었습니다. 이 문제는wipeAlphaChannelFromPixels를 통한 crash를 유발하고 있었습니다.