
PoC of CVE-2025-22510
WordPress-Plugin
Komponentenname WC Price History for Omnibus
Verwundbare Version <= 2.1.4
Komponenten-Slug wc-price-history
Komponenten-Link https://wordpress.org/plugins/wc-price-history/
Schwachstellenklasse A3: Injection
Schwachstellentyp PHP Object Injection
Shop-Manager (Administrator +)
Im WC Price History for Omnibus Plugin Version 2.1.4 und darunter können JSON-Dateien über den Bereich 'Import debug data' im Menü 'Price History' des WooCommerce-Dashboards hochgeladen werden (/wp-admin/admin.php?page=wc-price-history). Die hochgeladene JSON-Datei wird als wc_price_history_import_file-Payload gesendet, und in dem Schlüsselwert 'serialized' der JSON-Daten tritt eine PHP-Object-Injection-Schwachstelle auf. Durch diese Schwachstelle kann ein Angreifer mit Shop-Manager-Rechten PHP-Objekte injizieren.
Obwohl das Plugin selbst keine bekannten POP-Ketten enthält, können Angreifer, falls POP-Ketten in anderen Plugins oder Themes auf der Ziel-Website gefunden werden, beliebige Dateien löschen, sensible Informationen stehlen und Code ausführen.
Bereiten Sie eine WordPress-Seite mit installiertem und aktiviertem WC Price History for Omnibus Plugin Version 2.1.4 oder niedriger vor.
Um dieses Plugin zu aktivieren, muss das WooCommerce-Plugin zuerst installiert und aktiviert sein.
Um die PHP-Object-Injection-Schwachstelle zu testen, fügen Sie folgende Klasse PoC_POP_Chain_Object am Ende der wp-config.php-Datei hinzu.
class PoC_POP_Chain_Object {
public $message = "";
public function __destruct() {
echo "<mark>Success PoP Chain</mark>";
echo "<br>";
echo "<mark>msg: ". $this->message ."</mark>";
}
}

Erstellen Sie als nächstes eine Datei mit den folgenden JSON-Daten.
In diesen JSON-Daten befinden sich die im Schlüssel
serializedeingegebenen Daten im PHP-serialisierten Objektformat, das eine Instanz der zuvor in derwp-config.php-Datei hinzugefügten KlassePoC_POP_Chain_Objecterstellt und dem message-Attribut den String 'Exploit !!' zuweist.
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
Wenn Sie JSON-Daten über den Bereich 'Import debug data' im Menü 'Price History' des WooCommerce-Dashboards (/wp-admin/admin.php?page=wc-price-history) hochladen und auf den Button 'Import' klicken,
wird die Funktion import_file() aus der Klasse Import der Datei /wp-content/plugins/wc-price-history/app/PriorPrice/Import.php ausgeführt. Diese Funktion ruft den Request-Payload wc_price_history_import_file ab, der die JSON-Datei enthält, holt dann die Daten mit dem Schlüssel serialized aus diesen JSON-Daten und führt eine Deserialisierung über die Funktion maybe_unserialize durch.

Daher liegt der Request-Payload wc_price_history_import_file im JSON-Format vor, und während der Deserialisierung der serialisierten Daten mit dem Schlüssel serialized ohne Validierung tritt eine PHP-Object-Injection-Schwachstelle auf.
Navigieren Sie als nächstes zum Menü 'Price History' (/wp-admin/admin.php?page=wc-price-history) im WooCommerce-Dashboard. Wählen Sie im Bereich 'Import debug data' die zuvor erstellte JSON-Datei über das Datei-Upload-Formular aus und klicken Sie auf den Button 'Import', um sie hochzuladen.

Als Ergebnis der Upload-Anfrage sehen Sie in den Antwortdaten, dass die magische Methode __destruct() der in wp-config.php hinzugefügten Klasse PoC_POP_Chain_Object ausgeführt wird, und die folgende Nachricht angezeigt wird.
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
