Vulnerabilidad crítica en plugin de WordPress. 

Inicio / Seguridad / Vulnerabilidad crítica en plugin de WordPress. 

En diciembre de 2024, se identificó una vulnerabilidad crítica en el plugin Hunk Companion para WordPress, afectando a versiones anteriores a la 1.9.0. Esta falla permitía a atacantes no autenticados instalar y activar plugins directamente desde el repositorio de WordPress.org mediante solicitudes POST no autorizadas. El problema radicaba en una verificación inadecuada de permisos en un custom endpoint dentro del plugin.

Modo de explotación.

La forma en que los atacantes aprovechaban esta vulnerabilidad era accediendo al endpoint en cuestión para instalar el plugin WP Query Console el cual permitía insertar código php malicioso por medio de otra vulnerabilidad en el mismo.

Cabe señalar que WP Query Console fue desactivado en el directorio de plugins de WordPress.org y ya no es posible descargarlo ni instalarlo.

Evolución de la vulnerabilidad

Wordfence ya había reportado esta falla en octubre de 2024 en la versión 1.8.4 y anteriores. El problema era que, al registrar los nuevos endpoints con la función register_rest_route, el parámetro pemission_callback hace referencia a la función __return_true(). Esta aproximación deja al endpoint totalmente vulnerable ya que no hay ninguna restricción de acceso al mismo. (Ver código en GitHub)

En versiones posteriores, los autores del plugin intentaron corregir el error sin éxito debido a una implementación incorrecta de la función de callback en el parámetro permission_callback. Si bien la función de permiso ya no era __return_true, esta vez la función retornaba una instancia de la clas WP_REST_Response cuando se hacían verificaciones de usuario logueado, si el usuario podía instalar plugins o de nonce incorrecto. (Ver código en GitHub)

El problema con la nueva función de permiso era que, según la documentación de WordPress, esta debe retornar un valor booleano o una instancia de WP_Error; cualquier otro valor será interpretado como true. Por ende, el endpoint quedó vulnerable de nuevo.

WpScan también reportó la vulnerabilidad, la cual finalmente fue corregida en la versión 1.9.0. 

Pruebas locales para probar la vulnerabilidad.

Para probar esta vulnerabilidad en un entorno local, podemos usar el siguiente payload, con el cual se instalará el plugin Hello Dolly desde CURL.

curl -X POST -H “Content-Type: application/json” –data ‘{“params” : {“templateType” : “paid”, “tmplFreePro” : “plugin”, “plugin” : {“hello-dolly.1.6” : “/hello-dolly/hello.php”}, “allPlugins” : [{“hello-dolly.1.6” : “/hello-dolly/hello.php”}]}}’ http://test.local/wp-json/hc/v1/themehunk-import

Conclusión

Es de suma importancia revisar y probar exhaustivamente la seguridad en los endpoints registrados en plugins y temas de WordPress para evitar este tipo de vulnerabilidades que pueden resultar en graves consecuencias para los sitios web en los que se instalan estas soluciones.