Saltar al contenido principal

Menú de comandos

Ve a una página o busca en el catálogo

Herramientas y scripts de IA

Comprobación de seguridad para Dev Container

Revisa devcontainer.json antes de que nadie lo abra: contenedores privilegiados, comandos en el host que canalizan curl a bash, secretos en env, ~/.ssh y ~/.aws montados, el socket de Docker, Features sin versión fijada, usuarios root, puertos abiertos y acceso amplio de Codespaces.

$5.00

Qué recibes: 1 archivo · 36.44 KB · ZIP

Ver opciones de compra

Descripción del producto

"initializeCommand": "curl -fsSL https://... | bash" no se ejecuta en el contenedor: se ejecuta en tu propia máquina, cada vez que alguien abre el repositorio en un dev container. Y un montaje de ${localEnv:HOME}/.ssh entrega tus claves privadas a cada script de instalación de paquetes que corra dentro. Esta skill detecta esos riesgos y otros doce de los dev containers antes de que alguien abra la carpeta, y te indica cómo corregir cada uno.

Tu agente ejecuta un escáner sobre .devcontainer/devcontainer.json, .devcontainer.json y las configuraciones por carpeta dentro de .devcontainer/ (VS Code Dev Containers, GitHub Codespaces, la devcontainer CLI). Lee JSON con comentarios y comas finales, conoce las variables ${localEnv:NAME} y ${containerEnv:NAME}, las formas de cadena, array y objeto de los comandos de ciclo de vida, las cadenas y los objetos de montaje, las opciones de docker run en runArgs, sabe que runArgs, appPort y workspaceMount no se aplican a las configuraciones de Docker Compose, que los valores numéricos de appPort se quedan en localhost y que un devcontainer-lock.json fija las Features. Las contraseñas de desarrollo local (postgres, devpass, rootpass), los ajustes relativos a un secreto (PASSWORD_HASHER) y los marcadores de posición (your-token, django-insecure-...) no se notifican como secretos. Nunca ejecuta docker, la devcontainer CLI ni ningún comando que encuentre. Devuelve BLOCK, REVIEW o NOT FLAGGED, con el archivo, la línea, el motivo y un enfoque más seguro. Los secretos nunca se muestran.

Qué comprueba

BLOCK (corregir antes de publicar)

  • D01: un initializeCommand (se ejecuta en el host) que descarga un script y lo ejecuta: curl | bash, bash <(curl ...), iwr | iex
  • D02: contraseñas, tokens y claves escritos en containerEnv, remoteEnv, argumentos de compilación, runArgs -e, comandos de ciclo de vida (también docker login -p, az login -p, sqlcmd -P y un literal pasado con echo a docker login --password-stdin), valores predeterminados de ${localEnv:NAME:default}, la propiedad secrets o cualquier ajuste (nombres de secretos, contraseñas en URL, formatos de token conocidos)
  • D03: tu carpeta personal, ~/.ssh, ~/.aws, inicios de sesión de CLI de nube y de Docker, GnuPG, .npmrc, .netrc y otros archivos de credenciales, la carpeta raíz del host o /etc montados en el contenedor

