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-86547-mrubyc-op-enter — Eigenständiger Proof of Concept für CVE-2026-86547, eine NULL-Zeiger-Dereferenzierung in mrubyc op_enter() bis einschließlich 4.0.0. | Kitploit
Tools/GitHubGitHub/harshrajsinghania/cve-2026-86547-mrubyc-op-enter
Embedded-System-SicherheitSpeicherforensikSchwachstellenanalyseExploitationFuzzingPapers & Forschung
GitHubharshrajsinghania/cve-2026-86547-mrubyc-op-enter

cve-2026-86547-mrubyc-op-enter

Eigenständiger Proof of Concept für CVE-2026-86547, eine NULL-Zeiger-Dereferenzierung in mrubyc op_enter() bis einschließlich 4.0.0.

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen
vor 8h 2mNoch nicht geprüft

CVE-2026-86547 — mrubyc OP_ENTER NULL-Zeiger-Dereferenzierung

Eigenständiger Proof of Concept für CVE-2026-86547, eine NULL-Zeiger-Dereferenzierung im op_enter()-Handler von mrubyc bis einschließlich Release 4.0.0.

Zusammenfassung

mrubyc ist eine leichtgewichtige Ruby-Implementierung für eingebettete Systeme. Seine Bytecode-VM hält den Zeiger auf den aktuellen Aufrufrahmen in mrbc_vm.callinfo_tail. Auf oberster Ebene initialisiert mrbc_vm_begin() diesen Zeiger auf NULL, da noch kein Methodenaufrufrahmen existiert.

In der verwundbaren op_enter()-Implementierung in release4.0.0 liest der Handler callinfo->reg_offset, ohne zuvor zu prüfen, ob vm->callinfo_tail NULL ist:

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

Ein manipuliertes .mrb-Bytecode-Programm kann OP_ENTER auf oberster Ebene platzieren, wodurch der Interpreter diesen Code mit einem NULL-callinfo_tail erreicht und durch eine NULL-Zeiger-Dereferenzierung abstürzt.

CVE: CVE-2026-86547
Typ: CWE-476 — NULL-Zeiger-Dereferenzierung
Auswirkung: Verfügbarkeit / Denial of Service
Betroffen: mrubyc bis einschließlich 4.0.0
Schweregrad: Mittel, CVSS 6.9 (laut Advisory)

Was dieser PoC demonstriert

Der PoC bildet die relevanten mrbc_callinfo- und mrbc_vm-Layouts nach und reproduziert den verwundbaren Speicherzugriff unabhängig von der vollständigen mrubyc-Laufzeitumgebung.

Er demonstriert zwei Pfade:

  1. Verwundbarer Pfad: callinfo_tail ist NULL und callinfo->reg_offset wird ohne Schutzprüfung dereferenziert, was einen Segmentation Fault erzeugt.
  2. Behobener Pfad: Eine NULL-Prüfung weist das OP_ENTER auf oberster Ebene sicher zurück, gefolgt von einem Kontrolltest, der zeigt, dass ein gültiger Aufrufrahmen weiterhin funktioniert.

Das Harness verwendet volatile für den verwundbaren Zeiger und __builtin_trap() in seiner Beschreibung, um den Reproduzierer für sanitizerbasierte Beobachtung geeignet zu machen. Der tatsächliche verwundbare Zugriff ist das Lesen von callinfo->reg_offset.

Build und Ausführung

GCC / Clang

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

Das erwartete Ergebnis auf dem verwundbaren Pfad ist ein Segmentation Fault nach:

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

Der Sanitizer sollte einen SEGV auf einer Adresse melden, die dem reg_offset-Feld von einer NULL-mrbc_callinfo-Basis entspricht. Mit dem hier verwendeten Struktur-Layout ist offsetof(mrbc_callinfo, reg_offset) gleich 0x14.

Kontrolle des behobenen Pfads

root@kitploit:~
./poc fixed

Die erwartete Ausgabe enthält:

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.

Position des verwundbaren Quellcodes

Der ursprüngliche verwundbare Handler befindet sich in src/vm.c in mrubyc release4.0.0, etwa in Zeile 1537. Die relevante Operation ist die direkte Dereferenzierung von callinfo->reg_offset, nachdem vm->callinfo_tail ohne NULL-Prüfung callinfo zugewiesen wurde.

Der in der Untersuchung referenzierte Quellcode nach der Behebung ist Commit 4261cf5e5ae5579e3110dab98a04b91c7d919429.

Auslöser in der Praxis

Das eigenständige Harness demonstriert den zugrunde liegenden Speicherfehler. In mrubyc selbst erfordert der Auslöser eine manipulierte .mrb-Bytecode-Datei, die eine OP_ENTER-Anweisung auf oberster Ebene außerhalb einer Methodendefinition enthält. Wenn eine Anwendung nicht vertrauenswürdige .mrb-Dateien lädt und ausführt, kann eine vom Angreifer kontrollierte Bytecode-Datei daher den Interpreterprozess zum Absturz bringen.

Dies ist eine Denial-of-Service-Bedingung. Die Untersuchung beansprucht keine Codeausführung, Informationsoffenlegung oder Speicherkorruption über die NULL-Dereferenzierung hinaus.

Referenzen

  • CVE-2026-86547
  • VulnCheck advisory
  • mrubyc release4.0.0 src/vm.c
  • Post-fix src/vm.c
  • mrubyc source repository
  • CVE-2026-38976, das verwandte OP_SUPER-NULL-Prüfungsproblem, das die Prüfung von op_enter() motivierte

Recherchegeschichte

Die Entdeckungsgeschichte ist dokumentiert in: I Read Someone Else's Bug Report, Then Found The Same Missing Check In The Next Function Over.

Die zentrale Beobachtung der Untersuchung war, dass op_super() eine fehlende NULL-Prüfung rund um dieselbe vm->callinfo_tail-Invariante aufwies. Die Prüfung des benachbarten op_enter()-Handlers zeigte, dass dieselbe Annahme dort ohne die entsprechende Schutzprüfung vorhanden war.

Tool herunterladen