Stored XSS via SVG File Upload
Red social donde se pueden subir archivos SVG como avatares. Los SVGs se renderizan con etiquetas <object> que permiten la ejecucion de JavaScript embebido.
$750
Es lo que una empresa pagó por este fallo en HackerOne. Aquí lo tienes reconstruido para que lo encuentres tú.
Aprende a encontrar este bug
Este bug pagó $750 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 hackeos reales
completaciones
pagados por estos bugs
Acceso a todos los labs · sin permanencia · cancela cuando quieras
Hackers que lo han resuelto· 8
Objetivos
Logro que recibirás
Cuando resuelvas este lab desbloqueas este logro compartible

Writeups de la comunidad
La checklist que repaso en cada objetivo nuevo
47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.
Te das de baja en un clic, desde cualquier correo.
Despliegue
# Opcion 1: autodeploy
./autodeploy.sh
# Opcion 2: manual
docker compose up --build
# Acceder
http://localhost:1000
Compatible con macOS, Linux y Windows (Docker Desktop / WSL).
Para parar:
./autodeploy.sh destroy
# o: docker compose down -v
Contenido del Lab
La aplicacion
Chirp con subida de avatares SVG renderizados con .
La vulnerabilidad
Los SVGs subidos se renderizan con <object> que ejecuta JavaScript embebido en el SVG (a diferencia de <img> que es seguro). Un SVG con <script>alert(1)</script> o onload=alert(1) se ejecuta.
Cadena de ataque
1. Crear SVG: <svg xmlns=...><script>alert(1)</script></svg>
2. Subir como avatar
3. Cualquier usuario que vea el perfil → XSS ejecutado
Solucion interactiva
Accede a /writeup dentro de la aplicacion para una guia paso a paso con botones interactivos.
Flag
(XSS ejecutado via SVG)
Remediacion
- Renderizar SVGs con
en vez de
- Sanitizar SVGs (eliminar scripts y event handlers)
- CSP que bloquee inline scripts
- Servir SVGs con Content-Disposition: attachment
