← All reports
6 picks from 423 commits
2026-05-23 – 29

This Week in WebKit — May 23 - May 29, 2026

423
Total commits
42건
Security fixes
심층 분석: High 3건, Medium 3건 / 위에 나열된 보안 관련 추가 변경사항 30건
102명
Contributors
Top components WebCore · Other · WebKit · JSC · Platform

Featured

Other security-relevant changes

  • [JSC FTL] (state restoration fix) 1b42291 — FTL의 stack overflow check가 prologue로 이동되었습니다. 이를 통해 patchpoint variant에서 stack pointer 복원 문제가 수정되었고, overflow guard가 frame 할당 이전에 stack을 확인하도록 보장됩니다.
  • [WebKit NetworkProcess] (hardening) fb75cae — setRawCookie IPC handler에 MESSAGE_CHECK validation이 추가되어, cookie.domain과 URL이 firstParty와 일치하는지 확인합니다. 아울러 cookie 생성 과정의 exception 처리 범위도 확장되어 crash를 방지합니다.
  • [WebCore date/time input] (UAF) 869d5c5 — date input에서 use-after-free가 발견되었습니다. input event handler 안에서 element type을 변경하면 dispatch 도중 BaseDateAndTimeInputType 객체가 파괴되는데, 이후에도 해당 객체가 계속 사용되고 있었습니다. Critical section 전체에 걸쳐 ref-counted reference를 유지하도록 수정되었습니다.
  • [JSC TypedArray] (TOCTOU) c852586 — GSAB 기반 array에서 TypedArray.sort()를 실행할 때 TOCTOU race가 존재했습니다. length와 span을 각각 따로 읽다 보니 병렬 grow 과정에서 두 값이 서로 어긋날 수 있었는데, 이제는 두 값 모두 동일한 span 객체에서 파생되도록 수정되었습니다.
  • [JSC DFG] (type confusion) 1f4e4ca — CSE가 서로 다른 array mode를 가진 String.prototype.at 연산을 잘못 병합하던 문제가 수정되었습니다. 그 결과 string 반환 케이스와 undefined 반환 케이스가 뒤섞이는 상황이 발생하고 있었습니다.
  • [JSC DFG allocation sinking] (IR correctness) cdfa73f — object allocation sinking 과정에서 불필요하게 삽입되던 Check가 제거되었습니다. 이 Check는 DFG graph의 exit-state 일관성을 깨뜨리고 있었습니다.
  • [WebCore SlotAssignment] (UAF) 20beac1 — slot assignment resolution 과정에서 stale iterator로 인한 use-after-free가 발견되었습니다. 컨테이너가 순회하는 도중 hasAssignedNodes()가 m_slots를 변경하는 구조였으며, shadow DOM slot 조작을 통해 이 문제를 유발할 수 있었습니다. hasAssignedNodes() 호출을 assignedNodes.isEmpty() 직접 확인으로 대체하여 수정되었습니다.
  • [WebKit ModelProcess] (hardening) 69ff7c4 — createModelPlayer의 중복 식별자 검증에서 ASSERT가 MESSAGE_CHECK로 대체되었습니다. 또한 deleteModelPlayer와 unloadModelPlayer에도 식별자 존재 여부를 확인하는 MESSAGE_CHECK가 추가되어, release build에서도 유효하지 않은 IPC 메시지를 거부하게 됩니다.
  • [JSC Wasm] (UAF) 76b3468 — JSWebAssemblyInstance의 destruction이 시작되는 시점에 Wasm::InstanceAnchor를 unregister하도록 수정되어, cross-thread use-after-free가 방지됩니다. 기존에는 instance의 멤버가 파괴되는 도중에도 anchor가 background compiler thread에 부분적으로 해제된 instance를 노출할 수 있었습니다.
  • [JSC DFG] (off-by-one) 4e802a1 — checkpoint OSR exit 과정에서 reify된 baseline frame의 BytecodeIndex가 수정되었습니다. 기존에는 index가 미리 앞서 나가 있어, 재개된 bytecode에서 발생한 exception이 잘못된 exception handler로 라우팅되는 문제가 있었습니다.
  • [WebCore XMLHttpRequest] (race condition, UAF) a814080 — XMLHttpRequest::visitAdditionalChildren()에서 race condition이 수정되었습니다. GC thread가 m_responseDocument를 dereference하는 동안 main thread가 이를 null로 만들 수 있는 상황이었으며, 모든 접근을 m_gcLock으로 보호하도록 변경되었습니다.
  • [WebCore Streams] (UAF) ad57b51 — ReadableStreamDefaultReader에서 use-after-free가 발견되었습니다. main thread가 m_stream을 null로 만든 뒤에도 GC-thread 코드가 이를 dereference할 수 있었으며, locking을 통해 해결되었습니다.
  • [JSC string prototype] (hardening) 18a2c9a — replaceAll에서 string resolution 이후의 exception check가 추가되었습니다. 이 check가 없으면 확인되지 않은 OOM 상황에서도 totalLength와 replacementsAre8Bit가 아직 resolve되지 않은 string으로부터 계산될 수 있었습니다.
  • [ANGLE Metal] (OOB) 0fe9ff8 — vertex attribute offset이 buffer size를 초과할 때 ANGLE Metal의 syncDirtyAttrib에서 발생하던 crash가 수정되었습니다. GetVertexCount check를 conversion branch 앞으로 끌어올려 두 경로 모두를 보호합니다. 아울러 CheckedNumeric으로 재작성되면서 negative offset과 zero stride에 대한 방어도 함께 강화되었습니다.
  • [JSC TypedArray] (stale pointer) a271abe — TypedArray.prototype.forEach가 backing vector를 캐싱하는 대신 다시 로드하도록 수정되었습니다. ArrayBuffer materialization이나 Wasm memory reallocation으로 vector가 이동할 수 있는 상황에서, stale vector pointer를 읽는 문제를 방지합니다.
  • [WebKit NetworkProcess] (hardening) 479f2b4 — IPC identifier validation에서 RELEASE_ASSERT가 MESSAGE_CHECK로 대체되었습니다. 그 결과 compromise된 WebContent process가 privileged network process를 crash시키는 상황이 방지되며, 이제는 attacker가 제어하는 process만 종료됩니다.
  • [JSC LiteralParser] (shape confusion) 09c07d2 — LiteralParser가 symbol property transition을 string key에 잘못 적용하던 문제가 수정되어, parse된 객체에서 shape confusion이 발생하는 상황이 방지됩니다.
  • [JSC B3 optimizer] (JIT miscompilation) 81aa535 — B3 optimizer의 dominance check가 깨져 있던 문제가 수정되었습니다. 기존에는 모든 use를 dominate하지 않는 add 연산도 addressing mode로 이동할 수 있었으며, 이로 인해 typed-array Atomics 패턴에서 JIT 코드가 잘못된 memory address를 계산하는 문제가 발생하고 있었습니다.
  • [WebKit UIProcess / WebBackForwardList] (sandbox bypass) 715bc66 — backForwardUpdateItem과 backForwardSetChildItem 메서드에 file:// URL에 대한 MESSAGE_CHECK validation이 추가되었습니다. 이를 통해 compromise된 WebProcess가 검증되지 않은 file URL을 back-forward list에 주입하는 상황이 방지됩니다.
  • [WebCore CSS] (UAF) 5f0480f — FontFaceSet.load에서 use-after-free가 발견되었습니다. thenable check를 통한 JS reentrancy로 인해, loader가 여전히 참조하고 있는 @font-face rule이 제거될 수 있는 상황이었습니다. reference_wrapper 대신 Ref를 사용하도록 수정되었습니다.
  • [WebKit UIProcess] (origin validation) 23b15df — IPC validation이 누락되어 있어, compromise된 WebContent process가 임의의 URL을 전송하여 address bar를 spoofing할 수 있었습니다. 수정된 코드는 protocol/host/port가 현재 frame의 URL과 일치하는지 요구합니다.
  • [JSC JSLock] (race condition) aed1fdd — JSLock::m_hasOwnerThread에 acquire-release memory ordering이 추가되었습니다. 기존에는 m_ownerThread가 아직 stale한 상태에서도 다른 thread가 이 flag를 true로 관찰할 수 있는 race가 존재했으며, 이는 여러 thread에서 동기화되지 않은 JS heap 접근으로 이어질 가능성이 있었습니다.
  • [WebCore PlatformScreen] (race condition) 08911bd — 독립적으로 존재하던 PlatformScreen property accessor들이 CoW singleton으로 대체되었습니다. 그 결과 off-thread에서의 동시 HashMap 접근이 방지되는데, 이 접근은 MTE hardware check에서 memory safety violation으로 포착되고 있었습니다.
  • [WebCore scrolling / Mac] (UAF) a926a67 — scrolling thread에서 실행되는 NSAnimation display-link callback이, main thread에서 이미 파괴된 ScrollerMac 객체에 접근할 수 있는 cross-thread use-after-free crash가 수정되었습니다. Thread-safe ref-counting을 적용하고 main-thread destruction을 강제하여 race를 제거했습니다.
  • [WebRTC H.264 NALU] (Integer underflow) 86f9503 — H.264 AVC sequence parameter set NALU size가 NALU prefix를 초과하는지 확인하는 validation이 추가되었습니다. 이를 통해 WebCodecs로 attacker가 제어하는 video를 처리할 때 발생할 수 있는 integer underflow가 방지됩니다.
  • [WebCore Streams] (race condition) 597af50 — GC thread가 m_stream을 dereference하는 동작이 main-thread의 null 대입과 race하면서 use-after-free로 이어질 수 있었습니다. Locking을 통해 수정되었습니다.
  • [WebKit SpeechRecognitionServer] (hardening) 5db4d93 — SpeechRecognitionServer의 중복 client 검증에서 ASSERT가 MESSAGE_CHECK로 대체되었습니다. ASSERT는 release build에서 no-op이기 때문에 invariant enforcement 없이 중복 start 메시지가 허용되고 있었는데, 이제 MESSAGE_CHECK가 해당 connection을 종료시킵니다.
  • [bmalloc libpas] (OOB hardening) ed57dc0 — compact_heap_reservation_bump에서 PAS_ASSERT가 bounds check로 대체되어, 이 값이 guard_size와 heap_size 사이에 위치하는지 확인하도록 수정되었습니다. compact heap metadata가 손상된 경우 enumeration 중 발생할 수 있는 out-of-bounds memory access를 방지합니다.
  • [JSC WebAssembly] (exception handling) d8b6307 — WebAssembly compile option에서 imported string constant를 rope-to-string 변환할 때, OOM 이후의 exception check가 누락되어 있었습니다. WebAssembly.Module에 attacker가 제어하는 거대한 string을 넣으면 적절한 exception handling 없이 OOM을 유발할 수 있었고, 이 경우 잘못된 상태로 실행이 계속될 수 있었습니다.
  • [JSC ClonedArguments] (Uninitialized memory) 5099a4a — ClonedArguments::copyToArguments에서 offset이 0이 아닌 경우의 loop bound가 수정되었습니다. 기존에는 destination array 뒤쪽 slot들이 기록되지 않은 채 stale data로 남아 있었습니다. 다만 offset > 0인 상황에 도달 가능한 code path는 현재까지 알려진 바 없어, 현재 위험도는 제한적입니다.