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-17544 — Exploit für CVE-2026-17544: PHP-bcmath-OOB-Write, umgewandelt in eine rein speicherbasierte RCE, die disable_functions und open_basedir mithilfe eines zur Laufzeit offsetfreien Resolvers umgeht. | Kitploit
Tools/GitHubGitHub/r2qa/cve-2026-17544
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPost-ExploitationRed TeamingPayload-EntwicklungBinary-Exploitation
GitHubr2qa/cve-2026-17544

CVE-2026-17544

Exploit für CVE-2026-17544: PHP-bcmath-OOB-Write, umgewandelt in eine rein speicherbasierte RCE, die disable_functions und open_basedir mithilfe eines zur Laufzeit offsetfreien Resolvers umgeht.

Repository anzeigen
5vor 26 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-17544 — PHP bcmath OOB-Write → universelle Memory-only-RCE

Ein ausgereifter Proof-of-Concept für CVE-2026-17544, einen Out-of-Bounds-Write in der neu geschriebenen bcmath-Erweiterung von PHP (bc_str2num). Dies verwandelt den öffentlich bekannten DoS-only-Crash in eine vollständige, universelle, Memory-only-RCE-Primitive, die gleichzeitig disable_functions und open_basedir umgeht.

Nur für autorisierte Forschung / zu Bildungszwecken. Führen Sie dies nur gegen Systeme aus, die Ihnen gehören oder für die Sie ausdrücklich autorisiert wurden.

image

TL;DR

  • Bug: bc_str2num kürzt einen Nachkommateil bei einem manuellen scale, entfernt erneut nachgestellte Nullen, aktualisiert aber nicht. Der Puffer wird für die erneut gekürzte Länge allokiert, während die Kopie die Länge vor dem Kürzen verwendet → kontrollierter in den Zend-MM-Heap.
