
PHP-Object-Injection in Profile Builder < 4.0.1
Forscher: Vivien Lebas
Betroffenes Plugin: Profile Builder (WordPress)
Betroffene Versionen: < 4.0.1
Behoben in: 4.0.1
Typ: PHP-Object-Injection (unsichere Deserialisierung)
CWE: CWE-502
OWASP: A8 – Insecure Deserialization
CVSS 3.1: 6.6 (Mittel) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan: Verifizierte Sicherheitsmeldung
Das Import/Export-Add-on von Profile Builder validiert beim Importieren einer Konfigurationsdatei nicht den Typ der deserialisierten Daten. Ein Benutzer mit hohen Privilegien (Administrator) kann daher eine PHP-Object-Injection auslösen, indem er eine manipulierte JSON-Datei importiert.
Das Add-on ist eine kostenlose Erweiterung, die standardmäßig deaktiviert ist, und Profile Builder selbst enthält keine nutzbare POP-Kette (Property-Oriented Programming). Um eine konkrete Auswirkung zu erzielen, ist daher ein geeignetes Gadget aus einem anderen installierten Plugin oder Theme erforderlich.
Die Schwachstelle befindet sich in der Import-Funktion:
/wp-admin/admin.php?page=pbie-import-export&tab=import
Ein Wert innerhalb der importierten Datei wird ohne jegliche Typüberprüfung an
WordPress' maybe_unserialize() übergeben. Handelt es sich bei dem Wert um einen
serialisierten Objekt-String, instanziiert PHP die benannte Klasse und führt
deren magische Methoden (__wakeup, __destruct) während der Import-Anfrage aus.
manage_options). Bei Multisite ist der Import an
manage_network gebunden, sodass ein Netzwerk-/Super-Administrator erforderlich
ist; ein Administrator einer Subsite wird abgelehnt.Evil als
Platzhalter für eine solche Klasse, die ein installiertes Plugin oder Theme
bereitstellt. 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 im Feld JSON File und klicken Sie auf Import.Der String innerhalb des postmeta-Werts wird an maybe_unserialize() übergeben,
sodass die benannte Klasse instanziiert und ihre magischen Methoden während der
Import-Anfrage ausgeführt werden.
wppb-ul-cpt, wppb-rf-cpt oder
wppb-epf-cpt sein, aber der tatsächlich erstellte Post-Typ wird aus dem
post_type-Feld des jeweiligen Posts übernommen, sodass der Pfad ohne
Pro-Lizenz erreichbar ist.PHP-Object-Injection. Mit einer geeigneten Gadget-Kette aus einem anderen installierten Plugin oder Theme kann dies zu Aktionen wie Dateioperationen oder, je nach verfügbaren Gadgets, zur Ausführung von Remote-Code führen.
Aktualisieren Sie Profile Builder auf 4.0.1 oder höher.
Diese Schwachstelle wurde verantwortungsvoll an den Hersteller gemeldet und wird nach Bereitstellung eines Fixes zu Bildungs- und Verteidigungszwecken veröffentlicht.