
Inyección de objetos PHP en Profile Builder < 4.0.1
Investigador: Vivien Lebas
Plugin afectado: Profile Builder (WordPress)
Versiones afectadas: < 4.0.1
Corregido en: 4.0.1
Tipo: Inyección de objetos PHP (deserialización insegura)
CWE: CWE-502
OWASP: A8 – Deserialización insegura
CVSS 3.1: 6.6 (Medio) — AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
WPScan: Aviso verificado
El complemento Import/Export de Profile Builder no valida el tipo de datos que se deserializan al importar un archivo de configuración. Por lo tanto, un usuario con privilegios elevados (administrador) puede desencadenar una inyección de objetos PHP importando un archivo JSON manipulado.
El complemento es una extensión gratuita, deshabilitada por defecto, y Profile Builder en sí mismo no incluye ninguna cadena POP (Property-Oriented Programming) utilizable. Por lo tanto, alcanzar un impacto concreto requiere un gadget adecuado de otro plugin o tema instalado.
La vulnerabilidad está en la función de importación:
/wp-admin/admin.php?page=pbie-import-export&tab=import
Un valor dentro del archivo importado se pasa a maybe_unserialize() de WordPress
sin ninguna comprobación de tipo. Si el valor es una cadena de objeto serializado,
PHP instancia la clase nombrada y ejecuta sus métodos mágicos (__wakeup,
__destruct) durante la solicitud de importación.
manage_options). En multisitio, la importación
está restringida a manage_network, por lo que se requiere un Network/Super Administrator;
un Administrador de subsitio es rechazado.Evil como sustituto de cualquier clase de este tipo que
proporcione un plugin o tema instalado. 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 en el campo JSON File y pulse Import.La cadena dentro del valor postmeta se pasa a maybe_unserialize(), por lo que
la clase nombrada se instancia y sus métodos mágicos se ejecutan durante la solicitud
de importación.
wppb-ul-cpt, wppb-rf-cpt o wppb-epf-cpt,
pero el tipo de entrada realmente creado se toma del campo post_type de cada entrada,
por lo que la ruta es accesible sin una licencia Pro.Inyección de objetos PHP. Con una cadena de gadgets adecuada de otro plugin o tema instalado, esto puede dar lugar a acciones como operaciones con archivos o, dependiendo de los gadgets disponibles, ejecución remota de código.
Actualice Profile Builder a 4.0.1 o posterior.
Esta vulnerabilidad fue divulgada de forma responsable al proveedor y se publica después de que se haya puesto a disposición una corrección, con fines educativos y defensivos.