Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
mt6985-CVE-2026-43499 — CVE-2026-43499 Exploit-Adapter für MT6985 MediaTek Dimensity 9300 (vivo PD2241) | Kitploit
Tools/GitHubGitHub/233laoliu/mt6985-cve-2026-43499
Exploit-FrameworksSchwachstellenanalyseExploitationReverse EngineeringForensikMobile SicherheitFirmware-AnalyseBinary-Exploitation
GitHub233laoliu/mt6985-cve-2026-43499

mt6985-CVE-2026-43499

CVE-2026-43499 Exploit-Adapter für MT6985 MediaTek Dimensity 9300 (vivo PD2241)

Repository anzeigen
111vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-43499 Fehlversuch: MT6985-Adaptionsversuch

Fazit: 68M Tokens investiert, kein Root erhalten.
Ursache: KernelSnitch-Timing-Angriff auf MTK Dimensity 9200 unzuverlässig, CONFIG_PANIC_ON_OOPS=y lässt keinen Raum für Trial-and-Error.
Dieser Artikel dokumentiert den vollständigen Fehlschlag-Prozess als Referenz für Nachfolger.


Hintergrund

ProjektWert
Gerätvivo PD2241 (Dimensity 9200 / MT6985), Android 15
FirmwarePD2241_A_15.2.10.2.W10.V000L1
Kernel5.15.178-android13-8-gfb31f5bdd612-dirty
BootloaderGesperrt (ro.boot.flash.locked=1)
SELinuxEnforcing
panic_on_oopsAktiv → jeder Kernel-OOPS = sofortiger Neustart
ExploitCyberMeowfia — CVE-2026-43499 (IonStack)
Quellbaumandroid_15.0_kernel_MT6985 (5.15.178) — nicht passend zur Geräteversion (Quelle ist android15 GKI, Gerät läuft android13 GKI)

Was wurde unternommen

1. Quellcode-Analyse → Struktur-Offsets extrahiert

Extrahiert aus arch/arm64/include/asm/memory.h + include/linux/fs.h + android/abi_gki_aarch64.xml:

  • Speicherlayout: KIMAGE_TEXT_BASE = 0xffffffc008000000, VA_BITS=39, DIRECT_MAP=256GB
  • task_struct: 36864 Bits, vollständig analysiert (ABI XML layout-offset-in-bits)
  • file_operations: kein iopoll (android13 GKI), IOCTL=0x48, open=0x68
  • cred: atomic_t usage = 4 Bytes, uid=0x04
  • struct page: 64 Bytes, slab_cache=0x18

Wichtige Erkenntnis: Quelle ist android15 GKI, Gerät ist android13 GKI — task_struct-Offsets weichen um 0x40~0x88 Bytes ab, können nicht direkt aus der Quelle übernommen werden.

2. Firmware-Entpackung → Symbole extrahiert

root@kitploit:~
OTA zip (8.3GB)
  → payload.bin (8.2GB)
    → payload_dumper → boot.img (96MB, v4 header)
      → LZ4 entpacken → Image (50MB ARM64)
        → kallsyms-finder → 187810 Symbole

Symbole aus zwei Firmware-Versionen (15.2.7.6 / 15.2.10.2) extrahiert — dasselbe Symbol weicht zwischen den Versionen um 10KB~200KB ab, die richtige Version muss verwendet werden.

3. Disassemblierungs-Verifikation → capstone bestätigt kritische Offsets

