
Proof of concept и техническое описание CVE-2026-56096 — слепой инъекции запросов Solr в TYPO3 EXT:solr, позволяющей неаутентифицированное перечисление полей и извлечение данных.
В официальном расширении TYPO3 Apache Solr (EXT:solr / apache-solr-for-typo3/solr) была обнаружена архитектурная уязвимость безопасности. Проблема позволяет неаутентифицированным удалённым злоумышленникам внедрять произвольный синтаксис запросов Solr/Lucene через параметр поиска tx_solr[q], что даёт возможность несанкционированного слепого перечисления полей и полного извлечения метаданных из поискового индекса.
EXT:solr (Параметр поиска: tx_solr[q])CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:NРасширение EXT:solr принимает поисковые запросы, предоставленные пользователем, через параметр tx_solr[q] и передаёт их в движок Apache Solr. По замыслу расширение допускает использование определённых операторов запросов — таких как подстановочные знаки (*), односимвольные подстановочные знаки (?), селекторы полей (:) и диапазонные запросы ([a TO z]) — для поддержки легитимной функциональности, например фасетной фильтрации.
Поскольку эти символы передавались непосредственно в конструкцию запроса бэкенда без применения белого списка или слоя абстракции запросов, злоумышленник может передать синтаксис, специфичный для полей, чтобы выйти за предполагаемые границы поиска. Это позволяет неаутентифицированным пользователям напрямую запрашивать внутренние поля Solr и извлекать данные индекса с использованием булевых слепых техник.
field:*Добавив подстановочный знак к произвольному или предполагаемому имени поля, злоумышленник может проверить, существует ли это поле в схеме:
GET /search?tx_solr[q]=siteHash:* HTTP/1.1
Host: target.example.com
Если поле существует, Solr обрабатывает запрос по всем совпадающим записям (часто вызывая различные коды ответа или поведение, связанное с объёмом), что позволяет автоматизировать перечисление полей на основе словарей.
Злоумышленники могут извлекать конфиденциальные значения полей посимвольно, используя булевы выводы:
GET /search?tx_solr[q]=siteHash:a* HTTP/1.1 --> Возвращает результаты поиска (Значение начинается с 'a')
GET /search?tx_solr[q]=siteHash:b* HTTP/1.1 --> "Nothing found" (Значение не начинается с 'b')
?Оператор односимвольного подстановочного знака (?) позволяет определить точную длину хранимой строки перед началом посимвольного перебора:
GET /search?tx_solr[q]=siteHash:????????????* HTTP/1.1 (Проверяет наличие 12+ символов)
GET /search?tx_solr[q]=siteHash:?????????????* HTTP/1.1 (Проверяет наличие 13+ символов)
[a TO z])Диапазонные запросы позволяют выполнять извлечение методом бинарного поиска по первому символу, сокращая количество необходимых запросов с 26 до ~5 на каждую позицию символа:
GET /search?tx_solr[q]=siteHash:[a TO m] HTTP/1.1 --> Определяет, попадает ли символ в диапазон 'a'-'m'
GET /search?tx_solr[q]=siteHash:[n TO z] HTTP/1.1 --> Определяет, попадает ли символ в диапазон 'n'-'z'
Комбинирование определения длины, диапазонных запросов и префиксных подстановочных знаков позволяет полностью извлечь поле при минимальном количестве запросов.
EXT:solr.Глобальное экранирование символов недостаточно, поскольку такие операторы, как * и :, обслуживают предусмотренные функции поиска. Для устранения требуется модель белого списка и парсинга на уровне приложения:
[email protected]).