
Technical write-up e proof-of-concept per CVE-2023-46474, una vulnerabilità di esecuzione remota di codice in PMB <=7.5.3 tramite upload di file senza restrizioni, inclusi passaggi di riproduzione e indicazioni di rimedio.
CVE-2023-46474
| Vettore CVSS v3.1 | Punteggio CVSS v3.1 |
|---|---|
| AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H | 9.1 |
Scoperta nell'ambito di un test di penetrazione da Marcus Reynaud di Devensys Cybersecurity
Lo script pmb/admin/convert/start_import.php è vulnerabile a una falla di tipo , che consente di ottenere l'esecuzione di codice arbitrario sul server.

L'attaccante deve prima ottenere l'accesso amministrativo alla piattaforma per utilizzare questa funzionalità.
Lo script PHP non verifica l'estensione del file caricato dall'utente e lo memorizza in una directory accessibile dal server web mantenendone l'estensione. Pertanto, è possibile caricare uno script PHP e poi eseguirlo visitando il punto in cui è stato caricato.
È possibile riprodurre questo comportamento nel modo seguente:
Si invia un file in .php che contiene il codice che si desidera eseguire sul sistema. Qui eseguiremo il comando di sistema id.

Osservando la risposta, possiamo recuperare il nome del file così come viene scritto sul server.

Per eseguire il nostro codice, basta visitare /pmb/temp/[nome_del_file].php con un browser.

Il risultato del comando viene restituito dal server.
La causa di questa vulnerabilità è la mancanza di controllo sul file prima di scriverlo su disco:

Per rimediare a questa vulnerabilità, è necessario implementare un controllo delle estensioni sui file caricati dagli utenti.
Vi consigliamo di utilizzare un sistema di whitelist, che autorizzi solo determinate estensioni di file.
Potete anche scrivere il file su disco omettendo l'estensione (considerando che si tratta di un archivio temporaneo).
È inoltre possibile scrivere il file in una directory al di fuori dell'ambito del server web, rendendo il file inaccessibile su Internet e impedendo l'esecuzione del codice.
Le versioni 7.5.4 e successive non sono vulnerabili; lo script è stato completamente riscritto.