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
CVE-2026-2796-escape-wasm-by-using-wasm — PoC-Exploit-Kette für CVE-2026-2796: SpiderMonkey-WebAssembly-Sandbox-Escape (Signatur-Typkonfusion -> beliebiges R/W -> RCE) | Kitploit
Tools/GitHubGitHub/sneakynachos/cve-2026-2796-escape-wasm-by-using-wasm
SchwachstellenanalyseExploitationReverse EngineeringWebsicherheitBinary-Exploitation
GitHubsneakynachos/cve-2026-2796-escape-wasm-by-using-wasm

CVE-2026-2796-escape-wasm-by-using-wasm

PoC-Exploit-Kette für CVE-2026-2796: SpiderMonkey-WebAssembly-Sandbox-Escape (Signatur-Typkonfusion -> beliebiges R/W -> RCE)

Repository anzeigen
51vor 4 TagenNoch 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-2796 — Escape aus der SpiderMonkey-WebAssembly-Sandbox

Proof-of-Concept-Exploit-Kette für CVE-2026-2796, eine JIT-Fehlkompilierung / Typverwechslung in Mozilla SpiderMonkeys WebAssembly-Import-Optimierung (Komponente „JavaScript: WebAssembly“). Ein präpariertes Wasm-Modul erlangt beliebiges Lesen/Schreiben im gesamten Host-Prozess und beliebige native Codeausführung und entkommt damit der WebAssembly-Sandbox.

  • CVE: CVE-2026-2796 (CWE-843, Typverwechslung)
  • Betroffen: Firefox < 148, Thunderbird < 148 (und Einbettungen derselben Engine)
  • Behoben in: Firefox 148 / Thunderbird 148, 24.02.2026
  • Upstream-Bug: Mozilla Bug 2013165 (MFSA-2026-13)
  • Fix-Commit: e2acef67 („Bug 2013165 - Fix import optimization“)

Grundursache

Wenn ein Wasm-Modul eine JS-Funktion importiert, wendet SpiderMonkey eine Optimierung in MaybeOptimizeFunctionCallBind (js/src/wasm/WasmInstance.cpp) an, die Importe der Form Function.prototype.call.bind(fn) entpackt und direkt als aufrufbares Objekt des Imports speichert. Dabei wurde nicht geprüft, ob der gebundene Wert selbst eine ist:

fn
als Wasm exportierte Funktion
root@kitploit:~
+  if (boundThis.toObject().is<JSFunction>() &&
+      boundThis.toObject().as<JSFunction>().isWasm()) {
+    return nullptr;
+  }

Fehlt diese Prüfung, wird der Import als eine ursprünglich als Wasm exportierte Funktion behandelt: Der JS-Wrapper – und mit ihm die Signaturprüfung – wird übersprungen. Eine Wasm-Funktion kann daher über einen deklarierten Importtyp aufgerufen werden, der nicht ihrem tatsächlichen Typ entspricht. Werte werden unverändert in Registern durchgereicht; nur ihre Interpretation ändert sich (z. B. wird eine angreiferkontrollierte i64 als GC-Zeiger (ref $t) verwendet und umgekehrt).

Exploit-Kette (poc/)

DateiStufeErgebnis
poc-crash.jsSignaturverwechslungi64.const 0xDEADBEEF als Funcref-Zeiger dereferenziert → SIGSEGV bei 0xdeadbf2f
poc-addrof.jsaddrOf + fakeobjVerwechslung in beide Richtungen (i64 ↔ (ref $t)) → gefälschtes WasmArrayObject (numElements_ @+16, data_ @+24, Inline-Elemente @+40) → beliebiges Lesen/Schreiben überall im Prozess
poc-recon.jsLayout-AufklärungJSFunction-Native-Zeiger @+0x20 → Leak der Binärbasis; WasmFuncRef typeDef-Zeiger @+0x40
poc-forge.jsKontrollflussGefälschter Funcref besteht die call_ref-Typprüfung; Aufrufziel aus [funcref+0x38] geladen
poc-rce.jsCodeausführungGefälschter Funcref → system("touch /tmp/CVE-2026-2796-PWNED") über geleaktes system() (Binärbasis + GOT-Eintrag @ base+0x11d47b0)

