2.0 KiB
2.0 KiB
Security Traps
User
- Container corre como root por defecto — security scanners lo flaggean
USERdirective después deRUNque necesita root = build falla- User en container con UID 1000 = puede ser otro user en host — confuso
--useren runtime override USER de Dockerfile — pero permisos de archivos quedan
Secrets
ENV SECRET=xvisible endocker historyydocker inspectARGpara secrets también visible en history — no es seguroCOPY secrets.txtbaked en layer — aunque lo borres después, está en layer anterior--env-fileseguro en runtime pero archivo debe protegerse en host
BuildKit Secrets
RUN --mount=type=secretno 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_ADMINcasi tan malo como privileged — evitar-v /:/hostmonta root del host = game over si container comprometido--pid=hostpermite 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
latesttag puede ser hijacked — usar digest para images críticas- Dependencias descargadas en build pueden cambiar — lock files + verified mirrors