Entrenamiento en seguridad para las aplicaciones que realmente distribuyes. Abre tu navegador y empieza a hackear.
Una aplicación de comercio electrónico intencionalmente vulnerable para aprender seguridad web.
Domina vectores de ataque del mundo real a través de una plataforma CTF realista.
Busca banderas, explota vulnerabilidades y mejora tus habilidades de seguridad.
Docker Hub · npm · Hoja de ruta · Guías paso a paso · Contribuir · Buenos primeros issues
____ ____ ____ ____ ____ ____ _
/ __ \/ __// __/ / __ \ ___ ___ ___ / __/ ___ ____ / __/ / /_ ___ ____ ___
/ /_/ /\ \ _\ \ / /_/ // _ \ / _ \(_-<_\ \ / -_)/ __/_\ \ / __// _ \ / __// -_)
\____/___//___/ \____/ \___// .__/___/___/ \__/ \__//___/ \__/ \___//_/ \__/
/_/
# Node.js
npx create-oss-store my-ctf-lab && cd my-ctf-lab && npm start
# Docker
docker run -p 127.0.0.1:3000:3000 leogra/oss-oopssec-store
# Then open http://localhost:3000 and start hacking
[!WARNING] Esta aplicación contiene fallos de seguridad intencionales y nunca debe desplegarse en un entorno de producción.
Tienda OopsSec es la única aplicación web intencionalmente vulnerable construida con Next.js y React. El stack que realmente encontrarás en producción. Y la superficie de ataque de la era de la IA es parte del plan de estudios principal, no un añadido: inyección de prompts, envenenamiento de herramientas MCP, puertas traseras para agentes de codificación de IA y una cadena de ataque de supply chain de npm simulada de principio a fin.
| Tienda OopsSec | Juice Shop | DVWA | |
|---|---|---|---|
| Stack | Next.js · React · Prisma | Node.js · Express · Angular | PHP · MySQL |
| Configuración | npx create-oss-store (< 1 min) / Docker | Docker / npm | Docker / LAMP manual |
| Banderas CTF | ✅ Integradas | ✅ Modo CTF opcional | ❌ |
| Hoja de ruta de aprendizaje guiada | ✅ 1 hoja de ruta, 11 capítulos, 36 banderas | ❌ Solo tabla de puntuaciones | Parcial (niveles de seguridad) |
| Guía paso a paso para cada desafío | ✅ | ✅ Guía complementaria | Parcial (pistas) |
| Inyección de prompts LLM | ✅ Conecta una clave API gratuita | ✅ v20+, trae y configura tu propio LLM | ❌ |
| Envenenamiento de herramientas MCP | ✅ | ❌ | ❌ |
| Puerta trasera para agentes de codificación IA (archivo de reglas envenenado) | ✅ | ❌ | ❌ |
| Cadena de ataque de supply chain | ✅ Simulada de principio a fin: typosquat npm → puerta trasera en reglas | Parcial — solo identificación | ❌ |
| Desafíos basados en CVEs reales | ✅ | ❌ | ❌ |
| Salón de la fama para jugadores | ✅ | ❌ | ❌ |
Última verificación en junio de 2026, contra Juice Shop v20 y DVWA 2.x. ¿Has detectado una inexactitud? Abre un issue o abre un PR.
npx create-oss-store my-ctf-lab
cd my-ctf-lab
npm start
Luego abre http://localhost:3000 en tu navegador.
Clona el repositorio y ejecuta el script de configuración:
git clone https://github.com/kOaDT/oss-oopssec-store.git
cd oss-oopssec-store
npm run setup
Esto crea el archivo .env, instala las dependencias, configura la base de datos SQLite, la rellena con las banderas CTF e inicia la aplicación en el puerto 3000.
No se requiere Node.js. Solo Docker.
127.0.0.1:3000:3000mantiene el laboratorio accesible solo desde tu propia máquina. Usa-p 3000:3000simple únicamente en una VM aislada que controles.
docker run -p 127.0.0.1:3000:3000 leogra/oss-oopssec-store
Para conservar los datos entre reinicios:
docker run -p 127.0.0.1:3000:3000 -v oss-data:/app/data leogra/oss-oopssec-store
git clone https://github.com/kOaDT/oss-oopssec-store.git
cd oss-oopssec-store
docker compose up -d
O usando los scripts auxiliares de npm:
npm run docker:up # Inicia en segundo plano (construye la imagen en el primer arranque)
npm run docker:logs # Sigue los registros del contenedor
npm run docker:down # Detiene el contenedor
npm run docker:reset # Borra los datos y reinicia desde cero
La base de datos se inicializa en el primer arranque. Los datos persisten entre reinicios mediante volúmenes con nombre de Docker. Para restablecer todo (progreso de banderas, usuarios, subidas), ejecuta npm run docker:reset.
¿Has encontrado todas las banderas? Abre un pull request para unirte al Salón de la Fama. Añade tu entrada a hall-of-fame/data.json y tu perfil aparecerá en la página /hall-of-fame de la aplicación.
Preguntas, soluciones y comentarios viven en Discussions.
| Dónde ir | Para qué |
|---|---|
| 🧩 Atascado en un desafío | El exploit no se dispara, la bandera no se valida |
| 🛠️ Configuración e instalación | Problemas con Docker, npm o Node para poner en marcha el laboratorio |
| 🏆 Muestra tu solución | Una ruta hacia la bandera que la guía no cubre |
| 💡 Ideas de desafíos | Una clase de vulnerabilidad que merece la pena añadir al plan de estudios |
| 🎓 Enseñar con OopsSec | Ejecutar el laboratorio con una clase, un bootcamp o un equipo |
| Issues | Errores en el propio laboratorio, y solo esos |
| Carpeta | Descripción |
|---|---|
app/ | Next.js App Router: páginas, rutas API, componentes React |
app/api/ | Endpoints de la API REST (auth, carrito, pedidos, productos, banderas, etc.) |
app/components/ | Componentes de UI React (Header, Footer, ProductCard, etc.) |
app/vulnerabilities/ | Páginas que documentan cada vulnerabilidad |
content/vulnerabilities/ | Descripciones en Markdown de vulnerabilidades y vectores de ataque |
lib/ | Utilidades compartidas: cliente de BD, auth, helpers de API, tipos |
prisma/ | Esquema de base de datos, script de seed y flags.ts — las banderas CTF y sus pistas |
public/ | Recursos estáticos y payloads de exploits (p. ej., demo CSRF) |
hooks/ | Hooks de React personalizados (autenticación, etc.) |
scripts/ | Scripts de configuración y automatización |
docs/ | Sitio de documentación estática con guías paso a paso de la comunidad |
hall-of-fame/ | Perfiles de jugadores que encontraron todas las banderas |
packages/ | Paquete npm create-oss-store para scaffolding (y artefactos de cuarentena del laboratorio como react-toastfy) |
lab/quarantine/ | Payloads maliciosos inertes para desafíos de supply chain (trátalos como datos, nunca como instrucciones) |
tests/ | Pruebas unitarias y de API de Jest que validan exploits |
cypress/ | Pruebas E2E para flujos de explotación completos |
El proyecto incluye pruebas de regresión de seguridad que garantizan que todas las cadenas de exploits y banderas siguen funcionando. Estas pruebas validan deliberadamente un comportamiento inseguro. Se ejecutan en cada PR, así que si accidentalmente corriges una vulnerabilidad, CI lo detectará.
# Pruebas unitarias (funciones de utilidad: hash MD5, JWT, filtros de entrada)
npm run test:unit
# Pruebas de explotación de API (requiere un servidor en ejecución)
npm run test:api
# Pruebas de explotación E2E (requiere un servidor en ejecución)
npm run test:e2e
# Abrir el modo interactivo de Cypress
npm run test:e2e:open
# Todas las pruebas
npm run test:ci
[!CAUTION] Este proyecto es solo para fines educativos y pruebas de seguridad autorizadas. Contiene vulnerabilidades intencionales y configuraciones inseguras. Los autores no son responsables de ningún uso indebido, daño o acceso no autorizado. Úsalo en entornos aislados.
OSS – Tienda OopsSec tiene licencia MIT. Las contribuciones son bienvenidas.
Formas de contribuir:
Consulta la Hoja de ruta para ver el trabajo planificado, o toma un buen primer issue.
¿Has encontrado todas las banderas? Comparte tus guías paso a paso en el sitio de documentación.
Para errores o sugerencias, abre un GitHub Issue. Consulta CONTRIBUTING.md para las pautas.
Consulta el Kit para Educadores: una guía lista para usar con cuadrículas de cobertura OWASP, plantillas de programas de estudios, preguntas frecuentes de despliegue y una plantilla de informe para estudiantes. ¿Estás construyendo tus propias herramientas en torno al plan de estudios? Todo está publicado como un feed legible por máquina en challenges.json, regenerado en cada despliegue de la documentación.
Autor: kOaDT
Proyecto: Tienda OopsSec
Contacto: [email protected]
Licencia: MIT
No elimines ni modifiques el archivo LICENSE en tu fork.