
Injection d'objet PHP dans Profile Builder < 4.0.1
Chercheur : Vivien Lebas
Extension affectée : Profile Builder (WordPress)
Versions affectées : < 4.0.1
Corrigé dans : 4.0.1
Type : Injection d'objet PHP (désérialisation non sécurisée)
CWE : CWE-502
OWASP : A8 – Désérialisation non sécurisée
CVSS 3.1 : 6.6 (Moyen) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan : Avis vérifié
L'add-on Import/Export de Profile Builder ne valide pas le type de données désérialisées lors de l'importation d'un fichier de configuration. Un utilisateur disposant de privilèges élevés (administrateur) peut donc déclencher une injection d'objet PHP en important un fichier JSON spécialement conçu.
L'add-on est une extension gratuite, désactivée par défaut, et Profile Builder lui-même ne fournit aucune chaîne POP (Property-Oriented Programming) exploitable. Atteindre un impact concret nécessite donc un gadget approprié provenant d'une autre extension ou d'un autre thème installé.
La vulnérabilité se situe dans la fonctionnalité d'importation :
/wp-admin/admin.php?page=pbie-import-export&tab=import
Une valeur contenue dans le fichier importé est transmise à la fonction
maybe_unserialize() de WordPress sans aucune vérification de type. Si la valeur
est une chaîne représentant un objet sérialisé, PHP instancie la classe nommée et
exécute ses méthodes magiques (__wakeup, __destruct) pendant la requête
d'importation.
manage_options). Sur un multisite, l'importation
est conditionnée par manage_network, un administrateur réseau/super
administrateur est donc requis ; un administrateur de sous-site est refusé.Evil comme substitut
de la classe que pourrait fournir une extension ou un thème installé. 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 dans le champ JSON File et cliquez sur Import.La chaîne contenue dans la valeur postmeta est transmise à maybe_unserialize(),
la classe nommée est donc instanciée et ses méthodes magiques sont exécutées
pendant la requête d'importation.
wppb-ul-cpt, wppb-rf-cpt ou
wppb-epf-cpt, mais le type de publication réellement créé provient du champ
post_type de chaque publication, le chemin est donc accessible sans licence
Pro.Injection d'objet PHP. Avec une chaîne de gadgets appropriée provenant d'une autre extension ou d'un autre thème installé, cela peut conduire à des actions telles que des opérations sur des fichiers ou, selon les gadgets disponibles, à une exécution de code à distance.
Mettez à jour Profile Builder vers la version 4.0.1 ou ultérieure.
Cette vulnérabilité a été divulguée de manière responsable au fournisseur et est publiée après la mise à disposition d'un correctif, à des fins éducatives et défensives.