docs(security): correzione severita finding 1 + chiusura punti Coolify

CORREZIONE: la password Postgres trovata in git NON era attiva. La verifica
iniziale si limitava a constatare che la stringa comparisse in .env.local e ne
deduceva che fosse quella viva. Il confronto del verifier SCRAM-SHA-256 di
pg_authid contro i due candidati mostra che quella committata non combacia:
era gia stata ruotata. La voce DATABASE_URL porta 5432 di .env.local e' stale.
Severita' reale: BASSA, non CRITICA. Nessuna rotazione necessaria.

Chiusi via API Coolify: INTERNAL_SECRET creata (le route /api/internal/*
rispondono ora 403 invece di 404, oracolo di enumerazione token chiuso) e
ADMIN_PASSWORD portata da 15 a 32 caratteri. Redeploy verificato.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-28 11:06:48 +02:00
parent bcff4aad48
commit fb6ab92fd0
2 changed files with 20 additions and 4 deletions
+17 -1
View File
@@ -9,7 +9,23 @@ configurazione di deploy e superficie di rete in produzione.
--- ---
## 1. CRITICO — Password Postgres di produzione committata in chiaro ## 1. ~~CRITICO~~ → BASSO — Password Postgres **storica** committata in chiaro
> **CORREZIONE (2026-07-28).** La prima stesura di questa sezione dichiarava la credenziale
> "ancora attiva". **Era sbagliato.** La verifica iniziale si limitava a constatare che la
> stringa comparisse anche in `.env.local`, e ne deduceva che fosse quella viva.
>
> Verifica corretta, fatta poi: confronto del **verifier SCRAM-SHA-256** di `pg_authid` contro
> i due candidati. La password committata **non** combacia; quella in uso è la password da 48
> caratteri configurata su Coolify. Era già stata ruotata in passato.
>
> La voce `DATABASE_URL` porta 5432 di `.env.local` è **stale** — residuo storico, non la
> connessione di produzione (che passa dall'hostname interno del container).
>
> **Severità reale: BASSA.** Credenziale storica in un repo privato, già morta. Igiene, non
> incidente. Nessuna rotazione urgente. Resta utile ripulire `.env.local` dalla voce stale.
>
> Il resto della sezione è conservato come traccia di ciò che è stato trovato.
**Dove:** **Dove:**
- `.planning/phases/07-unified-service-catalog/07-01-SUMMARY.md:188,195,202` - `.planning/phases/07-unified-service-catalog/07-01-SUMMARY.md:188,195,202`
+3 -3
View File
@@ -10,10 +10,10 @@ Restano aperti solo i punti che richiedono accesso a Coolify o una tua decisione
| # | Intervento | Stato | | # | Intervento | Stato |
|---|---|---| |---|---|---|
| 0.1 | Ruotare password Postgres prod | **richiede te** (no accesso Coolify) | | 0.1 | Ruotare password Postgres prod | **non serve** — la password leakata risulta già morta (vedi correzione in INFRA §1) |
| 0.1b | Espurgare la password dai due `07-01-SUMMARY.md` | ✅ fatto | | 0.1b | Espurgare la password dai due `07-01-SUMMARY.md` | ✅ fatto |
| 0.2 | `INTERNAL_SECRET` in Coolify | **richiede te** | | 0.2 | `INTERNAL_SECRET` in Coolify | ✅ fatto 2026-07-28 — le route interne ora danno 403 |
| 0.3 | Allungare `ADMIN_PASSWORD` | **richiede te** | | 0.3 | Allungare `ADMIN_PASSWORD` | ✅ fatto 2026-07-28 — 15 → 32 caratteri |
| 1.1 | Next → 16.2.12, next-auth → 4.24.15 | ✅ fatto | | 1.1 | Next → 16.2.12, next-auth → 4.24.15 | ✅ fatto |
| 1.2 | Secondo gate di autenticazione admin | ✅ fatto | | 1.2 | Secondo gate di autenticazione admin | ✅ fatto |
| 1.3 | Eliminare `src/lib/quote-actions.ts` | ✅ fatto | | 1.3 | Eliminare `src/lib/quote-actions.ts` | ✅ fatto |