Stored XSS to Domain Takeover
Plataforma de hosting cloud con feature de impersonacion de cuentas (Access Manager). Un Stored XSS en el nombre de las plantillas de email se activa al duplicarlas ("Copy of: PAYLOAD"). El XSS ejecuta en la sesion real de la victima (no impersonada), bypaseando las restricciones de permisos para modificar DNS records y lograr domain takeover.
Aprende a encontrar este bug
Este bug pagó $1,200 en HackerOne.
Crea tu cuenta y practica bugs reales que se pagaron. Descarga el entorno, encuéntralo y aprende la técnica exacta — tu camino a tu primer bounty.
hunters entrenando
labs de reportes reales
completaciones
en bounties practicados
Acceso a todos los labs · sin permanencia · cancela cuando quieras
Hunters que lo han resuelto· 7
Objetivos
Logro que recibirás
Cuando resuelvas este lab desbloqueas este logro compartible
Stored XSS to Domain Takeover
Writeups de la comunidad
La aplicacion
NexusHost es una plataforma de hosting cloud donde los usuarios gestionan servidores, dominios con DNS, y plantillas de email. La app incluye:
- Gestion de Servidores — Ver servidores con specs, estado, region y coste
- Gestion de Dominios — Dominios con registros DNS editables (A/CNAME), SSL, auto-renovacion
- Plantillas de Email — Crear, editar, duplicar y eliminar plantillas de correo
- Access Manager — Invitar a otros usuarios a impersonar tu cuenta con permisos limitados
- Panel Admin — Estadisticas de la plataforma, gestion de usuarios, log de actividad
La vulnerabilidad
La pagina de plantillas renderiza los nombres con dangerouslySetInnerHTML (para soportar "nombres ricos"). Al duplicar una plantilla, el nombre se genera como Copy of: ${original.name} sin sanitizar.
Si el nombre original contiene HTML/JavaScript, al duplicar se crea una plantilla con XSS persistente que se ejecuta cada vez que alguien ve la lista de plantillas.
La restriccion de permisos
Los usuarios que impersonan una cuenta tienen permisos limitados:
- Pueden ver servidores, dominios, y gestionar plantillas
- NO pueden modificar DNS — el endpoint devuelve 403 "DNS modifications not permitted in impersonation mode"
El bypass via XSS
El XSS se ejecuta en el contexto del navegador de la victima (sarah_wilson), que revisa sus plantillas cada 15 segundos. Como la victima NO esta impersonando (es su propia sesion), el XSS puede hacer fetch PUT /api/domains/:id/dns con exito, cambiando el destino DNS del dominio.
El health check de DNS
Cada 10 segundos, el servidor verifica los dominios enviando un POST con la flag al dns_target configurado. Cuando el atacante cambia el DNS a su propio servidor, recibe la flag.
Cadena de ataque completa
1. Registrarse como atacante
2. Access Manager → Solicitar acceso a sarah_wilson → Auto-aceptado
3. Impersonar sarah_wilson
4. Intentar cambiar DNS directamente → 403 (bloqueado)
5. Crear plantilla con XSS en el nombre
6. Duplicar plantilla → "Copy of: <img src=x onerror=fetch(...)>"
7. Dejar de impersonar → Bot renderiza plantillas cada 15s
8. XSS ejecuta en sesion de sarah → cambia DNS a host.docker.internal:9999
9. Montar servidor HTTP en puerto 9999
10. DNS health check (10s) → POST /health-check con flag
Payload XSS de ejemplo
SCREEEETTTTT
Recibir la flag
# Opcion 1: Python
python3 -m http.server 9999
# Opcion 2: Netcat
nc -lp 9999
# Recibiras un POST a /health-check con body:
Solucion interactiva
Accede a /writeup dentro de la aplicacion para una guia paso a paso con botones que ejecutan cada peticion automaticamente.
Remediacion
- Sanitizar todo input antes de renderizar — usar textContent en vez de innerHTML
- Nunca usar dangerouslySetInnerHTML con datos de usuario sin sanitizar
- Implementar Content Security Policy que bloquee scripts inline
- Requerir re-autenticacion para cambios criticos como DNS
- Auditar y alertar sobre modificaciones de DNS en tiempo real