Skip to content

Flatten the image so the base layer gosu binary is no longer shipped [skip deploy] #no-deploy - #10

Open
SebastianLopezO wants to merge 1 commit into
mainfrom
security/snyk/gosu-symlink-base-layer
Open

SebastianLopezO wants to merge 1 commit into
mainfrom
security/snyk/gosu-symlink-base-layer

Conversation

@SebastianLopezO

Copy link
Copy Markdown
Member

Caso

Análisis

  • Riesgo real bajo: el binario viejo no se ejecuta (el entrypoint llega a su-exec) y gosu no usa net/http ni
    html/template. Lo que sí pasaba: la imagen distribuía un ejecutable vulnerable que cualquiera puede extraer, y
    117 alertas falsas para el contexto tapaban las reales y dejaban sin sentido el umbral del escáner.
  • Se probó copiar su-exec como archivo regular sobre /usr/local/bin/gosu: el reescaneo siguió en 120 hallazgos.
    Por eso el cambio va a la raíz y no solo a la ruta.

Cambio

  • Etapa base: lo mismo que antes (apk upgrade, fuera los dos binarios de Timescale, su-exec como gosu, esquema
    y scripts), con install en vez de ln.
  • Etapa final FROM scratch + COPY --from=base / /: una sola capa con el sistema de archivos ya ajustado. Se
    declaran de nuevo ENV, VOLUME, STOPSIGNAL, EXPOSE, ENTRYPOINT y CMD de la imagen base, que scratch no
    trae (se copiaron de docker image inspect).

Verificación

  • snyk container test smartpot-db-postgre --file=Dockerfile: de 120 hallazgos (4 críticos, gosu) a «no vulnerable
    paths found» en 121 dependencias.
  • Imagen: de 23 capas y 762 MB a 1 capa y 629 MB. Permisos de /var/lib/postgresql y /var/run/postgresql
    idénticos a la imagen anterior.
  • tests/validate.sh con raíz de solo lectura y cap-drop ALL: 16/16 sin datos demo y 19/19 con datos demo.
  • TimescaleDB sigue en 2.17.2: no hace falta migrar datos.

…[skip deploy] #no-deploy

Replacing gosu with a symlink to su-exec only hid the Go binary at runtime: the original file stayed in the TimescaleDB base layer and Snyk Container kept reporting its stdlib 1.18.2 (120 issues, 4 critical). The final stage now copies the prepared filesystem onto scratch and restates the base image configuration.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant