
Iniezione di oggetti PHP in Profile Builder < 4.0.1
Ricercatore: Vivien Lebas
Plugin interessato: Profile Builder (WordPress)
Versioni interessate: < 4.0.1
Corretto in: 4.0.1
Tipo: PHP Object Injection (Deserializzazione non sicura)
CWE: CWE-502
OWASP: A8 – Deserializzazione non sicura
CVSS 3.1: 6.6 (Medio) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan: Avviso verificato
L'add-on Import/Export di Profile Builder non convalida il tipo di dati deserializzati durante l'importazione di un file di configurazione. Un utente con privilegi elevati (amministratore) può quindi attivare una PHP Object Injection importando un file JSON appositamente predisposto.
L'add-on è un'estensione gratuita, disabilitata per impostazione predefinita, e Profile Builder stesso non include alcuna catena POP (Property-Oriented Programming) utilizzabile. Per ottenere un impatto concreto è quindi necessario un gadget adeguato fornito da un altro plugin o tema installato.
La vulnerabilità risiede nella funzionalità di importazione:
/wp-admin/admin.php?page=pbie-import-export&tab=import
Un valore all'interno del file importato viene passato a maybe_unserialize() di
WordPress senza alcun controllo del tipo. Se il valore è una stringa di oggetto
serializzato, PHP istanzia la classe indicata ed esegue i suoi metodi magici
(__wakeup, __destruct) durante la richiesta di importazione.
manage_options). Su multisite, l'importazione è
vincolata a manage_network, quindi è richiesto un Network/Super Administrator;
un Amministratore di sottosito viene rifiutato.Evil come segnaposto per
qualunque classe di questo tipo fornita da un plugin o tema installato. https://victim.example/wp-admin/admin.php?page=pbie-import-export&tab=import
payload.json: {
"options": {},
"posts": {
"wppb-rf-cpt": [
{
"post_title": "POC",
"post_name": "poc",
"post_type": "post",
"post_status": "publish",
"postmeta": {
"poc": ["O:4:\"Evil\":0:{}"]
}
}
]
}
}
payload.json nel campo JSON File e premere Import.La stringa all'interno del valore postmeta viene passata a maybe_unserialize(),
quindi la classe indicata viene istanziata e i suoi metodi magici vengono eseguiti
durante la richiesta di importazione.
wppb-ul-cpt, wppb-rf-cpt o wppb-epf-cpt,
ma il tipo di post effettivamente creato è ricavato dal campo post_type di ogni
singolo post, quindi il percorso è raggiungibile senza licenza Pro.PHP Object Injection. Con una catena di gadget adeguata proveniente da un altro plugin o tema installato, ciò può portare ad azioni quali operazioni sui file o, a seconda dei gadget disponibili, all'esecuzione di codice remoto.
Aggiornare Profile Builder alla versione 4.0.1 o successiva.
Questa vulnerabilità è stata divulgata in modo responsabile al fornitore ed è pubblicata dopo la disponibilità di una correzione, per scopi educativi e difensivi.