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
vor 5 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 fractional_end 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 Out-of-Bounds-Null-Write in den Zend-MM-Heap.
  • 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

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):

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- mit einem einzelnen Bucket (korrekter -Hash, terminierte Kollisionskette) und eine gefälschte mit dem Handler 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
✅ Native RCE (dieser PoC)
Anwendung ruft lediglich eine bcmath-Funktion mit roher Benutzereingabe auf, z. B. bccomp($_POST['v'])❌ Nur DoS / Crash
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
function_table
zend_string
zend_internal_function
zif_shell_exec