ci / lint-test-leaks (pull_request) Canceled after 0s
Nueva regla del operador (2026-10-31): los ficheros de secretos solo se inspeccionan con herramientas que no muestran valores (jq keys, grep -c, stat). Prohibido cat/grep -r sobre .env y volcar errores con DSN. - tests/test_no_credential_patterns.py: 3 tests — DSN con credencial literal fuera de placeholders, nsec bech32 versionado, tokens hex de 64 chars fuera de tests/. - scripts/check-credential-leaks.sh: hook que falla si journald reciente contiene DSN con contraseña o nsec (redactando el valor en la salida). Sin timer propio (no autorizado); ejecutar manual o desde cron del operador. Contexto: la rotación del rol hardcap y el DSN filtrado a journald por el test del gate (corregido; la credencial filtrada ya está rotada).
14 lines
893 B
Bash
Executable File
14 lines
893 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# check-credential-leaks — falla si journald reciente contiene patrones de credencial.
|
|
# Regla permanente: los secretos jamás en logs. Ejecutar manualmente o desde cron
|
|
# (sin timer propio: no fue autorizado).
|
|
set -euo pipefail
|
|
SINCE="${1:-2 hours ago}"
|
|
HITS=$(journalctl --since "$SINCE" --no-pager 2>/dev/null | grep -cE "(postgres|postgresql)://[A-Za-z0-9_]+:[^@[:space:]]{8,}@|nsec1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{50,}" || true)
|
|
if [ "$HITS" -gt 0 ]; then
|
|
echo "ALERTA: $HITS líneas de journald (desde $SINCE) contienen patrones de credencial" >&2
|
|
journalctl --since "$SINCE" --no-pager 2>/dev/null | grep -nE "(postgres|postgresql)://[A-Za-z0-9_]+:[^@[:space:]]{8,}@|nsec1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{50,}" | sed -E "s#(://[A-Za-z0-9_]+:)[^@[:space:]]{8,}@#\1***@#" | head -5
|
|
exit 1
|
|
fi
|
|
echo "OK: sin patrones de credencial en journald desde $SINCE"
|