
CVE-2023-3460


Subscriber y si echamos un vistazo a la tabla wp_usermeta en MySQL podemos ver que el valor de wp_capabilities se establece como un array serializado y desde ahí se define nuestro rol, que en este caso es Subscriber.
wp_capabilities? Bueno, podemos pasar wp_capabilities como parámetro en la petición POST mientras nos registramos, así:
is_metakey_banned que funciona comprobando algunos valores como "cap_key", "wp_capabilities", "wp_user_level", "user_activation_key", etc. El que nos interesa es wp_capabilities, pero si lo incluimos en el cuerpo de nuestra petición llegará al para impedirnos cambiar nuestro rol.
à, è, ì, ò, ù, À, È, Ì, Ò, Ù, así que si usamos estos caracteres en el cuerpo de nuestra petición, algo como wp_càpabilities=administrator, ¿qué pasará? Pues que no llega al punto de ruptura en la línea 182 de class-user.php y podemos omitir la función is_metakey_banned.


a:1:{s:13:"administrator";b:1;}; bien, ahora intentémoslo y pasemos esto directamente a nuestro parámetro.
wp_capabilities, pero esto no es lo que esperábamos.
wp_capabilities del administrador podemos ver que es un array serializado; eso es lo que queremos. WordPress tiene su propia serialización, así que podemos usarla para pasar nuestro valor como un array y WordPress hace el resto por nosotros. Así es como se ve nuestro payload: wp_càpabilities[administrator]=1.
wp_capabilities ha cambiado a a:1:{s:13:"administrator";s:1:"1";}, con lo que ahora podemos iniciar sesión como administrador.

Super AdminAdministratorEditorAuthorContributorContributorPagesbreak