Die Verwechslungs-Primitive wird exakt wie in Mozillas eigenem Regressionstest (js/src/jit-test/tests/wasm/regress/bug2013165.js) erzielt: Import von Function.prototype.call.bind(wasmExport) in ein zweites Modul, dessen Importdeklaration eine andere Signatur trägt, dann ref.func + call_ref.

Erstellen der verwundbaren Shell

root@kitploit:~
# Firefox source @ 2fbc0748c460b38fc95407a3f14c41d12fb12026 (2026-01-14,
# Firefox 148 nightly — predates the fix). Any pre-148 revision works.
cd js/src
../../configure --enable-debug --enable-optimize --without-intl-api \
  --enable-project=js   # objdir e.g. js/src/_obj
cd _obj && make -j8
# binary: dist/bin/js   (reports "JavaScript-C149.0a1")

Ausführen

root@kitploit:~
JS=/path/to/dist/bin/js
$JS poc/poc-crash.js     # SIGSEGV at 0xdeadbf2f
$JS poc/poc-addrof.js    # prints [+] arbitrary read OK / write OK
$JS poc/poc-recon.js     # dumps JSFunction / WasmFuncRef memory
$JS poc/poc-forge.js     # crashes with PC = planted canary
rm -f /tmp/CVE-2026-2796-PWNED
$JS poc/poc-rce.js       # creates /tmp/CVE-2026-2796-PWNED via system()

Auf einem gepatchten Build (Firefox ≥ 148) wirft poc-crash.js stattdessen TypeError: bad type — die Signaturprüfung ist wiederhergestellt.

Hinweise zur Portabilität

Die Offsets gelten für macOS arm64 (js-Shell, exakt diese Revision/Build-Flags): WasmArrayObject { +16 numElements, +24 data_, +40 Inline-Daten }, JSFunction native @ +0x20, WasmFuncRef { +0x40 typeDef, +0x38 Aufrufziel }. Sie werden zur Laufzeit durch die Selbsttests der PoCs empirisch validiert; andere Builds/Architekturen müssen sie neu herleiten (der Recon-PoC automatisiert den Großteil davon). Kein PAC bei arm64-Binaries (nicht arm64e); JIT-Bereiche sind zum Aufrufzeitpunkt nicht beschreibbar, daher kapert die Kette ein vorhandenes Aufrufziel, anstatt Code einzuschleusen.

Vollständige Kette: Sandbox-Escape

Siehe docs/full-escape.md für die Analyse der zweiten Stufe: Escape aus der OS-Sandbox aus der Codeausführung im Renderer heraus über CVE-2026-2768 (Bug 2014101, OOB-Write in IndexedDB des Elternprozesses) — der „zweite Bug“ einer vollständigen Firefox-Kompromittierung. Der hier verwendete verwundbare Quellbaum stammt ebenfalls aus der Zeit vor diesem Fix.

Umfang / ehrliche Einschränkungen

Dies entkommt der Sandbox der Wasm-Engine (Eindämmung von linearem Speicher/GC) und ermöglicht native Codeausführung im aktuellen Prozess. Bei einem realen Browser-Angriff landet dies im Content-Prozess von Firefox; das Entkommen aus der OS-Sandbox (der „zweite Bug“: IPC-Verwechslung oder Kernel-Exploit) ist ein separates Problem und nicht Teil dieses PoC.

Gegenmaßnahmen

  • Auf Firefox / Thunderbird ≥ 148 aktualisieren.
  • Mehrstufige Verteidigung: javascript.options.wasm=false blockiert den Auslösevektor.

Referenzen

  • MFSA-2026-13
  • NVD: CVE-2026-2796
  • Fix: https://github.com/mozilla-firefox/firefox/commit/e2acef6711967949cd0825869034165383c482e1
  • Tests: https://github.com/mozilla-firefox/firefox/commit/0605ac40b002d576688190a5b9921b8dcd1b6b96

Haftungsausschluss

Nur für Sicherheitsforschung, Bildung und defensive Tests. Die Schwachstelle ist in aktuellen Firefox-/Thunderbird-Versionen behoben. Nicht gegen Systeme verwenden, die Sie nicht besitzen oder für die Sie keine ausdrückliche Testberechtigung haben.

Tool herunterladen