
Aplicación vulnerable con ejemplos que muestran cómo no usar secretos
<!-- CRE Link: [223-780](https://www.opencre.org/cre/223-780?register=true&type=tool&tool_type=training&tags=secrets,training&description=With%20this%20app%2C%20we%20have%20packed%20various%20ways%20of%20how%20to%20not%20store%20your%20secrets.%20These%20can%20help%20you%20to%20realize%20whether%20your%20secret%20management%20is%20ok.%20The%20challenge%20is%20to%20find%20all%20the%20different%20secrets%20by%20means%20of%20various%20tools%20and%20techniques.%20Can%20you%20solve%20all%20the%2067%20challenges%3F) -->
# OWASP WrongSecrets
[](https://twitter.com/intent/tweet?text=Want%20to%20dive%20into%20secrets%20management%20and%20do%20some%20hunting?%20try%20this&url=https://github.com/OWASP/wrongsecrets&hashtags=secretsmanagement,secrets,hunting,p0wnableapp,OWASP,WrongSecrets) [<img src="https://img.shields.io/badge/-MASTODON-%232B90D9?style=for-the-badge&logo=mastodon&logoColor=white">](https://tootpick.org/#text=Want%20to%20dive%20into%20secrets%20management%20and%20do%20some%20hunting?%20try%20this%0A%0Ahttps://github.com/OWASP/wrongsecrets%20%23secretsmanagement,%20%23secrets,%20%23hunting,%20%23p0wnableapp,%20%23OWASP,%20%23WrongSecrets) [<img src="https://img.shields.io/badge/-BLUESKY-%230085FF?style=for-the-badge&logo=bluesky&logoColor=white">](https://bsky.app/intent/compose?text=Want%20to%20dive%20into%20secrets%20management%20and%20do%20some%20hunting?%20try%20this%0A%0Ahttps://github.com/OWASP/wrongsecrets%20%23secretsmanagement%20%23secrets%20%23hunting%20%23p0wnableapp%20%23OWASP%20%23WrongSecrets) [<img src="https://img.shields.io/badge/-LINKEDIN-0077B5?style=for-the-badge&logo=linkedin&logoColor=white">](https://www.linkedin.com/shareArticle/?url=https://www.github.com/OWASP/wrongsecrets&title=OWASP%20WrongSecrets)
[](https://github.com/OWASP/wrongsecrets/actions/workflows/main.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/pre-commit.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/terraform.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/codeql-analysis.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/link_checker.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/java_swagger_doc.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/heroku_tests.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/build-devcontainer.yml)
[](https://github.com/OWASP/wrongsecrets/actions/workflows/minikube-k8s-test.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/minikube-vault-test.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/container_test.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/container-alts-test.yml)
[](https://github.com/OWASP/wrongsecrets/actions/workflows/dast-zap-test.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/pr-preview.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/build-preview.yml) [](https://github.com/OWASP/wrongsecrets/actions/workflows/visual-diff.yml)
[](https://owasp.org/projects/)
[](https://bestpractices.coreinfrastructure.org/projects/7024)
[](https://github.com/OWASP/wrongsecrets/discussions)
[](https://hub.docker.com/r/jeroenwillemsen/wrongsecrets)
¡Bienvenido al juego OWASP WrongSecrets! El juego está repleto de ejemplos de la vida real sobre cómo _no_ almacenar secretos en tu software. Cada uno de estos ejemplos se recoge en un desafío, que debes resolver utilizando diversas herramientas y técnicas. Resolver estos desafíos te ayudará a reconocer errores comunes y puede ayudarte a reflexionar sobre tu propia estrategia de gestión de secretos.
¿Puedes resolver los 72 desafíos?
Prueba algunos de ellos en [nuestro entorno de demostración en Heroku](https://wrongsecrets.herokuapp.com/).
¿Quieres jugar a los otros desafíos? Lee las instrucciones sobre cómo configurarlos a continuación.
## 🚀 Inicio rápido
**¿Eres nuevo en WrongSecrets? Empieza aquí:**
1. **Prueba primero en línea**: Visita nuestra [demo en Heroku](https://wrongsecrets.herokuapp.com/) para familiarizarte con los desafíos
2. **Ejecútalo localmente**: Usa Docker para la experiencia completa con todos los desafíos: ```bash
docker run -p 8080:8080 -p 8090:8090 jeroenwillemsen/wrongsecrets:latest-no-vault
```
Luego abre [http://localhost:8080](http://localhost:8080)
3. **¿Quieres ver lo que viene?** Prueba nuestro contenedor master de vanguardia con las últimas funcionalidades: ```bash
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-master:latest-master
```
⚠️ *Nota: Esta es una versión de desarrollo y puede ser inestable*
4. **Configuración avanzada**: Para desafíos en la nube y ejercicios de Kubernetes, consulta las instrucciones detalladas a continuación
**Lo que aprenderás:**
- Errores comunes en la gestión de secretos
- Cómo identificar credenciales expuestas
- Buenas prácticas para proteger secretos
- Herramientas y técnicas para la detección de secretos
**Cómo funciona:**
Este repositorio contiene **código y archivos de configuración intencionalmente vulnerables** con secretos reales y falsos ocultos por todo el código base. Examinarás código fuente, archivos de configuración, contenedores Docker y despliegues en la nube para descubrir estos secretos. Cada desafío te enseña las diferentes formas en que los secretos pueden quedar expuestos accidentalmente en aplicaciones del mundo real.

## 📋 Requisitos previos
**Para uso básico:**
- Un navegador web
- Docker (para configuración local) - [Instalar aquí](https://docs.docker.com/get-docker/)
**Para configuraciones avanzadas:**
- Kubernetes/Minikube - [Instalar aquí](https://minikube.sigs.k8s.io/docs/start/)
- Cuenta en la nube (AWS/GCP/Azure) para los desafíos en la nube
- Familiaridad con la línea de comandos
<a href="https://github.com/vshymanskyy/StandWithUkraine/blob/main/README.md"><img src="https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-no-action.svg" /></a>
## Tabla de contenidos
### 🎯 Primeros pasos
- [Inicio rápido](#-quick-start)
- [Requisitos previos](#-prerequisites)
- [Soporte](#support)
### 🐳 Opciones de despliegue
- [Ejercicios básicos con docker](#basic-docker-exercises)
- [Ejecutarlos en Heroku](#running-these-on-heroku)
- [Ejecutarlos en Render.io](#running-these-on-renderio)
- [Ejecutarlos en Railway](#running-these-on-railway)
- [Ejercicio básico de K8s](#basic-k8s-exercise)
- [Basado en Minikube](#minikube-based)
- [Basado en k8s](#k8s-based)
- [Ejercicios de Vault con minikube](#vault-exercises-with-minikube)
### ☁️ Desafíos en la nube
- [Desafíos en la nube](#cloud-challenges)
- [Ejecutar WrongSecrets en AWS](#running-wrongsecrets-in-aws)
- [Ejecutar WrongSecrets en GCP](#running-wrongsecrets-in-gcp)
- [Ejecutar WrongSecrets en Azure](#running-wrongsecrets-in-azure)
- [Ejecutar el Challenge15 solo en tu propia nube](#running-challenge15-in-your-own-cloud-only)
### 🎮 Uso avanzado
- [¿Quieres jugar sin guía?](#do-you-want-to-play-without-guidance-or-spoils)
- [CTF](#ctf)
- [Soporte para CTFD](#ctfd-support)
- [Soporte para FBCTF](#fbctf-support-experimental)
- [Usar OWASP WrongSecrets como benchmark de detección de secretos](#use-owasp-wrongsecrets-as-a-secret-detection-benchmark)
### 👨💻 Desarrollo y contribución
- [Notas sobre el desarrollo](#notes-on-development)
- [Lista de verificación para la adopción de Spring Boot 4](https://github.com/owasp/wrongsecrets/blob/master/docs/SPRING_BOOT_4_ADOPTION_CHECKLIST.md)
- [Gestión de dependencias](#dependency-management)
- [Iniciar el proyecto en IntelliJ IDEA](#get-the-project-started-in-intellij-idea)
- [Recarga automática durante el desarrollo](#automatic-reload-during-development)
- [Cómo añadir un desafío](#how-to-add-a-challenge)
- [Pruebas locales](#local-testing)
- [Pruebas automatizadas locales](#Local-automated-testing)
- [¿Quieres deshabilitar desafíos en tu propia versión?](#want-to-disable-challenges-in-your-own-release)
### 📚 Recursos y comunidad
- [Agradecimientos especiales y colaboradores](#special-thanks--contributors)
- [Patrocinios](#sponsorships)
- [Se buscan colaboradores](#help-wanted)
- [Lecturas adicionales sobre gestión de secretos](#further-reading-on-secrets-management)
## Soporte
¿Necesitas soporte? Contáctanos
vía [OWASP Slack](https://owasp.slack.com/archives/C02KQ7D9XHR) para el cual puedes registrarte [aquí](https://owasp.org/slack/invite)
, envía un [PR](https://github.com/OWASP/wrongsecrets/pulls), abre
un [issue](https://github.com/OWASP/wrongsecrets/issues) , o
usa las [discussions](https://github.com/OWASP/wrongsecrets/discussions). Ten en cuenta que este es un proyecto
de voluntarios de OWASP, por lo que puede tardar un poco antes de que respondamos.
Copyright (c) 2020-2025 Jeroen Willemsen y colaboradores de WrongSecrets.
## 🛤️ Elige tu camino
¿No estás seguro de qué configuración es la adecuada para ti? Aquí tienes una guía rápida:
| **Quiero...** | **Configuración recomendada** | **Desafíos disponibles** |
|------------------|----------------------|--------------------------|
| Probarlo rápidamente en línea | [Contenedor ejecutándose en Heroku](https://www.wrongsecrets.com/) | Desafíos básicos (0-4, 8, 12-32, 34-43, 49-52, 54-66, 68-72) |
| Ejecutarlo localmente con Docker | [Docker básico](#basic-docker-exercises) | Igual que arriba, pero en tu máquina |
| Aprender secretos de Kubernetes | [Configuración de K8s/Minikube](#basic-k8s-exercise) | Desafíos de Kubernetes (0-6, 8, 12-43, 48-66, 68-72) |
| Practicar con secretos en la nube | [Desafíos en la nube](#cloud-challenges) | Todos los desafíos (0-72) |
| Realizar un taller/CTF | [Configuración de CTF](#ctf) | Conjuntos de desafíos personalizables |
| Contribuir al proyecto | [Configuración de desarrollo](#notes-on-development) | Todos los desafíos + herramientas de desarrollo |
## Ejercicios básicos con docker
_Se pueden usar para los desafíos 0-4, 8, 12-32, 34-43, 49-52, 54-66, 68-72_
Para los ejercicios básicos con docker actualmente necesitas:
- Docker [Instalar desde aquí](https://docs.docker.com/get-docker/)
- Algún navegador que pueda renderizar HTML
Puedes instalarlo haciendo:```bash
docker run -p 8080:8080 -p 8090:8090 jeroenwillemsen/wrongsecrets:latest-no-vault
```
**🚀 ¿Quieres probar la versión de vanguardia?**
Si quieres ver lo que viene en la próxima versión, puedes usar nuestro contenedor master compilado automáticamente:```bash
docker run -p 8080:8080 -p 8090:8090 ghcr.io/owasp/wrongsecrets/wrongsecrets-master:latest-master
```
⚠️ **Advertencia**: Esta es una versión de desarrollo construida a partir de la última rama master y puede contener características experimentales o inestabilidades.
**📝 Nota sobre los puertos:**
- Puerto **8080**: Aplicación principal (desafíos 0-72)
- Puerto **8090**: Servidor MCP (requerido para el Desafío 60)
**📝 Nota sobre el Desafío 62 (Google Drive MCP):**
El Desafío 62 requiere que se configure una Cuenta de Servicio de Google para su funcionalidad completa. Consulte [docs/CHALLENGE62_GOOGLE_DRIVE_SETUP.md](https://github.com/owasp/wrongsecrets/blob/master/docs/CHALLENGE62_GOOGLE_DRIVE_SETUP.md) para obtener instrucciones de configuración. Sin la configuración, el desafío mostrará un mensaje de marcador de posición.
Ahora puedes intentar encontrar los secretos resolviendo el desafío ofrecido en los enlaces a continuación
<details>
<summary>todos los enlaces para los desafíos de docker (haz clic en el triángulo para abrir el bloque).
</summary>
- [localhost:8080/challenge/challenge-0](http://localhost:8080/challenge/challenge-0)
- [localhost:8080/challenge/challenge-1](http://localhost:8080/challenge/challenge-1)
- [localhost:8080/challenge/challenge-2](http://localhost:8080/challenge/challenge-2)
- [localhost:8080/challenge/challenge-3](http://localhost:8080/challenge/challenge-3)
- [localhost:8080/challenge/challenge-4](http://localhost:8080/challenge/challenge-4)
- [localhost:8080/challenge/challenge-8](http://localhost:8080/challenge/challenge-8)
- [localhost:8080/challenge/challenge-12](http://localhost:8080/challenge/challenge-12)
- [localhost:8080/challenge/challenge-13](http://localhost:8080/challenge/challenge-13)
- [localhost:8080/challenge/challenge-14](http://localhost:8080/challenge/challenge-14)
- [localhost:8080/challenge/challenge-15](http://localhost:8080/challenge/challenge-15)
- [localhost:8080/challenge/challenge-16](http://localhost:8080/challenge/challenge-16)
- [localhost:8080/challenge/challenge-17](http://localhost:8080/challenge/challenge-17)
- [localhost:8080/challenge/challenge-18](http://localhost:8080/challenge/challenge-18)
- [localhost:8080/challenge/challenge-19](http://localhost:8080/challenge/challenge-19)
- [localhost:8080/challenge/challenge-20](http://localhost:8080/challenge/challenge-20)
- [localhost:8080/challenge/challenge-21](http://localhost:8080/challenge/challenge-21)
- [localhost:8080/challenge/challenge-22](http://localhost:8080/challenge/challenge-22)
- [localhost:8080/challenge/challenge-23](http://localhost:8080/challenge/challenge-23)
- [localhost:8080/challenge/challenge-24](http://localhost:8080/challenge/challenge-24)
- [localhost:8080/challenge/challenge-25](http://localhost:8080/challenge/challenge-25)
- [localhost:8080/challenge/challenge-26](http://localhost:8080/challenge/challenge-26)
- [localhost:8080/challenge/challenge-27](http://localhost:8080/challenge/challenge-27)
- [localhost:8080/challenge/challenge-28](http://localhost:8080/challenge/challenge-28)
- [localhost:8080/challenge/challenge-29](http://localhost:8080/challenge/challenge-29)
- [localhost:8080/challenge/challenge-30](http://localhost:8080/challenge/challenge-30)
- [localhost:8080/challenge/challenge-31](http://localhost:8080/challenge/challenge-31)
- [localhost:8080/challenge/challenge-32](http://localhost:8080/challenge/challenge-32)
- [localhost:8080/challenge/challenge-34](http://localhost:8080/challenge/challenge-34)
- [localhost:8080/challenge/challenge-35](http://localhost:8080/challenge/challenge-35)
- [localhost:8080/challenge/challenge-36](http://localhost:8080/challenge/challenge-36)
- [localhost:8080/challenge/challenge-37](http://localhost:8080/challenge/challenge-37)
- [localhost:8080/challenge/challenge-38](http://localhost:8080/challenge/challenge-38)
- [localhost:8080/challenge/challenge-39](http://localhost:8080/challenge/challenge-39)
- [localhost:8080/challenge/challenge-40](http://localhost:8080/challenge/challenge-40)
- [localhost:8080/challenge/challenge-41](http://localhost:8080/challenge/challenge-41)
- [localhost:8080/challenge/challenge-42](http://localhost:8080/challenge/challenge-42)
- [localhost:8080/challenge/challenge-43](http://localhost:8080/challenge/challenge-43)
- [localhost:8080/challenge/challenge-49](http://localhost:8080/challenge/challenge-49)
- [localhost:8080/challenge/challenge-50](http://localhost:8080/challenge/challenge-50)
- [localhost:8080/challenge/challenge-51](http://localhost:8080/challenge/challenge-51)
- [localhost:8080/challenge/challenge-52](http://localhost:8080/challenge/challenge-52)
- [localhost:8080/challenge/challenge-54](http://localhost:8080/challenge/challenge-54)
- [localhost:8080/challenge/challenge-55](http://localhost:8080/challenge/challenge-55)
- [localhost:8080/challenge/challenge-56](http://localhost:8080/challenge/challenge-56)
- [localhost:8080/challenge/challenge-57](http://localhost:8080/challenge/challenge-57)
- [localhost:8080/challenge/challenge-58](http://localhost:8080/challenge/challenge-58)
- [localhost:8080/challenge/challenge-59](http://localhost:8080/challenge/challenge-59)
- [localhost:8080/challenge/challenge-60](http://localhost:8080/challenge/challenge-60)
- [localhost:8080/challenge/challenge-61](http://localhost:8080/challenge/challenge-61)
- [localhost:8080/challenge/challenge-62](http://localhost:8080/challenge/challenge-62)
- [localhost:8080/challenge/challenge-63](http://localhost:8080/challenge/challenge-63)
- [localhost:8080/challenge/challenge-64](http://localhost:8080/challenge/challenge-64)
- [localhost:8080/challenge/challenge-65](http://localhost:8080/challenge/challenge-65)
- [localhost:8080/challenge/challenge-66](http://localhost:8080/challenge/challenge-66)
- [localhost:8080/challenge/challenge-68](http://localhost:8080/challenge/challenge-68)
- [localhost:8080/challenge/challenge-69](http://localhost:8080/challenge/challenge-69)
- [localhost:8080/challenge/challenge-70](http://localhost:8080/challenge/challenge-70)
- [localhost:8080/challenge/challenge-71](http://localhost:8080/challenge/challenge-71)
- [localhost:8080/challenge/challenge-72](http://localhost:8080/challenge/challenge-72)
</details>
Ten en cuenta que estos desafíos aún son muy básicos, y sus explicaciones también. No dudes en enviar un PR para mejorarlos ;-).
### Ejecutarlos en Heroku
¡También puedes probarlos en [https://wrongsecrets.herokuapp.com/](https://wrongsecrets.herokuapp.com/)! La gente de Heroku nos ha dado un increíble paquete de soporte de código abierto, que nos permite ejecutar la aplicación de forma gratuita allí, donde casi siempre está disponible. Aun así, por favor no hagas fuzzing ni intentes tumbarla: se lo estarías arruinando a otros que quieran probarla.
Usa [este enlace](https://wrongsecrets.herokuapp.com/) para usar nuestra versión alojada de la aplicación. Si quieres alojarla en Heroku tú mismo (por ejemplo, para realizar una formación), puedes hacerlo haciendo clic en [este enlace](https://heroku.com/deploy?template=https://github.com/OWASP/wrongsecrets/tree/master). Ten en cuenta que esto generará costos de los cuales este proyecto y/o sus mantenedores no pueden ser considerados responsables.
### Ejecutarlos en Render.io
*estado: experimental*
Puedes probarlos en [https://wrongsecrets.onrender.com/](https://wrongsecrets.onrender.com/). Por favor, comprende que funcionamos en una instancia de nivel gratuito, no podemos dar ninguna garantía. Por favor no hagas fuzzing ni intentes tumbarla: se lo estarías arruinando a otros que quieran probarla.
¿Quieres desplegarla tú mismo con Render? Haz clic en el botón de abajo:
[](https://render.com/deploy?repo=https://github.com/OWASP/wrongsecrets)
### Ejecutarlos en Railway
*estado: mantenido por [alphasec.io](https://github.com/alphasecio)*
Si quieres alojar WrongSecrets en Railway, puedes hacerlo desplegando [esta plantilla de un solo clic](https://railway.com/deploy/McqJ_j?referralCode=I07F1). Railway ya no ofrece un plan siempre gratuito, pero la prueba gratuita es suficientemente buena para probar esto antes de decidir actualizar. Si necesitas una guía paso a paso complementaria, consulta [esta publicación de blog](https://alphasec.io/test-your-secret-management-skills-with-owasp-wrongsecrets/).
[](https://railway.com/deploy/McqJ_j?referralCode=I07F1j)
## Ejercicio básico de K8s
_Se puede usar para los desafíos 0-6, 8, 12-43, 48-72_
### Basado en Minikube
Asegúrate de tener instalado lo siguiente:
- Docker [Instalar desde aquí](https://docs.docker.com/get-docker/)
- Minikube [Instalar desde aquí](https://minikube.sigs.k8s.io/docs/start/)
La configuración de K8S actualmente se basa en usar Minikube para diversión local. Puedes usar los comandos a continuación desde la raíz del proyecto:```bash
minikube start
kubectl apply -f k8s/secrets-config.yml
kubectl apply -f k8s/secrets-secret.yml
kubectl apply -f k8s/challenge33.yml
kubectl apply -f k8s/challenge53/secret-challenge53.yml
echo "Setting up the bitnami sealed secret controler"
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml
kubectl apply -f k8s/sealed-secret-controller.yaml
kubectl apply -f k8s/main.key
kubectl delete pod -n kube-system -l name=sealed-secrets-controller
kubectl create -f k8s/sealed-challenge48.json
echo "finishing up the sealed secret controler part"
wait 10 #or check whether secret48 is there
kubectl apply -f k8s/secret-challenge-deployment.yml
while [[ $(kubectl get pods -l app=secret-challenge -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}') != "True" ]]; do echo "waiting for secret-challenge" && sleep 2; done
kubectl expose deployment secret-challenge --type=LoadBalancer --port=8080
minikube service secret-challenge
```
Alternativamente, puedes hacer:```bash
./k8s-vault-minikube-start.sh
```
ahora puedes usar la dirección IP y el puerto proporcionados para seguir jugando con la variante de K8s (en lugar de localhost).
- [localhost:8080/challenge/challenge-5](http://localhost:8080/challenge/challenge-5)
- [localhost:8080/challenge/challenge-6](http://localhost:8080/challenge/challenge-6)
- [localhost:8080/challenge/challenge-33](http://localhost:8080/challenge/challenge-33)
- [localhost:8080/challenge/challenge-48](http://localhost:8080/challenge/challenge-48)
- [localhost:8080/challenge/challenge-53](http://localhost:8080/challenge/challenge-53)
### basado en k8s
¿Quieres ejecutar vanilla en tu propio k8s? Usa los comandos a continuación:```bash
kubectl apply -f k8s/secrets-config.yml
kubectl apply -f k8s/secrets-secret.yml
echo "Setting up the bitnami sealed secret controler"
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml
kubectl apply -f k8s/sealed-secret-controller.yaml
kubectl apply -f k8s/main.key
kubectl delete pod -n kube-system -l name=sealed-secrets-controller
kubectl create -f k8s/sealed-challenge48.json
echo "finishing up the sealed secret controler part"
wait 10 #or check whether secret48 is there
kubectl apply -f k8s/challenge33.yml
kubectl apply -f k8s/secret-challenge-deployment.yml
while [[ $(kubectl get pods -l app=secret-challenge -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}') != "True" ]]; do echo "waiting for secret-challenge" && sleep 2; done
kubectl port-forward \
$(kubectl get pod -l app=secret-challenge -o jsonpath="{.items[0].metadata.name}") \
8080:8080
```
ahora puedes usar la dirección IP y el puerto proporcionados para seguir jugando con la variante de K8s (en lugar de localhost).
- [localhost:8080/challenge/challenge-5](http://localhost:8080/challenge/challenge-5)
- [localhost:8080/challenge/challenge-6](http://localhost:8080/challenge/challenge-6)
- [localhost:8080/challenge/challenge-33](http://localhost:8080/challenge/challenge-33)
- [localhost:8080/challenge/challenge-48](http://localhost:8080/challenge/challenge-48)
## Ejercicios de Vault con minikube
_Se puede usar para los desafíos 0-8, 12-46, 48-72_
Asegúrate de tener instalado lo siguiente:
- minikube con docker (o comenta la línea 8 y trabaja en tu propia configuración de k8s),
- docker,
- helm [Instalar desde aquí](https://helm.sh/docs/intro/install/),
- kubectl [Instalar desde aquí](https://kubernetes.io/docs/tasks/tools/),
- jq [Instalar desde aquí](https://stedolan.github.io/jq/download/),
- vault [Instalar desde aquí](https://developer.hashicorp.com/vault/install),
- grep, Cat y Sed
Ejecuta `./k8s-vault-minikube-start.sh`, cuando el script termine, los desafíos te estarán esperando en <http://localhost:8080> . Esto te permitirá ejecutar los desafíos 0-8, 12-66.
Cuando detengas el script `k8s-vault-minikube-start.sh` y quieras reanudar el reenvío de puertos, ejecuta: `k8s-vault-minikube-resume.sh`.
Esto se debe a que si ejecutas el script de inicio de nuevo, reemplazará el secreto en el vault y no actualizará la aplicación secret-challenge con el nuevo secreto.
## Desafíos en la nube
_Se puede usar para los desafíos 0-72_
**LEE ESTO**: Dado que los ejercicios a continuación contienen ejercicios de escalada de privilegios de IAM,
nunca ejecutes esto en una cuenta que esté relacionada con tu entorno de producción o que pueda influir en tus recursos
generales de la cuenta.
### Ejecutar WrongSecrets en AWS
Sigue los pasos en [el README en la subcarpeta de AWS](https://github.com/owasp/wrongsecrets/blob/master/aws/README.md).
### Ejecutar WrongSecrets en GCP
Sigue los pasos en [el README en la subcarpeta de GCP](https://github.com/owasp/wrongsecrets/blob/master/gcp/README.md).
### Ejecutar WrongSecrets en Azure
Sigue los pasos en [el README en la subcarpeta de Azure](https://github.com/owasp/wrongsecrets/blob/master/azure/README.md).
### Ejecutar Challenge15 solo en tu propia nube
Cuando quieras incluir tus propios Canarytokens para tu despliegue en la nube, haz lo siguiente:
1. Haz un fork del proyecto.
2. Asegúrate de usar los scripts de [ingress de GCP](https://github.com/owasp/wrongsecrets/blob/master/gcp/k8s-vault-gcp-ingress-start.sh) o [ingress de AWS](https://github.com/owasp/wrongsecrets/blob/master/aws/k8s-aws-alb-script.sh) para generar un ingress para tu proyecto.
3. Ve a [canarytokens.org](https://canarytokens.org/generate) y selecciona `AWS Keys`, en el campo webHook URL añade `<your-domain-created-at-step1>/canaries/tokencallback`.
4. Cifra las credenciales recibidas para que [Challenge15](https://github.com/owasp/wrongsecrets/blob/master/src/main/java/org/owasp/wrongsecrets/challenges/docker/Challenge15.java) pueda descifrarlas de nuevo.
5. Haz commit de los materiales sin cifrar y cifrados a Git y luego haz commit de nuevo sin los materiales descifrados.
6. Adapta las pistas del Desafío 15 en tu fork para que apunten a tu fork.
7. Crea un contenedor y súbelo a tu registro
8. Sobrescribe los archivos de definición de K8s para [AWS](https://github.com/owasp/wrongsecrets/blob/master/aws/k8s/secret-challenge-vault-deployment.yml) o [GCP](https://github.com/owasp/wrongsecrets/blob/master/gcp/k8s/secret-challenge-vault-deployment.yml.tpl).
## ¿Quieres jugar sin orientación ni spoilers?
Cada desafío tiene un botón `Show hints` y un botón `What's wrong?`. Estos botones ayudan a simplificar los desafíos y dan explicaciones al lector. Sin embargo, las explicaciones pueden arruinar la diversión si quieres hacer esto como un ejercicio de hacking.
Por lo tanto, puedes manipularlos sobrescribiendo las siguientes configuraciones en tu env:
- `hints_enabled=false` desactivará el botón `Show hints`.
- `reason_enabled=false` desactivará el botón de explicación `What's wrong?`.
- `spoiling_enabled=false` desactivará el endpoint `/spoil/challenge-x` (donde `x` es el nombre corto del desafío).
## Habilitar Swaggerdocs y UI
Puedes habilitar la documentación de Swagger y la UI de Swagger sobrescribiendo `SPRINGDOC_UI` y `SPRINGDOC_DOC` al ejecutar el contenedor Docker.
## Agradecimientos especiales y colaboradores
Líderes:
- [Ben de Haan @bendehaan](https://www.github.com/bendehaan)
- [Jeroen Willemsen @commjoen](https://www.github.com/commjoen)
Principales colaboradores:
- [Jannik Hollenbach @J12934](https://www.github.com/J12934)
- [Puneeth Y @puneeth072003](https://www.github.com/puneeth072003)
- [Joss Sparkes @RemakingEden](https://www.github.com/RemakingEden)
Colaboradores:
- [Nanne Baars @nbaars](https://www.github.com/nbaars)
- [Marcin Nowak @drnow4u](https://www.github.com/drnow4u)
- [Rodolfo Neves @roddas](https://www.github.com/roddas)
- [O @osamamagdy](https://www.github.com/osamamagdy)
- [Pastekitoo @Pastekitoo](https://www.github.com/Pastekitoo)
- [za @za](https://www.github.com/za)
- [Divyanshu Dev @Novice-expert](https://www.github.com/Novice-expert)
- [Tibor Hercz @tiborhercz](https://www.github.com/tiborhercz)
- [sandeshkuldharme1 @sandeshkuldharme1](https://www.github.com/sandeshkuldharme1)
- [Shubham Patel @Shubham-Patel07](https://www.github.com/Shubham-Patel07)
- [Adarsh A @adarsh-a-tw](https://www.github.com/adarsh-a-tw)
- [Chris Elbring Jr. @neatzsche](https://www.github.com/neatzsche)
- [Sandeep @youknowme19](https://www.github.com/youknowme19)
- [Diamond Rivero @diamant3](https://www.github.com/diamant3)
- [Norbert Wolniak @nwolniak](https://www.github.com/nwolniak)
- [Jeffy123-zhu @Jeffy123-zhu](https://www.github.com/Jeffy123-zhu)
- [Anirban Ghosh @kekubhai](https://www.github.com/kekubhai)
- [Robert Felber @rfelber](https://www.github.com/rfelber)
- [Filip Chyla @fchyla](https://www.github.com/fchyla)
- [Seershan Mitra @seershan](https://www.github.com/seershan)
- [Vineeth Jagadeesh @djvinnie](https://www.github.com/djvinnie)
- [Dmitry Litosh @Dlitosh](https://www.github.com/Dlitosh)
- [Mahaputra Ilham Awal @mahaputrailhamawal](https://www.github.com/mahaputrailhamawal)
- [Turjo Chowdhury @turjoc120](https://www.github.com/turjoc120)
- [SndR @SndR85](https://www.github.com/SndR85)
- [alphasec @alphasecio](https://www.github.com/alphasecio)
- [CaduRoriz @CaduRoriz](https://www.github.com/CaduRoriz)
- [Josh Grossman @tghosth](https://www.github.com/tghosth)
- [Madhu Akula @madhuakula](https://www.github.com/madhuakula)
- [Mike Woudenberg @mikewoudenberg](https://www.github.com/mikewoudenberg)
- [Spyros @northdpole](https://www.github.com/northdpole)
- [Satyam Pandey @SatyamPandey-07](https://www.github.com/SatyamPandey-07)
- [Muhammad Moeed Ur Rehman Khan @moeedrehman135](https://www.github.com/moeedrehman135)
- [RubenAtBinx @RubenAtBinx](https://www.github.com/RubenAtBinx)
- [Alex Bender @alex-bender](https://www.github.com/alex-bender)
- [Arpit Jain @arpitjain099](https://www.github.com/arpitjain099)
- [Tuer·maimaitiaili Ba @bte808](https://www.github.com/bte808)
- [Danny Lloyd @dannylloyd](https://www.github.com/dannylloyd)
- [Fern @f3rn0s](https://www.github.com/f3rn0s)
- [Rick M @kingthorin](https://www.github.com/kingthorin)
- [Nicolas Humblot @nhumblot](https://www.github.com/nhumblot)
- [Shlomo Zalman Heigh @szh](https://www.github.com/szh)
- [Jeff Tong @Wind010](https://www.github.com/Wind010)
Testers:
- [Dave van Stein @davevs](https://www.github.com/davevs)
- [Marcin Nowak @drnow4u](https://www.github.com/drnow4u)
- [Marc Chang Sing Pang @mchangsp](https://www.github.com/mchangsp)
- [Vineeth Jagadeesh @djvinnie](https://www.github.com/djvinnie)
Agradecimientos especiales:
- [Madhu Akula @madhuakula @madhuakula](https://www.github.com/madhuakula)
- [Nanne Baars @nbaars @nbaars](https://www.github.com/nbaars)
- [Bjorn Kimminich @bkimminich](https://www.github.com/bkimminich)
- [Dan Gora @devsecops](https://www.github.com/devsecops)
- [Xiaolu Dai @saragluna](https://www.github.com/saragluna)
- [Jonathan Giles @jonathanGiles](https://www.github.com/jonathanGiles)
### Patrocinios
Nos gustaría agradecer a las siguientes partes por ayudarnos:
[](https://blog.gitguardian.com/gitguardian-is-proud-sponsor-of-owasp/)
[GitGuardian](https://www.gitguardian.com/) por su patrocinio que nos permite pagar las facturas de nuestras cuentas en la nube.
[](https://jb.gg/OpenSource)
[Jetbrains](https://www.jetbrains.com/) por licenciar una instancia de Intellij IDEA Ultimate edition a los líderes del proyecto. ¡No habríamos podido ser tan rápidos con el desarrollo sin ello!
[](https://github.com/1Password/1password-teams-open-source/pull/552)
[1Password](https://1password.com/) por concedernos una licencia de código abierto de 1Password para el banco de pruebas de detección de secretos.
[](https://aws.amazon.com/)
[AWS](https://aws.amazon.com/) por concedernos créditos de AWS Open Source que usamos para probar nuestro proyecto y la configuración de [Wrongsecrets CTF Party](https://github.com/OWASP/wrongsecrets-ctf-party) en AWS.
## Se busca ayuda
Puedes ayudarnos de las siguientes maneras:
- Danos una estrella
- Comparte esta aplicación con otros
- Por supuesto, ¡siempre podemos usar tu ayuda [para conseguir más variantes](https://github.com/OWASP/wrongsecrets/issues/37) de secretos configurados "incorrectamente" para difundir la concienciación! Nos encantaría recibir ayuda con otros proveedores de nube, como Alibaba o Tencent cloud, por ejemplo. ¿Echas de menos algo más que un proveedor de nube? ¡Abre un issue o crea un PR! Consulta [nuestra guía sobre contribuciones para más detalles](https://github.com/owasp/wrongsecrets/blob/master/CONTRIBUTING.md). Los colaboradores aparecerán listados en las releases, en la sección "Agradecimientos especiales y colaboradores", y en la aplicación web.
## Usar OWASP WrongSecrets como benchmark de detección de secretos
Como están surgiendo muchísimas herramientas de detección de secretos tanto para Docker como para Git, estamos creando un banco de pruebas de Benchmark para ello.
¿Quieres saber si tu herramienta lo detecta todo? Haremos seguimiento de los secretos incrustados en [este issue](https://github.com/OWASP/wrongsecrets/issues/201) y tenemos una [rama](https://github.com/OWASP/wrongsecrets/tree/experiment-bed) en la que ponemos secretos adicionales para que tu herramienta los detecte.
La rama contendrá un script de generación de contenedores Docker con el que eventualmente podrás probar el escaneo de secretos de tu contenedor.
### Comparación automatizada de escáneres de secretos
Ahora proporcionamos un flujo de trabajo automatizado de GitHub Action que compara múltiples herramientas de escaneo de secretos contra el código base de WrongSecrets. El [flujo de trabajo de comparación de escáneres de secretos](https://github.com/owasp/wrongsecrets/blob/master/.github/workflows/scanner-comparison.yml) prueba 7 herramientas diferentes:
- **TruffleHog** - Escáner de secretos basado en Docker
- **git-secrets** - Escáner de git hooks de AWS Labs
- **gitleaks** - Escáner de alto rendimiento basado en Go
- **detect-secrets** - Escáner empresarial de Yelp
- **gittyleaks** - Detector de patrones basado en Python
- **whispers** - Escáner estructurado de Skyscanner
- **trufflehog3** - Versión en Python de TruffleHog
El flujo de trabajo se ejecuta semanalmente y proporciona una tabla comparativa que muestra cuántos secretos detecta cada herramienta, ayudándote a entender la efectividad relativa de las diferentes herramientas de escaneo de secretos. Consulta [docs/scanner-comparison.md](https://github.com/owasp/wrongsecrets/blob/master/docs/scanner-comparison.md) para más detalles sobre cómo ejecutar e interpretar los resultados.
## CTF
Tenemos 3 formas de jugar CTFs:
- El enfoque rápido de "vamos a jugar" basado en nuestro propio dominio de Heroku [https://wrongsecrets-ctf.herokuapp.com](https://wrongsecrets-ctf.herokuapp.com), que documentamos para ti aquí.
- Un enfoque más extendido documentado en [ctf-instructions.md](https://github.com/owasp/wrongsecrets/blob/master/ctf-instructions.md).
- Una configuración de CTF totalmente personalizable donde cada jugador obtiene su propia instancia virtual de WrongSecrets y una instancia virtual del wrongsecrets-desktop, para que todos puedan jugar sin complicaciones. Para esto tienes que usar [la configuración de WrongSecrets CTF Party](https://github.com/OWASP/wrongsecrets-ctf-party).
### Soporte de CTFD
¿Quieres usar CTFD para jugar un CTF basado en la instancia gratuita de Heroku wrongsecrets-ctf junto con CTFD? ¡Puedes hacerlo!
NOTA: El soporte de CTFD ahora funciona basándose en la [Juiceshop CTF CLI](https://github.com/juice-shop/juice-shop-ctf).
NOTA-II: [https://wrongsecrets-ctf.herokuapp.com](https://wrongsecrets-ctf.herokuapp.com) (temporalmente caído por falta de créditos de oss) está basado en Heroku y tiene capacidad limitada.
La creación inicial del archivo zip para CTFD requiere que visites [https://wrongsecrets-ctf.herokuapp.com/api/Challenges](https://wrongsecrets-ctf.herokuapp.com/api/Challenges) una vez antes de ejecutar los pasos a continuación.
Sigue los siguientes pasos:```shell
npm install -g [email protected]
juice-shop-ctf #choose ctfd and https://wrongsecrets-ctf.herokuapp.com as domain. No trailing slash! The key is 'TRwzkRJnHOTckssAeyJbysWgP!Qc2T', feel free to enable hints.
docker run -p 8001:8000 -it ctfd/ctfd:3.7.4
```
> **Nota:** Las pistas solo se pueden generar si la instancia de WrongSecrets tiene las pistas habilitadas (`HINTS_ENABLED=true`). La instancia CTF de Heroku ([https://wrongsecrets-ctf.herokuapp.com](https://wrongsecrets-ctf.herokuapp.com)) se ejecuta con `HINTS_ENABLED=false`, por lo que seleccionar "Free hints" o "Paid hints" dará como resultado una lista de pistas vacía. Para generar pistas, ejecuta tu propia instancia con `HINTS_ENABLED=true`.
Ahora visita la instancia de CTFD en [http://localhost:8001](http://localhost:8001) y configura tu CTF.
Luego usa la función de copia de seguridad administrativa para importar el archivo zip que creaste con el comando juice-shop-ctf.
¡A jugar usando [https://wrongsecrets-ctf.herokuapp.com](https://wrongsecrets-ctf.herokuapp.com)!
¿Quieres configurar el tuyo propio? ¡Puedes hacerlo! Pero ten cuidado con las personas que encuentren tu clave, así que asegúrala adecuadamente: asegúrate de que el contenedor en ejecución con la ctf-key real no esté expuesto a la audiencia, de manera similar a nuestro contenedor de heroku.
## Soporte de FBCTF (¡Experimental!)
NOTA: El soporte de FBCTF es experimental.
Sigue los mismos pasos que con CTFD, solo que ahora elige fbctfd y como url para el countrymapping elige `https://raw.githubusercontent.com/OWASP/wrongsecrets/79a982558016c8ce70948a8106f9a2ee5b5b9eea/config/fbctf.yml`.
Luego sigue [https://github.com/facebookarchive/fbctf/wiki/Quick-Setup-Guide](https://github.com/facebookarchive/fbctf/wiki/Quick-Setup-Guide) para ejecutar el FBCTF.
## Notas sobre el desarrollo
Para el desarrollo en la máquina local usa el perfil `local` `./mvnw spring-boot:run -Dspring-boot.run.profiles=local,without-vault`
Si quieres probar contra vault sin K8s: inicia vault localmente con```shell
export SPRING_CLOUD_VAULT_URI='http://127.0.0.1:8200'
export VAULT_API_ADDR='http://127.0.0.1:8200'
vault server -dev
```
y en tu siguiente terminal, haz (con el token de los comandos anteriores):```shell
export SPRING_CLOUD_VAULT_URI='http://127.0.0.1:8200'
export SPRING_CLOUD_VAULT_TOKEN='<TOKENHERE>'
vault token create -id="00000000-0000-0000-0000-000000000000" -policy="root"
vault kv put secret/secret-challenge vaultpassword.password="$(openssl rand -base64 16)"
vault kv put secret/injected vaultinjected.value="$(openssl rand -base64 16)"
vault kv put secret/codified challenge47secret.value="debugvalue"
```
Ahora usa el perfil `local-vault` para realizar tu desarrollo.```shell
./mvnw spring-boot:run -Dspring-boot.run.profiles=local,local-vault
```
Si quieres desarrollar sin una instancia de Vault, utiliza además el perfil `without-vault` para tu desarrollo:```shell
./mvnw spring-boot:run -Dspring-boot.run.profiles=local,without-vault
```
¿Quieres subir un contenedor? Consulta `.github/scripts/docker-create-and-push.sh` para ver un script que genera y sube todos los contenedores. No olvides reconstruir la aplicación antes de componer el contenedor.
¿Quieres comprobar por qué algo en vault no funciona en kubernetes? Ejecuta `kubectl exec vault-0 -n vault -- vault audit enable file file_path=stdout`.
### Gestión de dependencias
Tenemos CycloneDX y OWASP Dependency-check integrados para comprobar las dependencias en busca de vulnerabilidades.
Puedes usar el OWASP Dependency-checker llamando a `mvn dependency-check:aggregate` y `mvn cyclonedx:makeBom` para usar CycloneDX y crear un SBOM.
### Configuración del plugin Dependency-Check Maven
OWASP WrongSecrets utiliza el plugin [`dependency-check-maven`](https://jeremylong.github.io/DependencyCheck/dependency-check-maven/index.html) para escanear automáticamente las dependencias del proyecto en busca de vulnerabilidades conocidas (CVE).
#### Cómo funciona
- El plugin se ejecuta durante la compilación de Maven (`./mvnw clean install`) y comprueba todas las dependencias contra bases de datos públicas de vulnerabilidades.
- Por defecto, utiliza la NVD (National Vulnerability Database) y también puede usar OSS Index para una cobertura adicional.
#### Aspectos destacados de la configuración
El plugin se configura en `pom.xml` bajo la sección `<build><plugins>`:```xml
<plugin>
<groupId>org.owasp</groupId>
<artifactId>dependency-check-maven</artifactId>
<version>${dependency-check-maven.version}</version>
<configuration>
<nvdApiKey>...</nvdApiKey>
<assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
<ossIndexServerId>ossindex</ossIndexServerId>
<ossIndexAnalyzerEnabled>true</ossIndexAnalyzerEnabled> <!-- SET THIS TO FALSE IF YOU HAVE NO SONATYPE ACCOUNT! -->
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
```
- **nvdApiKey**: Clave de API para acceder a la base de datos NVD (recomendada para escaneos más rápidos y confiables).
- **ossIndexServerId**: Hace referencia a las credenciales en tu `settings.xml` de Maven para OSS Index (ver más abajo).
- **ossIndexAnalyzerEnabled**: Establece en `true` para habilitar el escaneo de OSS Index. Si encuentras errores de autenticación (401), establece esto en `false` para deshabilitar OSS Index.
#### Autenticación con OSS Index
Para usar OSS Index, necesitas agregar tus credenciales a tu `settings.xml` de Maven:```xml
<servers>
<server>
<id>ossindex</id>
<username>YOUR_OSSINDEX_USERNAME</username>
<password>YOUR_OSSINDEX_API_TOKEN</password>
</server>
</servers>
```
Reemplace `YOUR_OSSINDEX_USERNAME` y `YOUR_OSSINDEX_API_TOKEN` con los detalles de su cuenta de OSS Index.
#### Solución de problemas
- Si ve errores `401 Unauthorized` para OSS Index, verifique sus credenciales o desactive OSS Index estableciendo `<ossIndexAnalyzerEnabled>false</ossIndexAnalyzerEnabled>` en `pom.xml`.
- Siempre puede ejecutar la compilación sin OSS Index si prefiere solo el escaneo basado en NVD.
#### Más información
Consulte la [Documentación del Plugin Maven de Dependency-Check](https://jeremylong.github.io/DependencyCheck/dependency-check-maven/index.html) para opciones de configuración avanzadas.
### Iniciar el proyecto en IntelliJ IDEA
Requisitos: asegúrese de tener instaladas las siguientes herramientas: [Docker](https://www.docker.com/products/docker-desktop/), [Java26 JDK](https://jdk.java.net/26/), [NodeJS 26](https://nodejs.org/en/download/current) e [IntelliJ IDEA](https://www.jetbrains.com/idea/download).
1. Haga un fork y clone el proyecto como se describe en la [documentación](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md).
2. Importe el proyecto en IntelliJ (por ejemplo, importar como proyecto mvn / fuentes locales)
3. Vaya a la configuración del proyecto y asegúrese de que use Java26 (y que el JDK se pueda encontrar)
4. Vaya a la configuración del IDE > Language & Frameworks > Lombok y asegúrese de que el procesamiento de Lombok esté habilitado
5. Abra la pestaña Maven en su IDEA y ejecute "Reload All Maven Projects" para que el sistema se sincronice y descargue todo. A continuación, en esa misma pestaña use la opción "install" como parte del ciclo de vida de OWASP WrongSecrets para generar el asciidoc y demás.
6. Ahora ejecute el método `main` en `org.owasp.wrongsecrets.WrongSecretsApplication.java`. Esto debería fallar con un stack trace.
7. Ahora vaya a la configuración de ejecución de la aplicación y asegúrese de tener el perfil activo `without-vault`. Esto se hace estableciendo los argumentos de opciones de VM a `--server.port=8080 --spring.profiles.active=local,without-vault`. Establezca `K8S_ENV=docker` como argumento de entorno.
8. Repita el paso 6: ejecute la aplicación de nuevo, debería tener una aplicación funcionando correctamente que se puede visitar en su navegador en http://localhost:8080.
**Guía ilustrada** sobre cómo iniciar el proyecto en IntelliJ IDEA está disponible en [_Contributing.md_](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md#how-to-get-started-with-the-project-in-intellij-idea).
Siéntase libre de editar y proponer cambios mediante pull requests. Asegúrese de seguir nuestra guía en la [documentación](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md) para que su trabajo sea aceptado.
Tenga en cuenta que oficialmente solo damos soporte a Linux y MacOS para el desarrollo. Si desea desarrollar usando una máquina Windows, use WSL2 o una máquina virtual que ejecute Linux. Incluimos detección de Windows y un montón de archivos `exe` para un primer experimento, pero estamos buscando mantenedores activos para ellos. ¿Quiere asegurarse de que funcione en Windows? Cree PRs ;-).
Si, después de leer esta sección, todavía no tiene ni idea sobre el código de la aplicación: Eche un vistazo [a algunos tutoriales sobre Spring boot de Baeldung](https://www.baeldung.com/spring-boot).
### Recarga automática durante el desarrollo
Para que los cambios realizados se carguen más rápido añadimos `spring-dev-tools` al proyecto Maven.
Para habilitar esto en IntelliJ automáticamente, asegúrese de que:
- En Compiler -> Automatically build project esté habilitado, y
- En Advanced settings -> Allow auto-make to start even if developed application is currently running.
También puede invocar manualmente: Build -> Recompile the file you just changed, esto también forzará la recarga de la aplicación.
### Cómo añadir un Challenge
Siga los pasos a continuación para añadir un challenge:
1. Primero asegúrese de que tiene un [Issue](https://github.com/OWASP/wrongsecrets/issues) reportado para el cual realmente se desea un challenge.
2. Añada el nuevo challenge en la carpeta `org.owasp.wrongsecrets.challenges`. Asegúrese de añadir una explicación en `src/main/resources/explanations` y referenciarla desde su nueva clase Challenge.
3. Añada pruebas unitarias, de integración y de UI según corresponda para mostrar que su challenge funciona.
4. No olvide configurar el challenge en `src/main/resources/wrong-secrets-configuration.yaml`
5. Revise la [guía CONTRIBUTING](https://github.com/owasp/wrongsecrets/blob/master/CONTRIBUTING.md) para configurar su entorno de contribución y escribir buenos mensajes de commit.
Para más detalles consulte [_Contributing.md_](https://github.com/OWASP/wrongsecrets/blob/master/CONTRIBUTING.md#how-to-add-a-challenge).
Si desea mover challenges de nube existentes a otra nube: extienda las clases Challenge en el paquete `org.owasp.wrongsecrets.challenges.cloud` y asegúrese de añadir el Terraform requerido en una carpeta con la nube separada identificada. Asegúrese de que el entorno se añade a `org.owasp.wrongsecrets.RuntimeEnvironment`.
Colabore con los demás en el proyecto para conseguir que su contenedor se ejecute y así poder probar en la cuenta de la nube.
### Pruebas locales
Si ha realizado algunos cambios en el código base o ha añadido un nuevo challenge y le gustaría ver exactamente cómo se verá el contenedor después del merge para probarlo, tenemos un script que hace esto muy fácil. Siga los pasos a continuación:
1. Asegúrese de tener bash instalado y abierto.
2. Navegue a .github/scripts.
3. Ejecute el script docker-create `bash docker-create.sh`.
- Nota: ¿Quiere ejecutar esto en su minikube? entonces primero ejecute `eval $(minikube docker-env)`.
4. Siga las instrucciones que se le den, es posible que necesite instalar/cambiar paquetes.
5. Ejecute el contenedor recién creado:
- para ejecutarlo localmente: `docker run -p 8080:8080 -p 8090:8090 jeroenwillemsen/wrongsecrets:local-test-no-vault`
- para ejecutarlo en su minikube: use el contenedor `jeroenwillemsen/wrongsecrets:local-test-k8s-vault` en su definición de deployment.
- para ejecutarlo con Vault en su minikube: use el contenedor `jeroenwillemsen/wrongsecrets:local-test-local-vault` en su definición de deployment.
### Pruebas automatizadas locales
Actualmente tenemos 2 suites de pruebas diferentes, ambas lanzadas con `./mvnw test`.
- Una suite de pruebas junit normal de pruebas unitarias y de integración, ubicada en la [carpeta `test/java`](https://github.com/owasp/wrongsecrets/blob/master/src/test/java) con la salida almacenada en el directorio target predeterminado.
- Una suite de pruebas cypress, integrada mediante una prueba junit, ubicada en la [carpeta `test/e2e`](https://github.com/owasp/wrongsecrets/blob/master/src/test/e2e) con la salida almacenada en [`target/test-classes/e2e/cypress/reports/`](https://github.com/owasp/wrongsecrets/blob/master/target/test-classes/e2e/cypress/reports). Consulte el [readme de cypress](https://github.com/owasp/wrongsecrets/blob/master/src/test/e2e/cypress/README.md) para más detalles.
Nota: Puede hacer un ciclo completo de limpieza, compilación y pruebas con `./mvnw clean install`.
## 🔧 Solución de problemas
### Problemas comunes
**Problemas con Docker:**
- **Puerto ya en uso**: Cambie el mapeo de puertos: `docker run -p 8081:8080 -p 8091:8090 jeroenwillemsen/wrongsecrets:latest-no-vault`
- **Docker no encontrado**: Asegúrese de que Docker esté instalado y en ejecución
- **Permiso denegado**: En Linux, es posible que necesite añadir su usuario al grupo docker
**Problemas con el navegador:**
- **No se puede acceder a localhost:8080**: Compruebe si el contenedor Docker está en ejecución con `docker ps`
- **Los challenges no se cargan**: Limpie la caché del navegador o pruebe el modo incógnito
**Problemas con Kubernetes:**
- **Minikube no arranca**: Pruebe `minikube delete` y luego `minikube start`
- **Pods atascados en pending**: Compruebe los recursos con `kubectl describe pod <pod-name>`
**¿Necesita ayuda?**
- Consulte nuestros [GitHub Issues](https://github.com/OWASP/wrongsecrets/issues)
- Únase a nosotros en [OWASP Slack](https://owasp.slack.com/archives/C02KQ7D9XHR)
- Revise la sección [Support](#support)
## ¿Quiere jugar, pero no tiene permitido instalar las herramientas?
Si quiere jugar los challenges, pero no puede instalar herramientas como keepass, Radare, etc. Pero tiene permitido ejecutar contenedores Docker, pruebe lo siguiente:```shell
docker run -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock jeroenwillemsen/wrongsecrets-desktop:latest
```
o usa algo más configurable:```shell
docker run -d \
--name=webtop \
--security-opt seccomp=unconfined \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-e SUBFOLDER=/ \
-e KEYBOARD=en-us-qwerty \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
--shm-size="2gb" \
--restart unless-stopped \
jeroenwillemsen/wrongsecrets-desktop:latest
```
Y luego en [http://localhost:3000](http://localhost:3000).
Nota: ten cuidado al intentar desplegar el contenedor `jeroenwillemsen/wrongsecrets-desktop` en Heroku ;-).
## Docker en macOS con M1 y Colima (¡Experimental!)
NOTA: No damos soporte oficial a Colima, ya que podemos constatar que los runners de Github tienen multitud de problemas con él.
Si no puedes cambiar a Docker Desktop/Podman y quieres usar Colima con Apple Silicon M1
para ejecutar la imagen Docker `jeroenwillemsen/wrongsecrets`, prueba una de estas opciones:
- desactivar Colima (`colima stop`)
- cambiar el contexto de Docker (`docker --context desktop-linux run -p 8080:8080 jeroenwillemsen/wrongsecrets:latest-no-vault`)
- ejecutar Colima con 1 CPU (`colima start -m 8 -c 1 --arch x86_64`)
## ¿Quieres desactivar retos en tu propia release?
Si quieres ejecutar WrongSecrets pero sin ciertos retos que no quieres presentar a otros: por favor, lee esta sección.
*_NOTA_* Ten en cuenta que no ofrecemos ningún soporte para tu fork cuando sigas el proceso que se describe a continuación. Por favor, comprende que la licencia y los derechos de autor de la aplicación original permanecen intactos para tu Fork.
Requisitos:
- Tener instalado el JDK de Java 26;
- Tener una cuenta en un registro al que puedas subir tu variante del contenedor WrongSecrets;
Estos son los pasos que debes seguir para crear tu propia release de WrongSecrets con ciertos retos desactivados:
1. Haz un fork del repositorio.
2. En `src/main/resources/wrong-secrets-configuration.yaml` elimina la referencia al reto que ya no quieres tener en tu fork.
3. En la raíz del proyecto ejecuta `./mvnw clean install`
4. Ahora construye la imagen Docker para el objetivo que elijas:```sh
docker buildx create --name mybuilder
docker buildx use mybuilder
docker buildx build --platform linux/amd64,linux/arm64 -t <registry/container-name>:<yourtag>-no-vault --build-arg "argBasedPassword='this is on your command line'" --build-arg "PORT=8081" --build-arg "argBasedVersion=<yourtag>" --build-arg "spring_profile=without-vault" --push .
docker buildx build --platform linux/amd64,linux/arm64 -t <registry/container-name>:<yourtag>-kubernetes-vault --build-arg "argBasedPassword='this is on your command line'" --build-arg "PORT=8081" --build-arg "argBasedVersion=<yourtag>" --build-arg "spring_profile=kubernetes-vault" --push .
```
## Lecturas adicionales sobre gestión de secretos
¿Quieres aprender más? Consulta las fuentes a continuación:
- [Blog: 10 Pointers on Secrets Management](https://dev.to/commjoen/secure-deployment-10-pointers-on-secrets-management-187j)
- [OWASP SAMM on Secret Management](https://owaspsamm.org/model/implementation/secure-deployment/stream-b/)
- [The secret detection topic at Github](https://github.com/topics/secrets-detection)
- [OWASP Secretsmanagement Cheatsheet](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Secrets_Management_Cheat_Sheet.md)
- [OpenCRE on secrets management](https://www.opencre.org/cre/223-780?register=true&type=tool&tool_type=training&tags=secrets,training&description=With%20this%20app%2C%20we%20have%20packed%20various%20ways%20of%20how%20to%20not%20store%20your%20secrets.%20These%20can%20help%20you%20to%20realize%20whether%20your%20secret%20management%20is%20ok.%20The%20challenge%20is%20to%20find%20all%20the%20different%20secrets%20by%20means%20of%20various%20tools%20and%20techniques.%20Can%20you%20solve%20all%20the%2067%20challenges%3F&trk=flagship-messaging-web&messageThreadUrn=urn:li:messagingThread:2-YmRkNjRkZTMtNjRlYS00OWNiLWI2YmUtMDYwNzY3ZjI1MDcyXzAxMg==&lipi=urn:li:page:d_flagship3_feed;J58Sgd80TdanpKWFMH6z+w==)