++ 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:
@@ -812,6 +812,13 @@ una revoca ha effetto immediato senza bisogno di ricaricare la pagina.
|
|||||||
- **Sessioni**: in Redis, cookie httpOnly e `Secure` in produzione
|
- **Sessioni**: in Redis, cookie httpOnly e `Secure` in produzione
|
||||||
- **Esecuzione PHP**: solo `index.php` è un entrypoint valido; ogni altro `.php`
|
- **Esecuzione PHP**: solo `index.php` è un entrypoint valido; ogni altro `.php`
|
||||||
restituisce 404
|
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
|
### GDPR
|
||||||
- **Informativa** (menu *Privacy*, solo amministratore): i valori che possono
|
- **Informativa** (menu *Privacy*, solo amministratore): i valori che possono
|
||||||
@@ -906,7 +913,7 @@ ancora rientrati compaiono nel dettaglio come "in corso".
|
|||||||
| Componente | Tecnologia |
|
| Componente | Tecnologia |
|
||||||
|-------------------|--------------------------------------------|
|
|-------------------|--------------------------------------------|
|
||||||
| Framework | Laravel 11 |
|
| Framework | Laravel 11 |
|
||||||
| PHP | 8.3 (FPM) |
|
| PHP | 8.3 (FPM), versione fissata nel Dockerfile |
|
||||||
| Interfaccia | Livewire 3.5 + TailwindCSS 4 + Alpine.js |
|
| Interfaccia | Livewire 3.5 + TailwindCSS 4 + Alpine.js |
|
||||||
| Database | MariaDB 11 |
|
| Database | MariaDB 11 |
|
||||||
| Cache/Sessioni/Code| Redis 7 |
|
| Cache/Sessioni/Code| Redis 7 |
|
||||||
|
|||||||
@@ -8,6 +8,16 @@ memory_limit = 256M
|
|||||||
max_execution_time = 120
|
max_execution_time = 120
|
||||||
max_input_vars = 3000
|
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]
|
||||||
opcache.enable = 1
|
opcache.enable = 1
|
||||||
opcache.memory_consumption = 128
|
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
|
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);
|
preg_match_all('/^FROM php:(\S+)/m', $this->dockerfile(), $basi);
|
||||||
|
|||||||
Reference in New Issue
Block a user