Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-17544 — Exploit per CVE-2026-17544: scrittura OOB in bcmath di PHP convertita in RCE in sola memoria, che aggira disable_functions e open_basedir tramite un resolver runtime privo di offset. | Kitploit
Strumenti/GitHubGitHub/r2qa/cve-2026-17544
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPost-ExploitRed TeamingSviluppo PayloadBinary Exploitation
GitHubr2qa/cve-2026-17544

CVE-2026-17544

Exploit per CVE-2026-17544: scrittura OOB in bcmath di PHP convertita in RCE in sola memoria, che aggira disable_functions e open_basedir tramite un resolver runtime privo di offset.

Vedi Repository
5 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-17544 — Scrittura OOB in PHP bcmath → RCE universale in sola memoria

Un proof-of-concept armato per CVE-2026-17544, una scrittura fuori dai limiti (out-of-bounds) nell'estensione bcmath riscritta di PHP (bc_str2num). Trasforma il crash solo DoS pubblicamente noto in una primitiva di remote code execution completa, universale e in sola memoria che bypassa contemporaneamente disable_functions e open_basedir.

Solo per ricerca o istruzione autorizzate. Esegui questo solo su sistemi di tua proprietà o su cui sei esplicitamente autorizzato a testare.

image

TL;DR

  • Bug: bc_str2num tronca la parte frazionaria su uno scale manuale, ritaglia nuovamente gli zeri finali, ma non aggiorna fractional_end. Il buffer viene dimensionato per la lunghezza ritagliata mentre la copia usa la lunghezza pre-ritaglio → scrittura di zeri out-of-bounds controllata nell'heap Zend MM.
  • Exploit: la scrittura OOB di zeri azzera il refcount di una zend_string adiacente (lunghezza preservata) → use-after-free da desincronizzazione del refcount → lettura/scrittura relativa tramite stringa gigante → lettura arbitraria assoluta fault-safe → risoluzione dei simboli a runtime → una chiamata di funzione nativa completamente data-only.
  • Payload: costruisce un falso zend_class_entry + function_table inline + una falsa zend_function{ handler = zif_shell_exec }, poi la invoca come metodo. L'output del comando viene restituito come stringa e consegnato nella risposta/stdout.
  • Nessun offset hardcoded. L'indirizzo di base, .data e il simbolo target vengono tutti risolti a runtime scansionando la memoria — quindi un singolo file funziona su build e distribuzioni diverse.

Modello di minaccia — leggi questo prima

Questa è una primitiva di sandbox-escape / post-exploitation, non una RCE basata solo su input remoto.

ScenarioRisultato
L'attaccante può già eseguire PHP (webshell, deserializzazione, sink eval) ma è confinato da disable_functions + open_basedir✅ RCE nativa (questo PoC)

Una singola chiamata bcmath su input dell'attaccante fornisce una scrittura OOB di zeri cieca senza feedback. La RCE completa richiede esecuzione PHP arbitraria per preparare l'heap, costruire le primitive di lettura/scrittura ed eseguire il resolver — nessuna di queste cose è esprimibile come argomento di funzione. Quindi il tetto realistico per un'esposizione solo-input è un denial of service remoto; l'esecuzione di codice richiede un contesto di esecuzione PHP esistente che questo PoC libera poi dalla sandbox.


Versioni interessate

Il bug esiste solo nella bcmath riscritta (linea PHP 8.4 / 8.5):

Verificato end-to-end (uid=0, output catturato) su PHP 8.4.23 e PHP 8.5.8, amd64, con lo stesso file non modificato — il layout delle struct Zend è identico tra 8.4 / 8.5.


Requisiti / presupposti

  • Linux amd64.
  • Un binario PHP 8.4/8.5 nella gamma vulnerabile con bcmath abilitato.
  • Mapping binario contiguo (ogni distribuzione standard / build di produzione). La scansione runtime della base scende pagina per pagina da .text fino all'header ELF; questo è sicuro su qualsiasi binario mappato in modo contiguo. Solo le build artificiali -z separate-code con gap non mappati di 2 MB non possono essere risolte automaticamente da una scansione cieca (non viste in produzione).
  • Per la consegna via web è richiesto l'isolamento delle richieste, così che un exit() per richiesta non uccida il server: php-fpm, Apache mod_php, o il server integrato con PHP_CLI_SERVER_WORKERS>0.

Utilizzo

CLI

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

Web (post-exploitation, in un contesto PHP in sandbox)

Distribuiscilo ad esempio come shell.php, poi:

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

L'output del comando viene catturato tramite zif_shell_exec e scritto nel corpo della risposta.


Come funziona (dettagliato)

  1. Trigger + grooming. Spruzza stringhe di dimensione fissa, crea un buco ed esegui il bccomp() vulnerabile così che la scrittura OOB di zeri colpisca solo il refcount di una zend_string adiacente (lunghezza preservata).
  2. UAF da desincronizzazione del refcount. La stringa vittima viene liberata prematuramente mentre un riferimento è ancora pendente.
  3. Stringa gigante. Lo slot liberato viene reclamato da un oggetto; il campo lunghezza della stringa pendente diventa un valore enorme → lettura/scrittura relativa sull'heap.
  4. Lettura assoluta. Un falso zend_reference (tramite indirezione) produce una lettura arbitraria assoluta fault-safe che non tocca mai l'header con refcount del target.
  5. Risoluzione. Da un puntatore .text divulgato: scendi di pagina in pagina fino alla magic ELF (base), analizza i program headers per trovare .data, poi scansiona .data per la zend_function_entry di shell_exec il cui handler punta in .text.
  6. Chiamata data-only. Costruisci un falso zend_class_entry, una inline con un singolo bucket (hash corretto, catena di collisioni terminata) e una falsa il cui handler è ; corrompi il puntatore alla classe dell'oggetto probe e invoca il metodo. L'output viene restituito e stampato.

File

  • exploit.php — l'exploit universale in sola memoria (CLI + web).

Crediti

  • Proof-of-concept DoS pubblico originale: boreas37/cve-2026-17544-poc.
  • Tecniche di memory-disclosure / chiamata data-only ispirate a precedenti ricerche sullo sfruttamento di PHP.

Disclaimer

Fornito per ricerca e istruzione sulla sicurezza. L'autore non è responsabile per usi impropri. Non utilizzarlo contro sistemi che non sei autorizzato a testare.

Scarica lo strumento
L'applicazione si limita a chiamare una funzione bcmath su input utente grezzo, es. bccomp($_POST['v'])❌ Solo DoS / crash
Ramo PHPVulnerabile
7.x, 8.0 – 8.3No (vecchia libbcmath, bc_str2num diversa)
8.4.0 – 8.4.23Sì
8.5.0 – 8.5.8Sì
≥ 8.4.24 / ≥ 8.5.9Corretto
function_table
zend_string
zend_internal_function
zif_shell_exec