REVIEW (revisar antes del lanzamiento)

  • D11: contenedores privilegiados ("privileged": true, --privileged en runArgs o la Feature docker-in-docker, que lo activa)
  • D12: el socket de Docker o Podman montado, o la Feature docker-outside-of-docker, que lo monta
  • D13: onCreateCommand, postCreateCommand y los demás comandos de configuración que canalizan una descarga a un shell
  • D14: imágenes sin etiqueta o con :latest, y Features sin versión, con :latest o indicadas como URL de un tarball (salvo que un devcontainer-lock.json las fije)
  • D15: capabilities más allá de las predeterminadas de Docker (SYS_PTRACE solo está bien), dispositivos del host y seccomp, AppArmor o SELinux desactivados (la configuración de depurador SYS_PTRACE más seccomp=unconfined no se notifica)
  • D16: espacios de nombres del host de red, PID, IPC, UTS, usuario o cgroup
  • D17: remoteUser, containerUser o runArgs --user con valor root
  • D18: un initializeCommand que ejecuta un programa o script en el host (mkdir, touch, cp, docker pull y pasos sencillos similares están bien)
  • D19: ~/.kube, ~/.minikube, /proc, /sys, /dev, /var/lib/docker, /run, /boot o /lib/modules montados desde el host
  • D20: puertos publicados en todas las interfaces de red (runArgs -p o -P, cadenas de appPort sin 127.0.0.1)
  • D21: permisos de repositorio de Codespaces con write-all, acceso de escritura sobre owner/* o escritura en workflows

Qué incluye

  • El escáner (Python 3.9+, solo biblioteca estándar)
  • Una guía de reglas con el motivo, el enfoque más seguro y la fuente oficial de cada regla
  • Un proyecto de ejemplo arriesgado y otro seguro (un dev container para una API y un dev container con herramientas de clúster), y el informe real que produce el escáner sobre el arriesgado

Límites

Solo lee archivos devcontainer.json: no se leen el Dockerfile, los archivos de Docker Compose indicados en dockerComposeFile, los scripts de instalación de las Features, los ajustes que las imágenes y Features añaden mediante sus propios metadatos (salvo las Features de Docker de D11 y D12) ni los scripts que llaman los comandos. Los comandos se comparan como texto, por lo que un script descargado a un archivo y ejecutado en un paso posterior no se notifica. Las etiquetas de versión mayor como :1 cuentan como fijadas aunque el editor pueda moverlas; solo un digest o un devcontainer-lock.json fija una Feature con exactitud. El modo privilegiado y el socket de Docker son REVIEW, no BLOCK: ambos entregan el host de Docker al código del contenedor, pero ambos son formas deliberadas y documentadas de ejecutar Docker en un dev container (las plantillas oficiales docker-in-docker y docker-outside-of-docker los usan), así que el modo privilegiado recibe el mismo nivel tanto si está escrito explícitamente como si lo activa la Feature. Montar toda la carpeta personal (un ejemplo de la documentación de VS Code) es BLOCK porque cualquier clave que contenga se vuelve legible en el contenedor. NOT FLAGGED no es una garantía.

Contenido

Un archivo ZIP con 11 archivos: SKILL.md, el escáner en scripts/ (4 archivos Python), references/rules.md (cada regla con su motivo y un enfoque más seguro) y examples/ (4 archivos de ejemplo más report.md, la salida real del escáner sobre el ejemplo arriesgado).

Cómo usarlo: esta es una skill para agentes: una carpeta con un archivo SKILL.md y scripts de Python que un agente de programación con IA como Claude Code, Cursor o Codex CLI puede ejecutar. Descomprímela en la carpeta de skills de tu agente (para Claude Code: ~/.claude/skills/) y luego pide a tu agente que revise tu proyecto. Los scripts también funcionan por sí solos con Python 3.9 o posterior, sin nada que instalar. Solo leen tus archivos: sin acceso a la red, y no se envía nada a ningún sitio.

Qué recibes

1 archivo · 36.44 KB

  • devcontainer-safety-check-1.0.0.zipZIP · 36.44 KB
LicenciaUso comercial permitido
Revisión del paqueteSuperada

Getly abrió los archivos subidos y no encontró nada que impida abrirlos. No es un análisis antivirus ni una valoración de calidad.

Publicado12 nov 2026
Tamaño del archivo36.44 KB
Formato de archivoZIP
Versiónv1.0

Etiquetas

devcontainercodespacesdockersecuritydevopsai agent skill
R
RR HH

Preguntas frecuentes

¿Tengo acceso al instante?

Sí. Es un producto digital: puedes descargarlo justo después del pago, directamente desde tu biblioteca.

¿Puedo usarlo en proyectos comerciales?

Sí. Se permite el uso comercial: úsalo en tu propio negocio y en cosas que vendas. No puedes revender ni redistribuir el archivo en sí.

¿Cuál es vuestra política de reembolso?

Puedes pedir un reembolso dentro de 30 días. Si algo no va bien, solicítalo desde tu pedido y el equipo de Getly lo revisa.

¿Qué formatos y tamaños de archivo recibiré?

Descargarás 1 archivo - ZIP - 36.44 KB en total.

¿Recibo actualizaciones gratis?

Sí: cuando el vendedor publica una versión nueva, puedes volver a descargar los archivos más recientes desde tu biblioteca sin coste extra. Mira el registro de cambios para ver las últimas actualizaciones.

Precio

$5.00