CVE-2017-5638: RCE via Content-Type in Apache Struts 2, verifica e correzione
Ultimo aggiornamento:
In Apache Struts 2 il parser multipart Jakarta costruisce il messaggio di errore di un upload fallito a partire dall'header Content-Type e lo valuta come OGNL. Un attaccante invia una richiesta con un'espressione OGNL in quell'header ed esegue comandi sul server, senza login.
È stata sfruttata in rete da marzo 2017 e usata in grandi furti di dati. Vecchie applicazioni Struts girano ancora in molte aziende, quindi le scansioni continuano.
In sintesi
- CVE
- CVE-2017-5638
- Software
- Apache Struts 2
- Versioni colpite
- Da 2.3.5 a 2.3.31, da 2.5 a 2.5.10
- Corretta in
- 2.3.32, 2.5.10.1
- Punteggio CVSS
- 9.8 Critica (NVD, CVSS 3.1) ·
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CISA Known Exploited Vulnerabilities
- Sì, aggiunta il 3 novembre 2021
- Pubblicata da NVD
- 11 marzo 2017
- Patch virtuale InfraFence
vp-cve-2017-5638(ModSecurity id 9920007)
Cosa è colpito
Secondo il bollettino S2-045 di Apache: Struts da 2.3.5 a 2.3.31 e da 2.5 a 2.5.10, con il parser multipart Jakarta predefinito. Struts è una libreria dentro le applicazioni web Java (struts2-core-*.jar), non un pacchetto di sistema.
Verificare se un server ce l'ha
Cerca la libreria e le applicazioni che la includono; la versione è nel nome:
sudo nice -n 19 ionice -c3 find / -xdev -type f -name 'struts2-core-*.jar' 2>/dev/nullsudo nice -n 19 ionice -c3 find / -xdev -type f \( -name '*.war' -o -name '*.ear' \) 2>/dev/null \
| while read -r f; do
unzip -l "$f" 2>/dev/null | grep -oE 'struts2-core-[0-9][^/ ]*\.jar' | sed "s|^|$f: |"
doneCorreggere
- Aggiorna Struts almeno a 2.3.32 o 2.5.10.1, le release che l'hanno corretta. Entrambe le linee sono fuori supporto da tempo: pianifica il passaggio a una release di Struts supportata, che chiude anche le vulnerabilità successive.
- Ricompila e ripubblica l'applicazione, poi riavviala.
- Se non puoi aggiornare subito, il bollettino di Apache indica due workaround: un filtro servlet che rifiuta le richieste il cui
Content-Typenon è un semplicemultipart/form-data, oppure il passaggio a un altro parser multipart.
Attenzione: Un'applicazione che ha esposto su internet una versione vulnerabile di Struts potrebbe essere stata compromessa anni fa: cerca account sconosciuti, attività pianificate e web shell.
Come InfraFence la blocca mentre aggiorni
La patch virtuale per CVE-2017-5638 è una regola ModSecurity sull'header Content-Type della richiesta: blocca un header che contiene %{ o ${, l'inizio di un'espressione OGNL. Un Content-Type autentico non contiene mai nessuno dei due.
Nota: Lo stesso bug si raggiunge anche tramite gli header Content-Disposition e Content-Length di un upload (CVE-2017-5638 li comprende; li descrive S2-046 di Apache). La patch controlla solo Content-Type, la forma sfruttata in rete. L'aggiornamento le copre tutte.
Come viene applicata la patch
- L'agente annota quali porte SSH e quali siti rispondono.
- Scrive la regola (id ModSecurity 9920007) tra i propri marcatori nel suo file ModSecurity, esegue
apachectl configteste ricarica Apache in modo graceful. Se il test fallisce, rimette il file precedente. - Controlla che SSH e i siti rispondano ancora e, se non è così, rimuove la patch.
- Controlla che ModSecurity blocchi davvero con la regola, con una richiesta di prova locale innocua. Un ModSecurity in
DetectionOnlysi limita a registrare: la patch viene allora rimossa e segnalata come inefficace, mai come applicata.
Ogni richiesta bloccata dalla patch viene segnalata con CVE-2017-5638 (agente 1.0.37 o successivo): vedi i tentativi nell'attività del server e nella pagina Sfruttamento della dashboard, quindi sai che qualcuno sta provando la vulnerabilità contro di te.
Attenzione: Una patch virtuale blocca la forma nota dell'attacco nelle richieste che passano da Apache su quel server. Non sostituisce l'aggiornamento: installa la versione corretta, poi rimuovi la patch da Attività con Annulla se non ti serve più.
Le patch virtuali richiedono Apache con ModSecurity, l'impostazione Consenti modifiche alla configurazione del web server e nessun pannello di hosting o strumento di configuration management che gestisca il web server; fanno parte del piano Pro e di AutoMode. Le applica una persona a partire dall'analisi AI, oppure AutoMode. Vedi Patch virtuali.
Fonti
I dati di questa pagina vengono da queste fonti; controllale per eventuali aggiornamenti.
Provalo gratis su 1 server
Starter è gratuito per un server, con protezione completa e blocco automatico. Senza carta di credito.
Installa l'agent come root, con il tuo token al posto di <TOKEN>:
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>Il token si crea nella dashboard, in Server › Aggiungi server.
