
PoC of CVE-2025-22510
Plugin WordPress
Nome do componente WC Price History for Omnibus
Versão vulnerável <= 2.1.4
Component slug wc-price-history
Component link https://wordpress.org/plugins/wc-price-history/
Classe de vulnerabilidade A3: Injeção
Tipo de vulnerabilidade Injeção de Objeto PHP
Shop manger(Administrador +)
No plugin WC Price History for Omnibus versão 2.1.4 e anteriores, arquivos JSON podem ser carregados através da seção 'Import debug data' no menu 'Price History' do painel WooCommerce (/wp-admin/admin.php?page=wc-price-history). O arquivo JSON carregado é enviado como um payload wc_price_history_import_file, e uma vulnerabilidade de Injeção de Objeto PHP ocorre no valor da chave 'serialized' dos dados JSON. Através dessa vulnerabilidade, um atacante com privilégios de Shop Manager pode injetar objetos PHP. Embora o plugin em si não tenha cadeias POP conhecidas, se cadeias POP forem descobertas em outros plugins ou temas no site WordPress alvo, os atacantes podem realizar exclusão arbitrária de arquivos, roubo de informações sensíveis e execução de código.
Prepare um site WordPress com o plugin WC Price History for Omnibus versão 2.1.4 ou inferior instalado e ativado.
Para ativar este plugin, o plugin WooCommerce deve primeiro estar instalado e ativado.
Para testar a vulnerabilidade de Injeção de Objeto PHP, adicione a seguinte classe PoC_POP_Chain_Object ao final do arquivo wp-config.php.
class PoC_POP_Chain_Object {
public $message = "";
public function __destruct() {
echo "<mark>Success PoP Chain</mark>";
echo "<br>";
echo "<mark>msg: ". $this->message ."</mark>";
}
}

Em seguida, crie um arquivo com os seguintes dados JSON.
Nesses dados JSON, os dados inseridos na chave
serializedestão no formato de objeto serializado PHP, que cria uma instância da classePoC_POP_Chain_Objectpreviamente adicionada ao arquivowp-config.phpe atribui a string 'Exploit !!' à propriedade message.
{
"serialized": "O:20:\"PoC_POP_Chain_Object\":1:{s:7:\"message\";s:10:\"Exploit !!\";}"
}
Quando você faz upload de dados JSON através da seção 'Import debug data' no menu 'Price History' do painel WooCommerce (/wp-admin/admin.php?page=wc-price-history) e clica no botão 'Import', a função import_file() definida na classe Import do arquivo /wp-content/plugins/wc-price-history/app/PriorPrice/Import.php é executada. Essa função recupera o payload da requisição wc_price_history_import_file contendo o arquivo JSON, em seguida recupera os dados com a chave serialized desses dados JSON e realiza a desserialização através da função maybe_unserialize.

Portanto, o payload da requisição wc_price_history_import_file está em formato JSON, e uma vulnerabilidade de Injeção de Objeto PHP ocorre durante o processo de desserialização dos dados serializados com a chave serialized sem validação.
Em seguida, navegue até o menu 'Price History' (/wp-admin/admin.php?page=wc-price-history) no painel WooCommerce. Na seção 'Import debug data', selecione o arquivo JSON criado anteriormente através do formulário de upload de arquivo e clique no botão 'Import' para fazer o upload.

Como resultado da solicitação de upload, nos dados de resposta, você pode ver que o método mágico __destruct() da classe PoC_POP_Chain_Object adicionada ao wp-config.php é executado, exibindo a seguinte mensagem.
<mark>Success PoP Chain</mark>
<br>
<mark>msg: Exploit !!</mark>
