Publicado el 25/07/2023 12:07:00 en Diosdelared.
Author: MuldeR | Total de votos: 5 Vote
XSS by l0ve:
Gracias a l0ve por reportar un error en el foro, consistía en abusar de un href mal diseñado en el link de "Reload" del foro. El mismo se recoge del parámetro "genero" del method GET o POST y se refleja con un echo "<a href>".
diosdelared.com/?view=cforum&id=1688&genero=%27%20onmouseover=alert(document.cookie)%20ss=%27
El href en cuestión no tenía comillas:
<a href='.$_GET['genero'].'>Reload</a>
Por lo cual al ponerle un espacio se lograba eludir los filtros de seguridad y ejecutar un XSS. La solución mas que sencilla, es seguir con las normas básicas de programación (me duele) y poner comillas en el enlace:
<a href="'.$_GET['genero'].'">Reload</a>
XSS by M20191:
Bueno, gracias a M2 (reto superado x2) por reportarme un XSS en el editor de plantillas del site, resulta que al transladar el sistema de los blogs al site me encontré con un error al pasar por htmlentities el css, como estaba atareado y algo apurado le puse en su momento un decode para salir del paso, lo que lo dejó vulnerable. La solución fue buscar que era lo que rompía el CSS al pasarlo por htmlentities, resultó ser unas comillas dobles que se traducían por & quote;. El fix es tan simple como remplazar las comillas dobles por simples, y por supuesto eliminar el decode:

Excesive cautions:
Al acceder al admin había un mensaje de precaución exajerado, por culpa de una lógica incorrecta en el condicional que detecta ataques CSRF. El fix (que se podría optimizar con un array) lo dejo a continuación:

iDDLR Discord Validation:
Le agregamos un campo bool a la tabla de validaciones para hacer que los tokens sean de un solo uso, así evitamos el "flood" de validaciones que se produce si un usuario actualiza varias veces la url de validación.

Por otro lado, para evitar que al acceder al enlace de otro usuario se le validara su discord con la cuenta de un tercero, creamos un paso intermedio en el endpoint web, que pregunta si desea confirmar la validación para el user dado. Y le agregamos un rand de control para evitar CSRF en el mismo.

Ando medio ocupado y con pocas ganas, pero pronto se vienen updates interesantes! Prometo.