
I parametri amministrativi sensibili non vengono sufficientemente sanitizzati, consentendo a un attaccante di alterare i percorsi verso i binari di sistema.
L'attaccante può quindi caricare file CSV pericolosi che possono essere trattati come archivi PHAR contenenti metacaratteri di shell che verranno valutati dalla chiamata exec() di PHP, con conseguente esecuzione di codice remota.
Critico - 9.1 - CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Nel file functions/classes/class.Scan.php, possiamo vedere la seguente struttura di codice:

Il primo parametro della chiamata exec() dipende direttamente dal parametro $ping_path, che può essere liberamente modificato dal pannello Impostazioni di amministrazione:

L'unica condizione che l'attaccante deve soddisfare è fare in modo che la funzione ping_verify_path non restituisca false. La definizione di questo metodo è la seguente:

Questo metodo si basa esclusivamente sulla funzione nativa PHP file_exists(). Questa particolare funzione può supportare il passaggio di file ZIP (l'estensione .zip non è necessaria) e approfondire la struttura dell'archivio ZIP. Per esempio:

Pertanto, se un attaccante può caricare un archivio ZIP/PHAR valido sul server, contenente un file con un nome che include metacaratteri di shell, aggirerà il controllo di file_exists() e quei metacaratteri verranno valutati dalla chiamata exec().
Un attaccante autenticato può caricare file tramite la funzionalità "Importazione subnet XLS / CSV":

Detto file non deve essere necessariamente un file CSV valido. Se l'importazione fallisce, il file non verrà eliminato dal server. Sappiamo anche dove verrà archiviato dallo script import-verify.php:

L'attaccante ha tutti i prerequisiti per eseguire un attacco di Remote Code Execution:
L'archivio dannoso può essere creato in questo modo:

https://www.youtube.com/watch?v=oMvyfFrlRAs