
Esta es una recurrencia de cve-2019-9787 en Wordpress y una defensa basada en hash.
Este es un proyecto de Sijia Zhang(https://github.com/sijiahi) y Bowen Zhou(https://github.com/KonjakZhou)
- Configure e instale Wordpress5.0 en http://localhost/wp-admin/;
- Inicie sesión en Wordpress como administrador, publique al menos un artículo;
- abra mal.html(configurado bajo otro nombre de dominio, posiblemente ábralo directamente como archivo en el navegador), haga clic en enviar solicitud.
- Si esto funciona, será redirigido a la página del artículo con un comentario "cilick me"; cuando mueva el mouse sobre él, aparecerá una ventana emergente indicando que el ataque fue exitoso.
-Reemplace los archivos en /wp-includes, agregue scripts js en /wp-includes/js.
-Mueva el archivo de publicación simulada a la región de WP, abra la página de la publicación simulada para probar la función PINGBACK/TRACEBACK.
-Si esto funciona, será redirigido a la página del artículo con un comentario "legal anchor";
-Abra mal.com desde otro nombre de dominio, pruebe el ataque CSRF.
Para defender Wordpress contra CVE-2019-9787, se introduce un nuevo campo llamado doggyNonce. En los casos en que el administrador intenta usar la función PINGBACK y no se puede proporcionar _wp_unfiltered_html, le pedimos al administrador que firme con su cookie los atributos de las etiquetas que sube; esto nos permitirá defender el ataque CSRF y garantizar la integridad de los atributos de las etiquetas subidas.
Wordpress acepta automáticamente comentarios sin token CSRF correcto como solicitudes PINFBACK y TRACEBACK, filtra ese comentario con un filtro de lista blanca, extrae el campo href y reconstruye "a tag". Para defender esta vulnerabilidad, se tienen en cuenta dos puntos clave: 1. El servidor no puede distinguir una solicitud CSRF ilegal de una solicitud PINGBACK/TRACEBACK legítima. 2. El atacante CSRF inyecta su código en el campo href de "a Tag"; el atributo de la etiqueta cambia después de ser filtrado. doggyNonce es un valor hash que depende de *cookie(wp-setting-time-$uid) y del *uploaded href attrbute: doggyNonce=Hash(*uploaded href attrbute,*cookie) cabe señalar que doggyNonce desempeña el papel de la firma del administrador sobre el atributo href subido.
1. 'mal.html' está para simular el ataque CSRF y, por lo tanto, se espera que se coloque en un dominio distinto al de Wordpress;
2. 'post.html' está para simular la función PINGBACK/TRACEBACK y, por lo tanto, se espera que se coloque en el mismo dominio que WP;