Verificar una release¶
Cómo comprobar que los binarios, la imagen y el chart que instalas son los que publicó Picaporte Labs, y dónde está la lista de lo que lleva cada uno (su SBOM).
Qué trae cada release¶
Toda release posterior a la 0.43.0 va firmada y trae sus SBOM:
kubelatch_<versión>_checksums.txt, el SHA-256 de cada.tar.gzy cada SBOM de la release, con su firma enkubelatch_<versión>_checksums.txt.sigstore.json. Una sola firma cubre todos los ficheros, a través de sus sumas.kubelatch-server_<versión>_sbom.cdx.jsonykubelatch_<versión>_sbom.cdx.json, las SBOM del servidor y de la CLI en CycloneDX 1.6: los módulos de Go que lleva cada binario y, en el servidor, los paquetes npm de la interfaz web que sirve, sin las dependencias de desarrollo. Todas las plataformas llevan los mismos módulos, así que hay una SBOM por binario.- La imagen
ghcr.io/picaportelabs/kubelatchy el chartoci://ghcr.io/picaportelabs/charts/kubelatch, firmados. La imagen lleva además la SBOM del servidor como una atestación firmada.
La 0.43.0 y las anteriores no traen firmas ni SBOM: comprueba sus descargas solo con el fichero de sumas.
La clave pública¶
Las releases se firman con esta clave. Guárdala como cosign.pub:
cat > cosign.pub <<'EOF'
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIYpTAe7hLuZkNNSYfVPSxIrBSKWc
R10WGKhT2Umk9EjK1E7BafB2BqlUo6B8dn127mgMnp9jwdc6VpzX9SOg9A==
-----END PUBLIC KEY-----
EOF
Guarda esa copia junto a tus pipelines y comprueba contra ella, en lugar de volver a bajar la clave del mismo sitio del que descargas la release: quien pudiera cambiar una release allí podría cambiar también la clave. Es la misma que cosign.pub, en la raíz del repositorio público, para compararlas una vez. Cada firma queda además en Rekor, el registro público de transparencia de Sigstore.
Las comprobaciones de abajo necesitan cosign 3 o posterior.
Comprobar los binarios¶
Con cosign.pub guardado, descarga el fichero de sumas y su firma junto a los .tar.gz que descargaste, comprueba la firma y después cada uno contra las sumas:
VERSION=0.44.0 # una release posterior a la 0.43.0, sin la v
REL="https://github.com/picaportelabs/kubelatch/releases/download/v$VERSION"
curl -fsSLO "$REL/kubelatch_${VERSION}_checksums.txt"
curl -fsSLO "$REL/kubelatch_${VERSION}_checksums.txt.sigstore.json"
cosign verify-blob --key cosign.pub \
--bundle "kubelatch_${VERSION}_checksums.txt.sigstore.json" "kubelatch_${VERSION}_checksums.txt"
sha256sum --ignore-missing -c "kubelatch_${VERSION}_checksums.txt"
Verified OK quiere decir que el fichero de sumas es el que se firmó, y sha256sum escribe después … OK por cada fichero que tengas. En macOS, usa shasum -a 256 --ignore-missing -c en vez de sha256sum.
En una máquina sin acceso a internet, añade --insecure-ignore-tlog=true a cosign verify-blob: comprueba la firma con la clave y se salta la consulta a Rekor, que necesita la red.
Comprobar la imagen y el chart¶
cosign verify --key cosign.pub "ghcr.io/picaportelabs/kubelatch:$VERSION"
cosign verify --key cosign.pub "ghcr.io/picaportelabs/charts/kubelatch:$VERSION"
Cada comando escribe el digest firmado (docker-manifest-digest) y falla si la etiqueta apunta a algo que kubelatch no firmó. La firma de la imagen cubre su índice, con las dos plataformas.
Leer la SBOM¶
Las SBOM de los binarios son ficheros de la release, cubiertos por las sumas firmadas. La que lleva la imagen es la del servidor, porque la imagen solo añade kubelatch-server a su base, gcr.io/distroless/static-debian12. Para sacarla de la imagen, con su firma comprobada:
cosign verify-attestation --key cosign.pub --type cyclonedx "ghcr.io/picaportelabs/kubelatch:$VERSION" \
| head -n 1 | jq -r .payload | base64 -d | jq .predicate > "kubelatch-server_${VERSION}_sbom.cdx.json"
La lee cualquier herramienta que entienda CycloneDX: Dependency-Track, Grype o Trivy, por ejemplo.
Si una comprobación falla¶
- Falla
cosign verify-blobocosign verify: lo que descargaste no es lo que se publicó, o la clave no es la de esta página. No instales nada, descárgalo otra vez de las releases y, si vuelve a fallar, escribe asecurity@kubelatch.com. sha256sumescribeFAILEDen un.tar.gz: ese no es el publicado; descárgalo otra vez.no signatures found: en la 0.43.0 o anteriores es lo esperado, porque no llevan firma. En una release posterior, no instales nada y haz lo de arriba.