CVE-2026-28905
Overview
Advisory: Apple Security Advisory
Impact:
Description: Processing maliciously crafted web content may lead to an unexpected process crash
Researchers: Yuhao Hu, Yuanming Lai, Chenggang Wu, and Zhe Wang
| Attribute | Value |
|---|---|
| CVE | CVE-2026-28905 |
| Bugzilla | 308545 |
| Component | WebKit |
| Bug Class | JIT Bug |
| Severity | medium |
| Commit | 392f508eef947d28… |
| Advisory | Apple Advisory |
Root Cause Analysis
FTL JIT OSR exit had a phantom array unwritten slot bug where an array’s length was not properly updated after arr.map(f) when f returned the same array. This is a JIT compilation bug in FTL’s OSR exit handling where the compiler incorrectly assumed array shape during bailout.
Attack Path
1. Step 1
Attacker crafts JS that calls arr.map(f) where f returns the same array.
2. Step 2
FTL JIT optimizes the map operation with type assumptions.
3. Step 3
OSR exit (bailout) occurs due to unexpected type or deopt.
4. Step 4
FTL fails to update array length correctly during bailout.
5. Step 5
Out-of-bounds access or type confusion leads to memory corruption.
Files Changed
Test Files
JSTests/stress/ftl-osr-exit-phantom-array-unwritten-slot.js
Patch Preview
diff --git a/JSTests/stress/ftl-osr-exit-phantom-array-unwritten-slot.js b/JSTests/stress/ftl-osr-exit-phantom-array-unwritten-slot.js
new file mode 100644
index 000000000000..a285bbf64df8
--- /dev/null
+++ b/JSTests/stress/ftl-osr-exit-phantom-array-unwritten-slot.js
@@ -0,0 +1,13 @@
+function opt() {
+ const arr = [0,0,0,0,0,0,0];
+ function f() {
+ arr[0];
+ (0)[0];
+ return arr;
+ }
+ const ret = arr.map(f)
+ ret[0] = 1
+}
+for (let i = 0; i < 200; i++) {
+ opt()
+}