AVE27 — standalone POC app for CVE-2026-112705 (AppleAVE2 NTL OOB write)

- All stages ported from MchinaMd57764/AVETemporalPoC (orig. Calif/Chollima):
  stage1-12, 20, 21, fuzz, SBE — launch-arg parity kept
- New: stage13 NTL threshold sweep, stage14 usage×rc acceptance matrix,
  stage15 private-key entitlement audit (23 keys)
- Panic journal: kern.boottime-based in-app panic evidence after reboot
- Interactive SwiftUI console + NTL field + report share; header shows
  PANIC-CAPABLE on iOS 27.0-27.1, FIXED BUILD on 27.2+
- App icon: temporal-layer stack, top layer displaced past the stack edge
- scripts/build-device.sh → unsigned arm64 IPA (iOS 17.0+)
This commit is contained in:
JBJF committed 2026-10-30 19:13:13 +08:00
commit bc019e2b6c
11 files changed
+1829

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
# AVE27 — standalone POC app for CVE-2026-112705
Standalone iOS app for **CVE-2026-112705** — AppleAVE2 kernel out-of-bounds write
via `NumberOfTemporalLayers` (VideoToolbox). Original discovery: Calif / Chollima
team; this app ports the reproduction from
[MchinaMd57764/AVETemporalPoC-CVE-2026-112705](https://github.com/MchinaMd57764/AVETemporalPoC-CVE-2026-112705)
into a self-contained, interactive harness and extends it with exploration stages.
- Component: `com.apple.driver.AppleAVE2` (kernel)
- Type: kernel OOB write, fixed-offset constant fill — panic/DoS, **no** read/write primitive
- Affected: iOS 27.0 – 27.1 (24A446 line)
- Fixed: iOS 27.2 — `NTL` returns `-12900` at SetProperty, no panic
- Highest supported target: **iOS 27.1**
## What the app does
All nine original stages ported verbatim (props readback, encode trigger, property
fuzz, multi-PPS, layer-ID probe, bitstream dump, NTL ladder, per-rung parameter-set
capture, DPB-array overflow, UserDPB IOSurface table, H.264 slice-count decode,
MVHEVC ID validation, sandbox-extension probe), plus three new exploration stages:
| Stage | What it maps |
|---|---|
| **stage9** | the panic trigger: `EncoderUsage=1` + `RCMode=20` + `NTL=16463` → first encode panics AppleAVE2 (kernel data abort, `far=0x59 x19=0x1`); 16462 survives |
| **stage13** | NTL threshold sweep, bottom-up, one session per rung — finds the exact landing rung; panic journal arms per rung |
| **stage14** | `EncoderUsage` × `RCMode` acceptance matrix at a safe layer count — which private mode selectors the driver honours from a stock app |
| **stage15** | private-key audit: 23 non-public VideoToolbox keys set from an unentitled sandboxed app; the accepted set is the privilege surface reaching AppleAVE2 |
| **SBE** | sandbox-extension issuance probe — can a third-party app issue read/write extensions for paths outside its container |
| panic journal | armed before every panic-capable encode; on next launch, an unfinished journal + changed `kern.boottime` = that run ended in a kernel panic, in-app, no console needed |
Interactive UI: stage buttons, NTL field, live monospaced console, report share
sheet. Launch-argument mode keeps full parity with the original repo
(`--stage9 16463`, `--stage13`, `--fuzz`, `--sbext`, …). Report lands in
`Documents/ave_report.txt`, live oracle in `Documents/live.txt` — the last line
before a panic is `stage9(...) encode[0]`.
## Building
```bash
bash scripts/build-device.sh # → dist/AVE27-unsigned.ipa (arm64, iOS 17.0+, unsigned)
python3 scripts/gen_icon.py # regenerates the app icon (no image library needed)
```
Unsigned IPA — sign with your own certificate + provisioning profile, then
sideload. The simulator has no hardware encode path; panic stages need a real
device on 27.0/27.1.
## Panic evidence workflow
1. Launch → tap **stage9 panic** (or `--stage9 16463`). Device reboots.
2. Relaunch. The header still says PANIC-CAPABLE; the console opens with the
journal verdict: which stage, which rung, which boot — and points at
Settings → Privacy → Analytics for the matching `.ips`.
3. Export `ave_report.txt` / `live.txt` from Files → AVE27.
## Credits & scope
Original discovery and panic evidence: **Calif / Chollima team**, independent
reproduction by MchinaMd57764. This app reproduces a public, already-patched CVE
for verification and research on devices you own. It contains no exploitation
code — the defect is a fixed-offset constant fill with no read/write capability.