diff --git a/README.md b/README.md index 69717de..1162314 100644 --- a/README.md +++ b/README.md @@ -812,6 +812,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 @@ -906,7 +913,7 @@ ancora rientrati compaiono nel dettaglio come "in corso". | 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 | diff --git a/docker/php/php.ini b/docker/php/php.ini index 2c80de8..67f44e9 100644 --- a/docker/php/php.ini +++ b/docker/php/php.ini @@ -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 diff --git a/tests/Unit/VersionePhpTest.php b/tests/Unit/VersionePhpTest.php index 40a157b..91a4c30 100644 --- a/tests/Unit/VersionePhpTest.php +++ b/tests/Unit/VersionePhpTest.php @@ -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);