2013-08-01 4 views
6

I montanti recenti hanno corretto una vulnerabilità che consente agli aggressori di eseguire codice remoto. A quanto pare, non patch questo è come dare black-hats un tappeto rosso di benvenuto con un carrozzone: -/Struts 2 S2-016 Mitigazione della vulnerabilità fino all'aggiornamento

http://struts.apache.org/release/2.3.x/docs/s2-016.html

In sostanza si permette l'esecuzione di comandi attacco come questo:

azione Legit: http://host/struts2-showcase/employee/save.action?redirect:%25{3*4} azione Exploited: http://host/struts2-showcase/employee/save.action?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}

Anche se so che l'aggiornamento dovrebbe essere fatto al più presto, il più presto possibile significherà po 'di tempo da quando il nostro codice di base utilizza vecchio Struts versioni e plugin.

che richiederanno un po 'di refactoring di aggiornare i montanti 2 biblioteche, poi quelli bisogno di essere testati ecc

La mia domanda è se Perciò qualcuno ha qualche idea per fermare questa vulnerabilità venga eseguito? Questo sarà solo finché non saremo in grado di aggiornare.

Mi chiedevo se scrivere un intercettore per disinfettare l'URL prima di essere valutato contro l'OGNL è possibile e in tal caso mitigherebbe questo problema?

Un'altra idea che ho avuto è stata quella di utilizzare il gestore della sicurezza Java in qualche modo per arrestare le chiamate arbitrarie dei processi, è possibile? Rimboccherà temporaneamente il buco?

Il server utilizzato è jBoss se qualcuno lo ritiene pertinente.

+0

Avete qualche server di fronte a jBoss, forse apache? Che ne dici di limitare l'accesso a certi uri-s in esso. –

+0

Vuoi dire qualcosa di un bilanciamento del carico o un firewall con funzionalità di restrizione URL? – Thihara

+0

Questo o un proxy inverso, come Apache. –

risposta

1

Il problema è relativo a DefaultActionMapper e come gestisce i parametri speciali. Questa classe può essere estesa per sovrascrivere il metodo handleSpecialParameters. Tuttavia, se disattivi DMI, questi parametri speciali non funzionano più. Utilizzare la configurazione costante

<constant name="struts.enable.DynamicMethodInvocation" value="false"/> 
+0

Sfortunatamente stiamo usando DMI in almeno il 40% delle nostre chiamate Ajax ... Ho intenzione di esplorare l'opzione di override però ... – Thihara

+1

Esporre il proprio mappatore di azioni al contenitore struts, i [documenti] (http: //struts.apache.org/release/2.3.x/docs/actionmapper.html#ActionMapper-CustomActionMapper) sul sito Apache ha descritto perfettamente come farlo. –

+0

@Thihara: la creazione personalizzata di "DefaultActionMapper" richiede anche il test, vero? –

2

Se si dispone di un server Web davanti al server delle applicazioni, è possibile limitare l'accesso tramite l'URL. In Apache c'è il modulo mod_rewrite che puoi usare. Impostare la variabile RewriteCond sulla variabile QUERY_STRING su un modello di query e reindirizzare su dev/null.

0

Come per l'altro commento, se si utilizza Apache di fronte a Tomcat, è possibile utilizzare questo frammento di configurazione di Apache per prevenire richieste raggiungere Tomcat:

RewriteEngine On 
RewriteCond %{QUERY_STRING} java.lang.ProcessBuilder 
RewriteRule (.*) - [F]