← All reports
16 picks from 462 commits
2026-08-29 – 09-04

This Week in WebKit — August 30 - September 5, 2026

462
전체 commit
27건
보안 수정
deep-dive 대상 Critical 1건, High 2건, Medium 3건; 그 외 보안 관련 변경 21건
102명
기여자
Top components WebCore · WebKit · JSC · Other · Platform

Featured

Security fixes

Notable development

Other security-relevant changes

  • [WebGPU CommandBuffer] (race condition, UAF) 95c3cfc — teardown 과정에서 CommandBuffer의 destructor가 work queue가 아니라 Metal completion thread에서 실행되었습니다. 그 결과 CommandEncoder의 refcount가 깨지고 Device::m_commandEncoderMap 접근에 race가 발생합니다. WebContent의 WebGPU API에서 도달 가능한 GPU process UAF로 이어집니다.
  • [WebCore AcceleratedEffect shapes] (UAF, race condition) 7224709 — AcceleratedEffect의 path caching 경로에서 발생하던 cross-thread use-after-free를 수정했습니다. static TinyLRUCache 접근을 lock으로 동기화하고, Path를 reference가 아닌 값으로 반환하도록 변경했습니다. CSS offset-path animation이 main thread와 scrolling thread에서 경합할 때 발생하던 double-free를 차단합니다.
  • [JSC B3 ccmp matcher] (miscompilation) 65ef7f3 — ccmp-chain 패턴 매칭이 실패한 뒤 남은 stale matcher state 때문에 중첩된 비교 표현식이 잘못 컴파일되었습니다. 실패 시 부분 상태를 정리하도록 RAII 기반 rollback이 도입되었습니다.
  • [WebGPU] (UAF) d4a150e — WebGPU의 writeTexture/writeBuffer에서 GPU가 데이터를 다 처리하기 전에 buffer가 해제될 수 있는 race window를 수정했습니다. 이때 use-after-free read가 발생합니다. 수정 후에는 completion callback을 통해 GPU 작업이 끝날 때까지 buffer storage를 유지합니다.
  • [JSC CodeBlock] (watchpoint invalidation) e6507c8 — generator/async 함수에서 캡처된 변수의 watchpoint를 미리 무효화하도록 변경되었습니다. suspension 도중 CodeBlock이 다시 생성될 때 안전하지 않은 constant folding이 일어나는 상황을 막습니다.
  • [WebKit GPU media decoder] (TOCTOU) 8db7ec0 — GPU process image decoder의 TOCTOU race를 수정했습니다. 기존에는 unsafeBuffer()로 인해 decode가 진행되는 동안 WebContent process가 shared memory를 변경할 수 있었습니다. 이제 SharedBuffer::create()로 데이터를 복사한 뒤 사용합니다.
  • [ANGLE VertexArray] (OOB read) e521d4c — vertex attribute format이 바뀌어도 element limit cache가 갱신되지 않던 문제를 수정했습니다. validation이 걸러야 할 out-of-bounds buffer 접근이 그대로 통과되던 상황입니다.
  • [WebCore IOSurfacePool] (OOB read) b23dfbc — IOSurfacePool의 eviction 과정에서 발생하던 out-of-bounds read를 수정했습니다. HashMap과 Vector의 상태가 어긋나면 end() iterator를 역참조하게 되고, takeLast()가 인접 heap 메모리를 읽게 됩니다.
  • [WebCore ShareDataReader] (UAF) 0bcd5c8 — ShareDataReader가 completion handler에서 raw this를 캡처하던 use-after-free를 수정했습니다. callback 도중 객체가 해제될 수 있는 구조였습니다. 이제 weakThis를 캡처한 뒤 RefPtr로 변환해, didFinishLoading이 끝날 때까지 reader를 살려둡니다.
  • [WebRTC H264/H265 encoder] (OOB read) 141ea15 — H264/H265 비디오 인코딩 경로의 out-of-bounds read를 수정했습니다. AppendData가 chunk 길이 대신 CMBlockBuffer 전체 크기를 사용하면서, 범위를 벗어난 heap 데이터가 인코딩된 프레임 버퍼로 복사되었습니다.
  • [GPU Process RemoteRenderingBackend] (data leak) 1d12ff7 — ImageBuffer를 RemoteRenderingBackend 인스턴스 간에 옮길 때 GraphicsContext를 해제하도록 변경되었습니다. 유지된 context reference를 통해 thread-safe하지 않은 backend 간 상태가 유출되는 것을 막습니다.
  • [GPU process RemoteImageBuffer] (heap disclosure) feef6b1 — LayerBacking image buffer에 대한 getPixelBuffer/putPixelBuffer IPC 호출을 거부하고, 초기화되지 않은 목적지 버퍼를 0으로 채우도록 변경되었습니다. 위조된 호출로 WebContent가 GPU process의 초기화되지 않은 heap 메모리를 읽어내는 경로를 차단합니다.
  • [WebKit NetworkProcess] (validator bypass) f7540ca — 여러 ITP 및 storage access 메시지에 대한 IPC validation을 다시 도입했습니다. 이때 LogUserInteraction의 MESSAGE_CHECK은 early return으로 변경되어, 위조된 도메인 접근은 여전히 차단하면서도 WebContent process가 종료되지는 않도록 했습니다.
  • [JSC YarrJIT] (OOB read) 8f069ce — non-BMP backtrack trampoline에서 firstCharacterAdditionalReadSize 보정이 빠져 있던 문제를 수정했습니다. 그 결과 match 경계가 뒤집히고(start > end), match가 subject 범위를 넘어가게 됩니다. 누락되었던 index register 보정이 추가되었고, RELEASE_ASSERT도 함께 도입되었습니다.
  • [JSC Wasm GC] (hardening) ace1903 — Wasm GC의 br_on_cast/br_on_cast_fail 명령이 과도하게 긴 LEB128 인코딩을 올바르게 처리하도록 수정되었습니다. 패치 이전에는 조작된 모듈로 validator가 계산한 allowNull 검사와 런타임 동작을 어긋나게 만들 수 있었습니다. 잘못 정렬된 flag byte를 읽게 되면서 type soundness가 우회됩니다.
  • [WebGPU indirect draw] (OOB vertex fetch) 43ed70e — WebGPU drawIndirect vulnerability에 대한 regression test가 추가되었습니다. finish는 됐지만 submit되지 않은 encoder가 clamping cache를 오염시키면 out-of-bounds vertex fetch가 가능해지는 문제입니다. 다만 upstream fix 자체는 포함되어 있지 않습니다. 319317@main에서 cache 메커니즘이 제거되면서 obsolete로 처리되었기 때문입니다.
  • [WebGPU Buffer] (OOB read) ff78e4f — WebGPU index buffer가 검증된 최댓값이 아니라 지금까지 기록된 최대 인덱스를 추적하고 있었습니다. 그래서 큰 writeBuffer 호출 하나로 이후 write들의 validation 상태를 오염시킬 수 있었고, GPU에서 out-of-bounds read가 발생합니다.
  • [UIProcess RemoteLayerTree DisplayLink] (UAF, re-entrancy) b0d927d — 재진입 teardown 도중 DisplayLink client가 다시 등록되는 것을 막는 guard가 재도입되었습니다. 이 guard가 없으면 client가 해제된 뒤에도 다음 CVDisplayLink callback에서 계속 호출될 수 있습니다.
  • [UIProcess RemoteLayerTree] (race condition UAF) e25bd0f — main thread가 m_momentumEventDispatcher를 null로 만든 뒤 scrolling thread가 해제된 객체에 접근할 수 있던 race condition을 수정했습니다. 이제 모든 접근이 lock으로 보호됩니다.
  • [WebCore Document] (validator bypass) 49cbb80 — Document::execCommand의 대소문자 구분 비교를 수정했습니다. 대소문자만 다른 command 변형(예: 'InsertHTML')으로 Trusted Types CSP 적용을 우회할 수 있었고, 신뢰되지 않은 HTML 주입이 가능했습니다.
  • [WebCore CSP] (nonce theft) 62a36ef — nonce 기반 CSP 우회를 수정했습니다. dangling markup을 이용하면 nonce가 붙은 element의 속성 이름이나 값에 '<link' 문자열이 주입될 수 있었습니다. 이제 Element::isNonceable()이 기존의 '<script', '<style' 검사에 더해 속성 이름과 값에서 '<link'도 함께 확인합니다.