fractional_end
Out-of-Bounds-Null-Write
  • Exploit: Der OOB-Null-Write nullt den Refcount eines benachbarten zend_string (Länge bleibt erhalten) → Refcount-Desync-Use-after-Free → Riesen-String mit relativem R/W → ausfallsicherer absoluter beliebiger Read → Laufzeit-Symbolauflösung → ein vollständig Data-only-Aufruf einer nativen Funktion.
  • Payload: Baut einen gefälschten zend_class_entry + eine Inline-function_table + eine gefälschte zend_function{ handler = zif_shell_exec } und ruft sie als Methode auf. Die Befehlsausgabe wird als String zurückgegeben und in die Antwort/Stdout geliefert.
  • Keine festkodierten Offsets. Basisadresse, .data und das Zielsymbol werden zur Laufzeit durch Speicherscan aufgelöst — eine einzige Datei funktioniert daher über Builds und Distributionen hinweg.

  • Bedrohungsmodell — zuerst lesen

    Dies ist eine Sandbox-Escape-/Post-Exploitation-Primitive, keine reine Remote-Input-RCE.

    SzenarioErgebnis
    Angreifer kann bereits PHP ausführen (Webshell, Deserialisierung, eval-Senke), wird aber von disable_functions + open_basedir eingeschränkt✅ Native RCE (dieser PoC)
    Anwendung ruft lediglich eine bcmath-Funktion mit roher Benutzereingabe auf, z. B. bccomp($_POST['v'])❌ Nur DoS / Crash

    Ein einzelner bcmath-Aufruf mit Angreifer-Eingabe ergibt einen blinden OOB-Null-Write ohne Feedback. Vollständige RCE erfordert beliebige PHP-Ausführung, um den Heap zu präparieren, die R/W-Primitiven zu bauen und den Resolver auszuführen — nichts davon ist als Funktionsargument ausdrückbar. Die realistische Obergrenze für eine reine Input-Exposition ist also ein Remote-Denial-of-Service; Codeausführung erfordert einen bestehenden PHP-Ausführungskontext, den dieser PoC dann aus der Sandbox befreit.


    Betroffene Versionen

    Der Bug existiert nur in der neu geschriebenen bcmath (PHP-8.4/8.5-Linie):

    PHP-ZweigVerwundbar
    7.x, 8.0 – 8.3Nein (altes libbcmath, anderes bc_str2num)
    8.4.0 – 8.4.23Ja
    8.5.0 – 8.5.8Ja
    ≥ 8.4.24 / ≥ 8.5.9Gepatcht

    End-to-End verifiziert (uid=0, Ausgabe erfasst) auf PHP 8.4.23 und PHP 8.5.8, amd64, mit derselben unveränderten Datei — das Zend-Struct-Layout ist über 8.4 / 8.5 identisch.


    Anforderungen / Annahmen

    • Linux amd64.
    • Ein PHP-8.4/8.5-Binary im verwundbaren Bereich mit aktiviertem bcmath.
    • Kontinuierliches Binary-Mapping (jeder Standard-Build / Produktions-Build). Der Laufzeit- Basisscan läuft Seite für Seite von .text abwärts zum ELF-Header; dies ist bei jedem kontinuierlich gemappten Binary sicher. Nur künstliche -z separate-code-Builds mit nicht gemappten 2-MB-Lücken können von einem blinden Scan nicht automatisch aufgelöst werden (in der Produktion nicht beobachtet).
    • Für Web-Auslieferung ist Request-Isolation erforderlich, damit ein exit() pro Request den Server nicht tötet: php-fpm, Apache mod_php oder der eingebaute Server mit PHP_CLI_SERVER_WORKERS>0.

    Verwendung

    CLI

    root@kitploit:~
    php exploit.php "id; uname -a"
    

    Web (Post-Exploitation, innerhalb eines sandboxed PHP-Kontexts)

    Z. B. als shell.php bereitstellen, dann:

    root@kitploit:~
    GET  /shell.php?cmd=id
    POST cmd=id
    

    Die Befehlsausgabe wird über zif_shell_exec erfasst und in den Antwortbody geschrieben.


    So funktioniert es (detailliert)

    1. Trigger + Groom. Fest große Strings sprayen, ein Loch schlagen und das verwundbare bccomp() ausführen, sodass der OOB-Null-Write nur auf den Refcount eines benachbarten zend_string trifft (Länge bleibt erhalten).
    2. Refcount-Desync-UAF. Der Opfer-String wird vorzeitig freigegeben, während noch eine Referenz baumelt.
    3. Riesen-String. Der freie Slots wird von einem Objekt übernommen; das Längenfeld des baumelnden Strings wird zu einem riesigen Wert → relativer Read/Write über den Heap.
    4. Absoluter Read. Eine gefälschte zend_reference (über Indirektion) ergibt einen ausfallsicheren absoluten beliebigen Read, der den Refcount-Header des Ziels nie berührt.
    5. Auflösen. Von einem geleakten .text-Zeiger aus: seitenweise abwärts zur ELF-Magie (Basis) gehen, Programm-Header parsen, um .data zu finden, dann .data nach dem shell_exec- zend_function_entry durchsuchen, dessen Handler in .text zeigt.
    6. Data-only-Aufruf. Einen gefälschten zend_class_entry, eine Inline-function_table mit einem einzelnen Bucket (korrekter zend_string-Hash, terminierte Kollisionskette) und eine gefälschte zend_internal_function mit dem Handler zif_shell_exec konstruieren; den Klassenzeiger des Probe-Objekts korrumpieren und die Methode aufrufen. Die Ausgabe wird zurückgegeben und ausgegeben.

    Dateien

    • exploit.php — der universelle Memory-only-Exploit (CLI + Web).

    Danksagungen

    • Originaler öffentlicher DoS-Proof-of-Concept: boreas37/cve-2026-17544-poc.
    • Memory-Disclosure-/Data-only-Call-Techniken inspiriert von früherer PHP-Exploit-Forschung.

    Haftungsausschluss

    Bereitgestellt für Sicherheitsforschung und Bildung. Der Autor ist nicht verantwortlich für Missbrauch. Nicht gegen Systeme einsetzen, für die Sie nicht autorisiert sind.

    Tool herunterladen