root@kitploit:~
# In rt_mutex_adjust_pi:
LDR x21, [x19, #0x8b0]  → pi_blocked_on = 0x8b0 (android15-Wert, nicht frankel)

Dies bestätigt, dass das task_struct-Layout dem android15-Zweig entspricht, nicht frankels android13.

4. Kompilierung → erfolgreich

NDK r29, make PROJECT=android_15.0_kernel_MT6985 → preload.so (150KB).

5. Ausführung → wiederholte Abstürze

root@kitploit:~
[+] preload starting pid=25414
[+] p0 profile ... alle Symbole korrekt geladen
[-] KernelSnitch mm_struct leak failed     ← manchmal fehlt diese Zeile (gelegentlich erfolgreich)
[+] slide child context route=pselect      ← slide KASLR-Leak-Subprozess gestartet
[Kernel-Panic]                                ← rt_mutex_adjust_prio_chain+0x1b0

Absturz-Instruktion (capstone):

root@kitploit:~
ldar w8, [x27]    ; x27 = waiter->lock (geladen aus [x28, #0x38])
                  ; x27-Wert ist Müll → keine Seitentabellen-Zuordnung → Translation Fault
                  ; → die() → panic → Neustart

Warum es fehlschlug

Grundursache 1: KernelSnitch auf MTK unzuverlässig

KernelSnitch ist der Einstiegspunkt des gesamten Exploits — es leakt die mm_struct-Adresse über Timing-Unterschiede im futex-Hash-Bucket:

  1. Kollisionserkennung erfolgreich — 5 Kollisionen bei niedriger Schwelle gefunden
  2. Bruteforce-Matching schlägt fast immer fehl — das Kernproblem:
root@kitploit:~
MT6985 hat CONFIG_KASAN_HW_TAGS=y → Kernel markiert Slab-Allokationen mit MTE-Tags
mm_struct-Zeiger tragen KASAN-Tag → futex_hash basiert auf getaggtem Pointer

Aber Bruteforce scannt direct map (untagged Adressen) → berechneter Hash stimmt nicht überein
Selbst mit MTE-Tag-Durchlauf (0-14, insgesamt 15 Varianten), auf Systemen mit VA_BITS=39
überlappen Tag-Bits (bit56-59) mit Vorzeichenerweiterungs-Bits → einige Tag-Kombinationen
erzeugen ungültige Adressen → werden übersehen

Pixel-Geräte haben kein KASAN_HW_TAGS, dort funktioniert dieser Mechanismus. MTK nicht.

Grundursache 2: CONFIG_PANIC_ON_OOPS ist der Killer

root@kitploit:~
Pixel:  Kernel-OOPS → dump_stack → weiterlaufen → Exploit kann es erneut versuchen
MT6985: Kernel-OOPS → die() → panic() → sofortiger Neustart → kein Raum für Trial-and-Error
Eine kleine Abweichung in der π-Kette bringt alles zum Absturz; auf Pixel wäre eine Abweichung
nur "diesmal nicht erfolgreich, andere Adressgruppe erneut versuchen".

Zudem ist der Bootloader gesperrt (flash.locked=1) → kein Flashen eines benutzerdefinierten Kernels möglich, um diese Option zu entfernen.

Grundursache 3: Kernel-Versionsdrift

root@kitploit:~
Quellbaum: 5.15.178 android15 GKI
Gerät:     5.15.178-android13 (vivo vendor)

Obwohl die Hauptversionsnummern beide 5.15.178 sind, unterscheiden sich die GKI-Zweige (android13 vs android15), wodurch die Layouts kritischer Strukturen wie task_struct/cred inkonsistent sind. Nach wiederholtem Wechsel zwischen frankel/android15-Offset-Sätzen wurde die korrekte Version letztlich per Disassemblierung bestimmt.


Versuchte Anpassungen (alle wirkungslos)

ÄnderungZweckErgebnis
THRESHOLD_MULT 10→5→3Kollisionserkennungsschwelle senken<5 zu viele False Positives
APPENDED_FUTEXES 4096→8192Hash-Ketten-Differenz vergrößernKeine Wirkung
REPEAT_MEASUREMENT/AVERAGEMessgenauigkeit erhöhenKeine Wirkung
MTE=1Bruteforce Tags durchlaufen lassenLangsamer, Abstürze sogar reduziert
MM_STRUCT_SZ 0x500→0x400mm_struct-Schrittweite korrigierenNotwendig, ABI tatsächlich 992 Bytes
IDENTITY_END 64GB→256GBScan-Bereich erweiternZu langsam (MTE-Durchlauf), stimmt weiterhin nicht überein
TASK-Offsets: android15↔frankelKorrekte Offsets ermittelnDisassemblierung bestätigt android15
FOPS-Offsets: android15↔frankelandroid13 hat kein iopollfrankel verwendet

Aktueller Stand von target.h

In exploit/targets/android_15.0_kernel_MT6985/target.h:

KategorieVertrauensgradVerifikationsmethode
SpeicherlayoutKorrektmemory.h-Berechnung + kallsyms _text-Verifikation
Symbol-Offsets (22)KorrektAus 15.2.10.2 boot.img extrahiert
task_struct-OffsetsKorrektABI XML + capstone-Disassemblierung (pi_blocked_on=0x8b0)
FOPS-OffsetsFehlerhaft (am 2026-07-31 korrigiert)Ursprünglich von frankel übernommen (android13 ohne iopoll); Quellbaum-ABI hat tatsächlich iopoll@0x30, ioctl=0x50, open=0x70 — siehe VERIFICATION.md
CRED-OffsetsKorrekt (verifiziert)ABI XML: uid=0x04, securebits=0x24, caps=0x28, security=0x78

Assemblierung erfolgreich, läuft, scheitert auf der letzten Meile.


Wenn du weitermachen willst

Notwendige Bedingungen (alle erforderlich)

  1. CONFIG_PANIC_ON_OOPS entfernen — entweder benutzerdefinierten Kernel flashen (Bootloader-Entsperrung erforderlich) oder ein MT6985-Gerät finden, bei dem diese Option standardmäßig deaktiviert ist
  2. KernelSnitch lösen — Cache-Timing-Kalibrierung für MTK Dimensity 9200 erforderlich, oder KernelSnitch im Exploit vollständig durch eine andere mm_struct-Leak-Methode ersetzen

Mögliche alternative Ansätze

  • /proc/self/pagemap — auf diesem Gerät eingeschränkt (gibt nur Nullen zurück)
  • MTK-spezifische Debug-Schnittstellen (/proc/mtk_*) — vorhanden, aber weitere Analyse erforderlich
  • MTK-Kamera/GPU-Treiber-ioctl-Schwachstellen — einfacherer Privilege-Escalation-Pfad
  • Auf Community-Adaption für MTK-Varianten warten

Verbleibender Wert dieses Repos

  • symbols/kallsyms_PD2241_15.2.10.2.txt — vollständige 15.2.10.2-Symboltabelle, direkt für Nachfolger nutzbar
  • device_config.txt — tatsächliche Kernel-Konfiguration des Geräts, zeigt Vendor-Änderungen
  • exploit/targets/android_15.0_kernel_MT6985/target.h — Struktur-Offsets verifiziert
  • scripts/server_compile.py — automatisierte Kompilierung, schnelle Neukompilierung nach Parameteränderungen

Fehler-Checkliste (zur Vermeidung für Nachfolger)

  1. Dateien unter Windows entpacken: tar -xf kann bei großen ZIPs fehlschlagen, Python zipfile verwenden oder manuell zuerst entpacken
  2. payload_dumper-Protobuf-Versionskonflikt: Generiertes update_metadata_pb2.py erfordert protobuf 5.x, die runtime_version-Importzeile muss manuell entfernt werden
  3. Direkte Ausführung von ./preload.so führt zu Segfault: /system/bin/linker64 /data/local/tmp/preload.so muss verwendet werden
  4. ABI XML ist genauer als Quellcode: layout-offset-in-bits wird vom Compiler berechnet, 100× genauer als manuelles Zählen über 5000 Bytes
  5. GKI-Zweig beeinflusst Layout: task_struct unterscheidet sich zwischen android13/14/15, Offsets dürfen nicht über Zweige hinweg kopiert werden
  6. Unterschiedliche Firmware-Versionen → unterschiedliche Symbol-Offsets: 15.2.7.6 und 15.2.10.2 weichen um 10KB~200KB ab
  7. vivo-Vendor fügt viele OEM-Felder hinzu: CONFIG_ANDROID_VENDOR_OEM_DATA=y, CONFIG_SCHED_INFO=y, CONFIG_RSC_* → Abweichung vom Standard-GKI
  8. Toolchain zur Symbol-Extraktion: boot.img → kernel.bin → LZ4 entpacken → Image → kallsyms-finder → Symboltabelle

Zeitlinie

root@kitploit:~
07/28  CyberMeowfia-Repo + MT6985-Quellcode heruntergeladen
07/29  Quellcode-Analyse (memory.h, fs.h, ABI XML, diverse structs)
       Firmware-Entpackung (payload.bin → boot.img → Image)
       Symbol-Extraktion (kallsyms-finder → 187810 Symbole)
       Mehrere Kompilierungsrunden + mehrere Abstürze + Disassemblierungs-Verifikation
       5 automatische Wiederholungen → alle fehlgeschlagen
       Dieser Artikel geschrieben
-------------------------------------------
Gesamt: ~68M Tokens, 0 Root-Shells

2026-07-29, lived to tell the tale


2026-07-31 Fortsetzung: Verifikation und Korrektur nach Erhalt des Quellcodes

Nach Erhalt von android_15.0_kernel_MT6985.tar.gz (5.15.178-Quellbaum + ABI XML) wurde eine vollständige Kreuzvalidierung durchgeführt, Details in VERIFICATION.md. Zusammenfassung:

  1. MT6985 = Dimensity 9200 (MT6989 ist die 9300), oben korrigiert.
  2. Symbol-Offsets 23/23 korrekt (kallsyms-verifiziert), task_struct / cred / waiter / page / pipe / configfs-Offsets stimmen alle mit dem Quellbaum-ABI überein.
  3. FOPS-Offsets waren falsch: ursprünglich von frankel übernommen (android13 GKI, ohne iopoll, ioctl=0x48); aber das task_struct-Layout des Geräts (pi_blocked_on=0x8b0, per Laufzeit-Disassemblierung bestätigt) stimmt mit diesem Quellbaum überein, daher sollte file_operations desselben Kernels iopoll@0x30, ioctl=0x50, open=0x70 usw. haben — target.h korrigiert, zusätzlich mit der im Exploit enthaltenen leak_kernel_base()-Selbstverifikation auf dem echten Gerät als Absicherung.
  4. KernelSnitch-MTK-Kompatibilitätspatch (patches/kernelsnitch_mtk_fixes.patch):
    • Größe der Userspace-futex-Hash-Tabelle an den Kernel angeglichen (possible CPU + 2, aufgerundet auf Zweierpotenz), um das zwangsläufige Scheitern von Bruteforce bei possible≠online zu vermeiden;
    • MTE-Tag-Durchlauf um 0xf (untagged) ergänzt und KSNITCH_MTE_ENABLED=1 tatsächlich wirksam gemacht (original util.c hatte mte=0 hartkodiert);
    • Keine Auswirkung auf Nicht-MTK-Targets.
  5. Der Absturzpunkt rt_mutex_adjust_prio_chain+0x1b0 liegt in der pselect/pi-Kettenphase, vor der FOPS-Selbstverifikation; nach den obigen Korrekturen ist eine erneute Verifikation auf dem Gerät sinnvoll.

2026-07-31 Echtgerätetest: KernelSnitch funktioniert, Slide-Phase bleibt die Hürde

Gerät (PD2241, compiler251203103903) mit 8+ Testrunden auf echter Hardware:

  • KernelSnitch repariert und verifiziert: MM_STRUCT_SZ=0x400 (ursprünglich 0x500 führte zu versetztem Scan-Raster und nur False Positives) + MTE-Tag-Durchlauf 0..15 (Geräte-mm-Pointer-Tags ändern sich) + Untagging gefälschter Adressen. Findet jetzt stabil echte mm_struct.
  • Jede Runde stürzt weiterhin bei rt_mutex_adjust_prio_chain+0x1b0 ab: pselect/pi-Ketten- Timing-Race (gefälschter waiter landet nicht am korrekten Offset im Kernel-Stack). Der vivo-RSC- Scheduler hat den futex/pi-Pfad verändert, was dieses Race grundlegend zerstören könnte. Die Slide-Stack-Ausrichtung wurde als Umgebungsvariable SLIDE_SHIFT parametrisiert, Scan noch nicht abgeschlossen.
  • FOPS/pipe/cred-Phase noch nicht erreicht, Echtgeräte-Verifikation ausstehend.

Endgültige Entscheidung: kostenpflichtige Bootloader-Entsperrung (nicht mehr von diesem Pfad abhängig).

Tool herunterladen