Class: feature
Added
- Frontend TLS (client <-> pooler): set
PGAGROAL_TLS=onwith
PGAGROAL_TLS_CERT_FILE/PGAGROAL_TLS_KEY_FILE(andPGAGROAL_TLS_CA_FILE
for mutual TLS) to encrypt client connections. The entrypoint installs the key
at mode0600as pgagroal requires and fails closed if the material is missing
or the switch value is a typo. The Helm chart exposes this viatls.enabled+
tls.existingSecret(keystls.crt/tls.key, andca.crtwhen
tls.mutualTLS), and validates the values. Onlyverify-ca
client-certificate checking is available — the pgagroal 2.1.0 pooler has no
tls_cert_auth_modekey, soverify-fullis rejected. No new port. Backend TLS
(pooler -> PostgreSQL) remains out of scope — upstream marks it experimental and
it disables pooling (#103, hardened #109).
Security
- Reject HBA source-address injection and invalid CIDRs:
build_hba_linesaccepts
eachPGAGROAL_HBA_SOURCEentry only if it isall,0.0.0.0/0, or a valid IPv4
CIDR with octets 0–255 and an octet-aligned mask (/8,16,24,32), dropping any
other value with a%q-escaped warning; entries are split on commas only
(preserving embedded newlines soall\ntrust #is rejected whole rather than
truncated toall, #111) and never subject to*filename globbing. Previously a
crafted value (e.g.all trust #) was
inserted verbatim and could comment out thescram-sha-256method, leaving a
no-authtrustrule, and out-of-range octets (999.999.999.999/24) were passed
to pgagroal. This enforces the hba-source-restriction spec'sscram-sha-256-only
invariant for every input (#105, hardened #109).
Supply chain
- Image (Docker Hub):
docker.io/elevarq/pgagroal:1.4.5 - Image (GHCR):
ghcr.io/elevarq/pgagroal:1.4.5 - Digest:
sha256:36017745ebd98816c9adac5868965f32b06f72a4049b5fb107cd5bef629fbfcb - Architectures: linux/amd64, linux/arm64
- Signed with cosign (keyless, GitHub OIDC)
- SBOM and SLSA provenance attached as OCI attestations
Verify signature and attestations:
IMAGE=docker.io/elevarq/pgagroal:1.4.5 # or ghcr.io/elevarq/pgagroal:1.4.5
cosign verify "$IMAGE" \
--certificate-identity-regexp='https://github.com/Elevarq/' \
--certificate-oidc-issuer='https://token.actions.githubusercontent.com'
cosign verify-attestation --type spdxjson "$IMAGE" # SBOM
cosign verify-attestation --type slsaprovenance "$IMAGE" # provenanceFull verification guide:
https://github.com/Elevarq/pgAgroal/blob/main/docs/security/supply-chain-and-release-security.md