
PoC modificato per RCE di MariaDB v11.1 tramite UDF, che restituisce l'output dei comandi inline tramite query SQL. Include confronto dettagliato del codice e istruzioni di compilazione per Windows.
MariaDB v11.1 RCE tramite UDF — PoC modificato basato su Ant1sec-ops/CVE-2024-27766.
| Interessata | MariaDB v11.1 |
| Corretta in | 10.5.25 / 10.6.18 / 10.11.8 / 11.0.6 / 11.1.5 / 11.2.4 / 11.4.2+ |
| Tipo | RCE tramite funzione definita dall'utente (UDF) |
MariaDB v11.1 consente a un attaccante con privilegi di database sufficienti (privilegio FILE + accesso in scrittura alla directory dei plugin) di registrare una UDF dannosa ed eseguire comandi OS arbitrari tramite essa.
Nota: La MariaDB Foundation contesta questo CVE sostenendo che non viene superato alcun confine di privilegio. Lo sfruttamento richiede accesso al database a livello amministrativo o equivalente.
Il PoC originale utilizza un tipo di ritorno longlong, quindi do_system() restituisce solo se il comando ha avuto successo — non puoi vedere l'output direttamente da SQL.
Questa versione cambia il tipo di ritorno in char *, che tramite pipe restituisce stdout come risultato della query. Nessun canale out-of-band necessario; basta eseguire SELECT do_system('whoami') e l'output viene restituito inline.
| Originale | Questo PoC | |
|---|---|---|
| Tipo di ritorno | longlong | char * |
| Esecuzione | system() | _popen() + ciclo fgets() |
| Risultato SQL | codice di uscita | stdout del comando |
| Memoria | nessuna | allocata su heap, liberata in deinit |
Una cosa degna di nota: restituire char * da una UDF richiede che MariaDB conosca in anticipo la dimensione del buffer. do_system_init imposta initid->max_length = 65536, corrispondente al buffer di output allocato nella funzione principale.
Poiché il tipo di ritorno è cambiato, è necessario usare RETURNS STRING quando si registra la funzione — non RETURNS INTEGER come nell'originale.
CREATE FUNCTION do_system RETURNS STRING SONAME 'do_system.dll';
_popen / _pclose)FILE e accesso in scrittura alla directory dei pluginSolo per scopi educativi e di ricerca. Non utilizzare contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione al test.