ESB-1154 Lucene fix attack surface#343
Open
MEM2677 wants to merge 1 commit into
Open
Conversation
cdb7344 to
28332d0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CVE-2019-17558 VelocityResponseWriter
CVE-2017-12629 XXE
Lucene Query Injection → bypass dei controlli di accesso**
Il filtro di visibilità dei gruppi (
+(entity_group:free)) viene applicato programmaticamente come clausola MUST all'interno dellaBooleanQuery. L'iniezione di parentesi nel nome di un campo altera il bilanciamento della stringa serializzata della query, consentendo al parser di Solr di ricostruire un albero di clausole differente, nel quale la restrizione sul gruppo non viene più applicata come previsto.Confermato: Injection del parametro di ordinamento (Sort Parameter Injection)
Le chiavi dei campi utilizzate in
SolrQuery.addSort(fieldKey, order)(derivate dai campi di ordinamento dei filtri) erano soggette alla medesima assenza di sanitizzazione, rendendo possibile l'iniezione nel parametro HTTPsortinviato a Solr.Non ottenibile: Remote Code Execution (RCE) a livello di sistema operativo tramite Solr Local Params
I noti vettori di RCE di Solr (CVE-2019-17558 - VelocityResponseWriter e CVE-2017-12629 - XXE) richiedono che i local params (
{!...}) siano presenti all'inizio della stringa del parametroq. Tuttavia,BooleanQuery.toString()genera sempre una stringa che inizia con+,-oppure(, rendendo impossibile posizionare i local params all'indice 0 attraverso questo percorso. Inoltre, il controller non inoltra parametri HTTP arbitrari a SolrJ (ad esempiowt,v.template, ecc.).Correzione
File:
solr-plugin/src/main/java/org/entando/entando/plugins/jpsolr/aps/system/solr/SearcherDAO.javaÈ stata introdotta una rigorosa allowlist, applicata nel metodo
getFilterKey(), che rappresenta il punto unico di controllo attraverso cui transitano tutti i nomi dei campi prima di essere utilizzati per la creazione degli oggettiTerm.Sono stati aggiunti due controlli:
Controllo sulla chiave del campo (Field-key guard) – applicato dopo la chiamata a
replace(":", "_"). Viene rifiutata qualsiasi chiave contenente caratteri diversi da[a-zA-Z0-9_]. Il controllo copre i campiattribute,entityAttrelang(utilizzato come chiave per la ricerca full-text).Controllo sul prefisso della lingua (Lang-prefix guard) – applicato al codice della lingua prima che venga anteposto ai nomi dei campi degli attributi utilizzati nei filtri. Questo elimina anche il percorso di injection ottenibile tramite un valore
langCodeappositamente costruito.Entrambi i controlli generano una
IllegalArgumentExceptionin caso di violazione. Attualmente l'eccezione non viene gestita e si propaga fino al chiamante, producendo una risposta HTTP 500. Un possibile miglioramento futuro consiste nel gestire l'eccezione a livello di controller, restituendo invece un errore HTTP 400 (Bad Request).