Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-2766-but-with-wasm — CVE-2026-2766, pero con wasm | Kitploit
Herramientas/GitHubGitHub/sneakynachos/cve-2026-2766-but-with-wasm
Análisis de VulnerabilidadesExplotaciónShellcodeDesarrollo de PayloadsExplotación de Binarios
GitHubsneakynachos/cve-2026-2766-but-with-wasm

CVE-2026-2766-but-with-wasm

CVE-2026-2766, pero con wasm

Ver Repositorio
111hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-2766, pero con wasm

Estado: PoC de fallo validado con secuestro de flujo de control demostrado (pc del fallo = veneno de celda liberada 0xcdcdcdcdcdcdcdcd bajo el shell de depuración — el motor salta a un puntero leído del ICScript liberado). Trabajo restante: controlar los bytes reclamados. Véase research/README.md.

Una cadena de la familia WasmBlazeFox sobre un fallo de 2026: CVE-2026-2766, "JIT miscompilation / use-after-free in the JavaScript Engine: JIT component", corregido en Firefox 148 (MFSA 2026-13). El objetivo final es el mismo que CVE-2024-29943-but-with-wasm: convertir la primitiva en control de un puntero de código, y apuntarlo a una página JIT de WASM llena de constantes de shellcode.

Causa raíz

De los propios comentarios de la prueba de regresión de Mozilla (bug 2013583, prueba incluida en hg 457b68097f81) y del SMDOC ICScript Lifetimes en js/src/jit/JitScript.h:

  • Durante el inlining de prueba de Ion, una transición de sitio de llamada polimórfico llama a removeInlinedChild → el ICScript del hijo se elimina de inlinedChildren_ pero sigue siendo referenciado por el vector inlinedScripts_ del InliningRoot — y, de forma fatal, por el stub obsoleto CallInlinedFunction que aún permanece en la cadena IC del llamador.
  • Un GC compactante (gczeal(14, 1), es decir, ZealCompactValue en cada asignación) mueve/evacúa el ICScript huérfano mientras la cadena de stubs obsoleta conserva la dirección antigua.
  • La siguiente llamada a través del stub antiguo desreferencia el puntero ICScript obsoleto → use-after-move. En compilaciones ASAN/fuzzing la celda liberada se envenena con 0xe5, dando un fallo muy legible.
  • Evidencia del fallo

    Compilación vulnerable: mozilla-central rev b3663be61a1a (nightly del 2026-01-15; la corrección se incluyó entre el 2026-01-15 y el 2026-02-09 — la nightly del 09-feb sobrevive). Shell: jsshell de Taskcluster linux64-fuzzing-asan-opt para esa rev (necesario para gczeal; los shells release-opt carecen de él).

    root@kitploit:~
    ./js --ion-warmup-threshold=100000 poc.js
    
    == ERROR: AddressSanitizer: SEGV on unknown address 0xe5e5e5e5e5e5e5e5
       The signal is caused by a READ memory access.
       #0-#3 <unknown module>          <- baseline JIT code
       #4 EnterJit / MaybeEnterJit     <- js/src/jit/Jit.cpp
       #10 js::jit::DoCallFallback     <- BaselineIC.cpp (the stale IC chain)
       rdi = 0xe5e5e5e5e5e5e5e5        <- the freed ICScript
    

    La desreferencia ocurre en código JIT baseline recorriendo la cadena de stubs obsoleta: control de la celda reclamada = control de los campos ICEntry/stub en los que confía el baseline, incluido el puntero de código del stub al que salta.

    Plan de explotación (en curso)

    root@kitploit:~
    orphaned ICScript (this PoC)
      -> compacting GC moves it; stale chain keeps old address
        -> reclaim the old cell with controlled bytes (size-class spray)
          -> baseline reads fake ICEntry -> fake ICStub -> fake code_ pointer
            -> jump into the WASM JIT page shellcode (f64.const immediates,
               FuncExport entry-offset overwrite — see the 2024-29943 repo)
    

    Véase research/README.md para el registro completo de weaponización. Resumen del estado actual:

    • El fallo es un use-after-move sobre un ICScript asignado con malloc (TrailingArray) — reclamable mediante spray en principio con búferes clasificados por tamaño.
    • El free y el use ocurren a microsegundos de distancia dentro de la llamada final new Ctor(flag), sin ningún punto de callback de JS entre ellos; los sprays ingenuos o bien pierden la ventana (reclaim1/2) o desbaratan el estado IC con una tormenta de GC zeal (reclaim3). La cadena obsoleta sí sobrevive a un único gc() simple (purge_check).
    • El siguiente paso es el análisis de asignaciones del motor bajo gdb (qué asignaciones caen en la celda liberada entre el free y el use). gdb no funciona bajo la emulación x86 de OrbStack, así que esto requiere una máquina Linux x86-64 nativa.

    La etapa WASM en sí ya está construida y demostrada en CVE-2024-29943-but-with-wasm; solo hay que volver a derivar los offsets del modelo de objetos para esta compilación de la era FF149.

    Archivos

    • poc.js — prueba de regresión de Mozilla (bug 2013583), verificada para hacer fallar el jsshell ASAN del 2026-01-15 como se muestra arriba.

    Referencias

    • Aviso: MFSA 2026-13 (Firefox 148)
    • Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=2013583 (restringido)
    • Inclusión de la prueba: hg 457b68097f81
    • Cadenas hermanas: https://github.com/SneakyNachos/CVE-2024-29943-but-with-wasm y https://github.com/SneakyNachos/CVE-2026-2764-but-with-wasm
    • Origen de la técnica: https://github.com/SneakyNachos/WasmBlazeFox
    Descargar herramienta