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-86547-mrubyc-op-enter — Prueba de concepto independiente para CVE-2026-86547, una desreferencia de puntero NULL en mrubyc op_enter() hasta la versión 4.0.0. | Kitploit
Herramientas/GitHubGitHub/harshrajsinghania/cve-2026-86547-mrubyc-op-enter
Seguridad de Sistemas EmbebidosForensia de MemoriaAnálisis de VulnerabilidadesExplotaciónFuzzingPapers e Investigación
GitHubharshrajsinghania/cve-2026-86547-mrubyc-op-enter

cve-2026-86547-mrubyc-op-enter

Prueba de concepto independiente para CVE-2026-86547, una desreferencia de puntero NULL en mrubyc op_enter() hasta la versión 4.0.0.

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
Ver Repositorio
hace 8h 1mAún no revisado

CVE-2026-86547 — Desreferencia de puntero NULL en OP_ENTER de mrubyc

Prueba de concepto independiente para CVE-2026-86547, una desreferencia de puntero NULL en el manejador op_enter() de mrubyc hasta la versión 4.0.0.

Resumen

mrubyc es una implementación ligera de Ruby para sistemas embebidos. Su máquina virtual de bytecode mantiene el puntero del marco de llamada actual en mrbc_vm.callinfo_tail. En el nivel superior, mrbc_vm_begin() inicializa este puntero a NULL porque todavía no existe ningún marco de llamada a método.

En la implementación vulnerable de op_enter() en release4.0.0, el manejador lee callinfo->reg_offset sin comprobar primero si vm->callinfo_tail es NULL:

root@kitploit:~
mrbc_callinfo *callinfo = vm->callinfo_tail;
int reg_offset = callinfo->reg_offset;

Un programa de bytecode .mrb manipulado puede colocar OP_ENTER en el nivel superior, provocando que el intérprete alcance este código con un callinfo_tail NULL y falle mediante una desreferencia de puntero NULL.

CVE: CVE-2026-86547
Tipo: CWE-476 — Desreferencia de puntero NULL
Impacto: Disponibilidad / denegación de servicio
Afectado: mrubyc hasta 4.0.0
Gravedad: Media, CVSS 6.9 (según el aviso)

Qué demuestra esta PoC

La PoC replica los diseños relevantes de mrbc_callinfo y mrbc_vm y reproduce el acceso vulnerable a memoria de forma independiente del runtime completo de mrubyc.

Demuestra dos rutas:

  1. Ruta vulnerable: callinfo_tail es NULL y se desreferencia callinfo->reg_offset sin una comprobación, produciendo un fallo de segmentación.
  2. Ruta corregida: una comprobación de NULL rechaza de forma segura el OP_ENTER de nivel superior, seguida de una prueba de control que muestra que un marco de llamada válido sigue funcionando.

El arnés usa volatile en el puntero vulnerable y __builtin_trap() en su descripción para hacer que el reproductor sea adecuado para la observación basada en sanitizers. El acceso vulnerable real es la lectura de callinfo->reg_offset.

Compilación y ejecución

GCC / Clang

root@kitploit:~
gcc -O0 -g -o poc poc.c
./poc

El resultado esperado en la ruta vulnerable es un fallo de segmentación después de:

root@kitploit:~
[VULNERABLE PATH] op_enter without NULL guard
  vm->callinfo_tail = NULL (top-level frame)
  About to dereference NULL...

AddressSanitizer

root@kitploit:~
gcc -O0 -g -fsanitize=address -fno-omit-frame-pointer -o poc-asan poc.c
./poc-asan

El sanitizer debería informar de un SEGV en una dirección correspondiente al campo reg_offset desde una base mrbc_callinfo NULL. Con el diseño de estructura usado aquí, offsetof(mrbc_callinfo, reg_offset) es 0x14.

Control de la ruta corregida

root@kitploit:~
./poc fixed

La salida esperada incluye:

root@kitploit:~
[FIXED PATH] op_enter with NULL guard
  [GUARD] top-level OP_ENTER — rejected safely
  [control, valid frame] reg_offset = 5
Fixed path: no crash.

Ubicación del código fuente vulnerable

El manejador vulnerable original está en src/vm.c en mrubyc release4.0.0, alrededor de la línea 1537. La operación relevante es la desreferencia directa de callinfo->reg_offset después de asignar vm->callinfo_tail a callinfo sin una comprobación de NULL.

El código fuente posterior a la corrección referenciado en la investigación es el commit 4261cf5e5ae5579e3110dab98a04b91c7d919429.

Desencadenante en el mundo real

El arnés independiente demuestra el error de memoria subyacente. En el propio mrubyc, el desencadenante requiere un archivo de bytecode .mrb manipulado que contenga una instrucción OP_ENTER en el nivel superior, fuera de una definición de método. Si una aplicación carga y ejecuta archivos .mrb no confiables, un archivo de bytecode controlado por un atacante puede, por lo tanto, provocar el fallo del proceso del intérprete.

Esta es una condición de denegación de servicio. La investigación no afirma ejecución de código, revelación de información ni corrupción de memoria más allá de la desreferencia de NULL.

Referencias

  • CVE-2026-86547
  • Aviso de VulnCheck
  • mrubyc release4.0.0 src/vm.c
  • src/vm.c posterior a la corrección
  • Repositorio de código fuente de mrubyc
  • CVE-2026-38976, el problema relacionado de comprobación de NULL en OP_SUPER que motivó la auditoría de op_enter()

Historia de la investigación

La historia del descubrimiento está documentada en: I Read Someone Else's Bug Report, Then Found The Same Missing Check In The Next Function Over.

La observación clave de la investigación fue que op_super() tenía una comprobación de NULL ausente en torno al mismo invariante vm->callinfo_tail. Al revisar el manejador vecino op_enter() se mostró que la misma suposición estaba presente allí sin la comprobación correspondiente.

Descargar herramienta