
Доказательство концепции и техническое описание уязвимости неаутентифицированного раскрытия информации в конечной точке unfurl XenForo, включая Python-скрипт для проверки проблемы.
XenForo до версии 2.3.13 раскрывает ожидающие предпросмотры rich-link через неаутентифицированную конечную точку, привязанную к предсказуемым целочисленным ID.
unfurl.php принимает POST-запрос, содержащий глобальные ID UnfurlResult, загружает эти строки и возвращает отрисованный HTML-предпросмотр. Он не проверяет сессию, видимость контента, родительский объект или подписанные права доступа. Возвращаемый фрагмент включает исходный URL, включая его строку запроса.
Эксплуатация чувствительна ко времени. Жертва должна отправить ранее невидимый отдельный URL в ограниченном контенте, целевой ресурс должен возвращать пригодные метаданные, а атакующий должен предсказать вновь выделенный ID, пока строка находится в ожидании. Недавний предпросмотр, принадлежащий атакующему, может служить верхней границей. Проблема заключается в обходе авторизации и раскрытии информации, а не в SSRF или выполнении кода.
Я воспроизвёл одно раскрытие смежного ID с синтетическими маркерами на XenForo 2.3.12 (build 2031270). XenForo 2.3.13 содержит исправление.
python poc.py --base-url https://xenforo.example --result-id 123 --expect-marker SYNTHETIC_TEST_MARKER
Скрипт запрашивает ровно один известный тестовый ID без файлов cookie. Он никогда не перечисляет ID и не выводит возвращаемый HTML. Он сообщает только о том, присутствовал ли ожидаемый синтетический маркер.
Обнаружено Марко Пачарони (BomboBombone).