# ============================================================ # lab-api-vuln — una API deliberadamente vulnerable # ------------------------------------------------------------ # La usan las lecciones f06-authz-api, f06-validacion y # f06-abuso. Tres fallos de diseno para estudiar y corregir: # - mass assignment en POST /registro (escalar a admin) # - sin validacion de esquema ni de salida (enumeracion) # - sin rate limiting, firma ni idempotencia (replay) # # host # └── 127.0.0.1:8096 ──► api ──┐ # │ api_interna (internal: true) # ▼ # cliente # # El cliente vive en api_interna, que es internal: true: no tiene # salida a internet. La api tambien esta en api_interna, y ademas # en api_borde (un bridge normal) solo para que el puerto publicado # llegue desde el host. Lo unico que asoma al host es el 8096, y # solo en 127.0.0.1: nadie mas en tu red lo ve. # # docker compose up -d --build levantar # docker compose down -v destruir # ============================================================ name: lab-api-vuln networks: api_borde: driver: bridge api_interna: driver: bridge internal: true services: # --- la API vulnerable ------------------------------------ # Solo biblioteca estandar de Python. Estado en memoria: se # restablece con 'docker compose restart api'. api: build: ./api image: labapivuln-api container_name: labapivuln-api ports: - "127.0.0.1:8096:8000" networks: - api_borde - api_interna restart: unless-stopped # --- puesto de trabajo ------------------------------------ # alpine con curl y jq para atacar la API desde dentro de la # misma red. Tambien puedes atacarla desde el host contra # 127.0.0.1:8096: es la misma API. cliente: build: ./herramientas image: labapivuln-herramientas container_name: labapivuln-cliente command: ["sleep", "infinity"] networks: - api_interna restart: unless-stopped