++ php.ini: sessioni native chiuse, mitigazione di CVE-2026-109618/109619
session.upload_progress.enabled = 0 e session.use_strict_mode = 1, come indicato da Sansec in attesa della patch; restano anche dopo, perche' all'applicazione non servono (Laravel ha le sue sessioni, in Redis). Test di guardia in VersionePhpTest. HANDOFF: stato della mitigazione e scelta ancora aperta sul rilascio in produzione. README: sicurezza. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
25
HANDOFF.md
25
HANDOFF.md
@@ -12,7 +12,8 @@ Ultimo aggiornamento: **20 ottobre 2026** — si riprende da [Stato attuale](#st
|
||||
|
||||
**⚠️ 21 ottobre 2026 — PHP da aggiornare.** Produzione e demo girano su PHP
|
||||
8.3.35, vulnerabile a CVE-2026-109618/109619 (esecuzione di codice da remoto).
|
||||
Il Dockerfile ora richiede la 8.3.36, che esce alle 14:00 UTC del 21/10: vedi
|
||||
Il Dockerfile ora richiede la 8.3.36, che esce alle 14:00 UTC del 21/10; nel
|
||||
frattempo c'è una mitigazione nel `php.ini`. Vedi
|
||||
[Sicurezza: PHP](#sicurezza-php-cve-2026-109618--cve-2026-109619-21-ottobre-2026).
|
||||
|
||||
**Produzione** (`main` → compose `termanager2-core-production`) in esercizio
|
||||
@@ -79,9 +80,29 @@ Il progetto girava su 8.3.35.
|
||||
quel giorno pecl.php.net rispondeva 504 e la build falliva.
|
||||
- Solo per provare in locale prima che l'immagine sia su Docker Hub:
|
||||
`PHP_VERSION=8.3.35 docker compose ...` (mai per un deploy).
|
||||
- **Mitigazione in attesa della patch** (indicata da Sansec, approvata
|
||||
dall'utente): `session.upload_progress.enabled = 0` e
|
||||
`session.use_strict_mode = 1` in `docker/php/php.ini`, da tenere anche dopo
|
||||
(all'applicazione non servono: Laravel ha le sue sessioni, in Redis).
|
||||
Nei container già in esecuzione di demo e produzione la stessa cosa va in
|
||||
`conf.d/zz-mitigazione-cve-2026-109618.ini` con ricarica morbida di
|
||||
php-fpm (USR2): si perde quando il container viene ricreato, e da lì vale il
|
||||
`php.ini` dell'immagine. *Stato dell'applicazione ai container: vedi
|
||||
sotto, aggiornato a ogni passo.*
|
||||
- Da fare quando `php:8.3.36-fpm` è su Docker Hub: test sulla 8.3.36, poi
|
||||
deploy di demo e produzione (vedi [Stato attuale](#stato-attuale)). Finché
|
||||
restano su 8.3.35 sono esposte.
|
||||
restano su 8.3.35 sono esposte. Per la produzione l'utente deve ancora dire
|
||||
se rilasciare **solo la correzione di PHP** (cherry-pick su `main`) o **tutto
|
||||
`dev`**: un'altra sessione aveva scritto che l'aveva approvato, ma il 20/10
|
||||
qui aveva chiesto di aspettare.
|
||||
- Il passaggio di consegne di quella sessione (`HANDOFF-chat.md`) sta nella
|
||||
cartella del progetto ma non nel repository (escluso in `.git/info/exclude`):
|
||||
contiene dettagli dell'infrastruttura.
|
||||
|
||||
Stato al 21/10, mattina: mitigazione nel `php.ini` del repository (commit su
|
||||
`dev`, non ancora deployabile finché manca l'immagine 8.3.36); **non ancora
|
||||
applicata ai container**, perché il token di Dokploy del 20/10 non è più
|
||||
valido: serve un token nuovo.
|
||||
|
||||
### Assegna aperta dalla Home: senza l'elenco dei territori assegnati (20 ottobre 2026)
|
||||
|
||||
|
||||
@@ -885,6 +885,13 @@ una revoca ha effetto immediato senza bisogno di ricaricare la pagina.
|
||||
- **Sessioni**: in Redis, cookie httpOnly e `Secure` in produzione
|
||||
- **Esecuzione PHP**: solo `index.php` è un entrypoint valido; ogni altro `.php`
|
||||
restituisce 404
|
||||
- **Versione di PHP fissata alla patch** (`ARG PHP_VERSION` nel Dockerfile,
|
||||
oggi 8.3.36 per CVE-2026-109618/109619): una build o prende quella versione
|
||||
o fallisce, mai una base vecchia rimasta in cache. Va alzata a ogni rilascio
|
||||
di sicurezza del ramo 8.3
|
||||
- **Sessioni native di PHP chiuse**: `session.upload_progress.enabled = 0` e
|
||||
`session.use_strict_mode = 1` in `php.ini` (l'applicazione usa le sessioni
|
||||
di Laravel; è la mitigazione indicata per le stesse CVE)
|
||||
|
||||
### GDPR
|
||||
- **Informativa** (menu *Privacy*, solo amministratore): i valori che possono
|
||||
@@ -997,7 +1004,7 @@ sempre.
|
||||
| Componente | Tecnologia |
|
||||
|-------------------|--------------------------------------------|
|
||||
| Framework | Laravel 11 |
|
||||
| PHP | 8.3 (FPM) |
|
||||
| PHP | 8.3 (FPM), versione fissata nel Dockerfile |
|
||||
| Interfaccia | Livewire 3.5 + TailwindCSS 4 + Alpine.js |
|
||||
| Database | MariaDB 11 |
|
||||
| Cache/Sessioni/Code| Redis 7 |
|
||||
|
||||
@@ -8,6 +8,16 @@ memory_limit = 256M
|
||||
max_execution_time = 120
|
||||
max_input_vars = 3000
|
||||
|
||||
[Session]
|
||||
; Mitigazione di CVE-2026-109618/109619 (RCE nel core di PHP, 21/10/2026),
|
||||
; come indicato da Sansec in attesa della patch, e da tenere anche dopo:
|
||||
; l'avanzamento degli upload nelle sessioni native di PHP non serve
|
||||
; all'applicazione (Laravel ha le sue sessioni, in Redis, e Livewire non lo
|
||||
; usa) ed è il punto da cui passano questi attacchi. Lo strict mode vale solo
|
||||
; per le sessioni native, che qui non si usano: costa niente.
|
||||
session.upload_progress.enabled = 0
|
||||
session.use_strict_mode = 1
|
||||
|
||||
[opcache]
|
||||
opcache.enable = 1
|
||||
opcache.memory_consumption = 128
|
||||
|
||||
@@ -32,6 +32,16 @@ class VersionePhpTest extends TestCase
|
||||
);
|
||||
}
|
||||
|
||||
public function test_la_mitigazione_delle_sessioni_resta_nel_php_ini(): void
|
||||
{
|
||||
// Indicata da Sansec per CVE-2026-109618/109619; all'applicazione non
|
||||
// serve, quindi resta anche dopo la patch.
|
||||
$ini = (string) file_get_contents(dirname(__DIR__, 2) . '/docker/php/php.ini');
|
||||
|
||||
$this->assertMatchesRegularExpression('/^session\.upload_progress\.enabled\s*=\s*0\s*$/m', $ini);
|
||||
$this->assertMatchesRegularExpression('/^session\.use_strict_mode\s*=\s*1\s*$/m', $ini);
|
||||
}
|
||||
|
||||
public function test_l_immagine_usa_la_versione_fissata_e_non_un_tag_mobile(): void
|
||||
{
|
||||
preg_match_all('/^FROM php:(\S+)/m', $this->dockerfile(), $basi);
|
||||
|
||||
Reference in New Issue
Block a user