
Injeção de Objeto PHP no Profile Builder < 4.0.1
Pesquisador: Vivien Lebas
Plugin afetado: Profile Builder (WordPress)
Versões afetadas: < 4.0.1
Corrigido em: 4.0.1
Tipo: Injeção de Objeto PHP (Desserialização Insegura)
CWE: CWE-502
OWASP: A8 – Desserialização Insegura
CVSS 3.1: 6.6 (Médio) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan: Aviso verificado
O complemento Import/Export do Profile Builder não valida o tipo de dados que está sendo desserializado ao importar um arquivo de configuração. Um usuário com privilégios elevados (administrador) pode, portanto, acionar a Injeção de Objeto PHP importando um arquivo JSON manipulado.
O complemento é uma extensão gratuita, desativada por padrão, e o próprio Profile Builder não inclui nenhuma cadeia POP (Property-Oriented Programming) utilizável. Portanto, alcançar um impacto concreto exige um gadget adequado de outro plugin ou tema instalado.
A vulnerabilidade está no recurso de importação:
/wp-admin/admin.php?page=pbie-import-export&tab=import
Um valor dentro do arquivo importado é passado para o maybe_unserialize() do WordPress
sem qualquer verificação de tipo. Se o valor for uma string de objeto serializado, o PHP
instancia a classe nomeada e executa seus métodos mágicos (__wakeup,
__destruct) durante a requisição de importação.
manage_options). Em multisite, a importação é
condicionada a manage_network, portanto, é necessário um Administrador de Rede/Super Administrador; um
Administrador de subsite é recusado.Evil como substituto para qualquer classe desse tipo que um
plugin ou tema instalado forneça. 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 no campo JSON File e pressione Import.A string dentro do valor postmeta é passada para maybe_unserialize(), então
a classe nomeada é instanciada e seus métodos mágicos são executados durante a requisição
de importação.
wppb-ul-cpt, wppb-rf-cpt ou wppb-epf-cpt,
mas o tipo de post realmente criado é obtido do campo post_type de cada post,
então o caminho é alcançável sem uma licença Pro.Injeção de Objeto PHP. Com uma cadeia de gadgets adequada de outro plugin ou tema instalado, isso pode levar a ações como operações de arquivo ou, dependendo dos gadgets disponíveis, execução remota de código.
Atualize o Profile Builder para 4.0.1 ou posterior.
Esta vulnerabilidade foi divulgada de forma responsável ao fornecedor e é publicada após a disponibilização de uma correção, para fins educacionais e defensivos.