
Rileva e correggi Apache Commons Text vulnerabile negli artefatti JAR/WAR Java; identifica le classi e scansiona il bytecode per i siti di chiamata relativi a CVE-2022-42889 (Text4Shell).
Clicca per trovare:
CVE-2022-42889 può rappresentare una seria minaccia per un'ampia gamma di applicazioni basate su Java. Le domande importanti che uno sviluppatore potrebbe porsi in questo contesto sono:
commons-text? Quali versioni?Il codice rilasciato include commons-text? Quale versione della libreria è inclusa? Rispondere a queste domande potrebbe non essere immediato a causa di due fattori:
Dipendenze transitive: anche se commons-text potrebbe non essere nell'elenco delle dipendenze dirette del progetto, potrebbe essere usato indirettamente da qualche altra dipendenza.
Il codice di questa libreria potrebbe non apparire direttamente come file separato, ma essere raggruppato in qualche altro file jar di codice.
JFrog rilascia uno strumento per aiutare a risolvere questo problema: scan_commons_text_versions. Lo strumento cerca il codice della classe di StringLookupFactory (indipendentemente dai nomi dei file .jar e dal contenuto dei file pom.xml), e tenta di identificare tramite impronta digitale le versioni degli oggetti per segnalare se la versione inclusa di commons-text è vulnerabile.
commons-text?La domanda è rilevante nei casi in cui lo sviluppatore voglia verificare se le chiamate a commons-text nel codebase possano passare dati potenzialmente controllati da un attaccante. Sebbene il modo più sicuro per correggere la vulnerabilità, come discusso negli advisory, sia applicare le patch appropriate, controllare e verificare il potenziale impatto nell'ipotesi di un commons-text non patchato può essere prezioso in molte situazioni.
scan_commons_text_calls_jar.py, che individua le chiamate alle funzioni vulnerabili nei file .jar compilati, e riporta i risultati come nome della classe e nome del metodo in cui appare ciascuna chiamata.
commons-text nel mio sistema, come posso disabilitare rapidamente il comportamento pericoloso?L'aggiornamento rimane la soluzione migliore - questa soluzione è pensata per una patch immediata (hot patching)
Nel contesto della vulnerabilità CVE-2022-42889, la classe org/apache/commons/text/lookup/ScriptStringLookup in commons-text consente l'esecuzione di script che possono essere incorporati in una stringa ricevuta da una fonte controllata dall'attaccante tramite ${script}. Pertanto, le invocazioni della funzione ScriptStringLookup.lookup sono indicative dell'attivazione della funzionalità.
Forniamo uno strumento, Text4ShellPatch, che consente di applicare una patch a questa specifica chiamata in modo che la funzionalità di esecuzione degli script non possa essere utilizzata. Dopo aver applicato la patch, la libreria eseguirà sempre uno script che restituisce un messaggio di avviso (invece del codice potenzialmente controllato dall'attaccante)
Allo stesso modo, la ricerca DNS e URL può caricare contenuti non attendibili se controllata da un attaccante tramite ${dns} e ${url}; pertanto, le rispettive funzioni di ricerca DnsStringLookup e UrlStringLookup possono essere disabilitate tramite patch per restituire un messaggio di avviso,
La patch può essere applicata a un file jar specifico, solo per la ricerca script oppure script, dns e url per una protezione migliore nel caso in cui non sia previsto l'uso nell'applicazione,
Viene generato un backup nella stessa posizione del jar originale prima che venga sostituito con quello patchato. Il nome del file di backup segue il seguente schema: <nome_jar_originale>_YYYY.MM.DD_HH.mm.ss.orig.jar dove YYYY, MM, DD sono rispettivamente l'anno, il mese e il giorno, e HH, mm, ss sono rispettivamente l'ora, i minuti e i secondi.
È anche possibile individuare le versioni vulnerabili di commons-text e applicare loro una patch automaticamente, come risponde alla prossima domanda.
commons-text?Due dei nostri strumenti insieme offrono la possibilità di scansionare e applicare patch ai file jar vulnerabili di commons-text.
Nella repository Github è presente uno script bash di esempio con il nome scan_and_patch.sh. In pratica, utilizza lo script scan_commons_text_versions.py per trovare, all'interno di una specifica root-folder, i file jar vulnerabili di commons-text con una versione vulnerabile ed esegue su di essi lo strumento Text4ShellPatch come segue.

scan_commons_text_versions.pypython scan_commons_text_versions.py root-folder [-quiet] [-exclude folder1 folder2 ..]
Lo strumento esegue la scansione ricorsiva di root_folder alla ricerca di file .jar e .war; in ogni file individuato, lo strumento cerca una StringLookupFactory.class (ricorsivamente in ogni file .jar). Se viene trovata almeno una delle classi, lo strumento tenta di identificarne tramite impronta digitale la versione (incluse alcune variazioni trovate nelle patch e nelle backport patch) per segnalare se il codice è vulnerabile.
Con il flag -quiet, vengono stampate solo le conclusioni sulla versione, mentre gli altri messaggi (file non trovati/ archivi che non si aprono/ archivi protetti da password) vengono silenziati.
Le cartelle che compaiono dopo -exclude (opzionale) vengono saltate.
scan_commons_text_calls_jar.pyLo strumento richiede Python 3 e le seguenti librerie di terze parti: jawa, tqdm, easyargs, colorama
pip install -r requirements.txt
Il caso d'uso predefinito:
python scan_commons_text_calls_jar.py root-folder
esegue la scansione ricorsiva di tutti i file .jar in root-folder, stampando per ciascuno le posizioni (nome della classe e nome del metodo) delle chiamate ai metodi lookup/replace/replaceIn di StringSubstitutor/StringLookup.
Lo strumento può essere configurato per ulteriori casi d'uso tramite i seguenti flag da riga di comando.