50 lines
2.0 KiB
Markdown
50 lines
2.0 KiB
Markdown
# Security Traps
|
|
|
|
## User
|
|
|
|
- Container corre como root por defecto — security scanners lo flaggean
|
|
- `USER` directive después de `RUN` que necesita root = build falla
|
|
- User en container con UID 1000 = puede ser otro user en host — confuso
|
|
- `--user` en runtime override USER de Dockerfile — pero permisos de archivos quedan
|
|
|
|
## Secrets
|
|
|
|
- `ENV SECRET=x` visible en `docker history` y `docker inspect`
|
|
- `ARG` para secrets también visible en history — no es seguro
|
|
- `COPY secrets.txt` baked en layer — aunque lo borres después, está en layer anterior
|
|
- `--env-file` seguro en runtime pero archivo debe protegerse en host
|
|
|
|
## BuildKit Secrets
|
|
|
|
- `RUN --mount=type=secret` no disponible sin DOCKER_BUILDKIT=1
|
|
- Secret mount solo disponible en ese RUN — no persiste
|
|
- Secret ID debe coincidir exacto — typo = build falla sin mensaje claro
|
|
- Secret no disponible en stages que no lo montan explícitamente
|
|
|
|
## Image Scanning
|
|
|
|
- Vulnerabilities en base image heredadas — actualizar base regularmente
|
|
- Scan en CI pero no en registry = images vulnerables en producción
|
|
- CVE "fixed" en package pero base image no actualizada = sigue vulnerable
|
|
- Distroless images difíciles de scanear — menos CVEs reportadas, no menos bugs
|
|
|
|
## Runtime
|
|
|
|
- `--privileged` = acceso completo a host devices, kernel modules, etc.
|
|
- `--cap-add SYS_ADMIN` casi tan malo como privileged — evitar
|
|
- `-v /:/host` monta root del host = game over si container comprometido
|
|
- `--pid=host` permite ver/kill procesos del host desde container
|
|
|
|
## Network
|
|
|
|
- Container en bridge network puede acceder a metadata service (169.254.x.x)
|
|
- Sin `--network=none`, container tiene acceso a red por defecto
|
|
- Published ports sin firewall = público a internet
|
|
- Container puede hacer requests a otros containers en misma network — no isolation
|
|
|
|
## Supply Chain
|
|
|
|
- Base image de registry público puede ser maliciosa — verificar publisher
|
|
- `latest` tag puede ser hijacked — usar digest para images críticas
|
|
- Dependencias descargadas en build pueden cambiar — lock files + verified mirrors
|