<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sicurezza server - Matteo Cisilino</title>
	<atom:link href="https://www.cisilino.com/tag/sicurezza-server/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cisilino.com</link>
	<description>Guide su WordPress, server e sicurezza</description>
	<lastBuildDate>Sat, 31 Oct 2026 09:19:23 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
	<item>
		<title>Vulnerabilità kernel Linux: un use-after-free nel TCP IPv4</title>
		<link>https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/</link>
					<comments>https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 09:19:23 +0000</pubDate>
				<category><![CDATA[Server e database]]></category>
		<category><![CDATA[CVE]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[kernel Linux]]></category>
		<category><![CDATA[sicurezza server]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1401</guid>

					<description><![CDATA[<p>Gestisco server Debian in produzione da anni. Ogni volta che esce una CVE sul kernel mi fermo a leggere i dettagli. Poi decido se aggiornare subito o aspettare. Questa volta la storia è più intricata del solito: c&#8217;è una vulnerabilità kernel Linux nel TCP IPv4, un punteggio CVSS conteso tra vendor, e persino un presunto [&#8230;]</p>
<p>The post <a href="https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/">Vulnerabilità kernel Linux: un use-after-free nel TCP IPv4</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Gestisco server Debian in produzione da anni. Ogni volta che esce una CVE sul kernel mi fermo a leggere i dettagli. Poi decido se aggiornare subito o aspettare. Questa volta la storia è più intricata del solito: c&#8217;è una <strong>vulnerabilità kernel Linux</strong> nel TCP IPv4, un punteggio CVSS conteso tra vendor, e persino un presunto exploit root costruito da un&#8217;intelligenza artificiale. Partiamo da una domanda che sembra laterale, ma non lo è: cos&#8217;è MPTCP, e perché conta anche se non lo usi.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/vulnerabilita-kernel-linux-tcp-cve-2026-98432.webp" alt="vulnerabilità kernel Linux nel TCP IPv4, pinguino stilizzato con scudo Debian corretto" width="1200" height="630"/></figure>



<h2 class="wp-block-heading">Cos&#8217;è MPTCP e perché riguarda anche chi non lo usa</h2>



<p class="wp-block-paragraph">Multipath TCP (MPTCP) è lo standard RFC 8684. Estende il TCP classico per far viaggiare una singola connessione su più percorsi di rete insieme. Un telefono può usare WiFi e rete cellulare nello stesso momento, per la stessa connessione. Un server con più interfacce può fare lo stesso, per ridondanza o per somma di banda. Apple lo usa in produzione fin da iOS 7, nel 2013, per Siri: è il caso d&#8217;uso reale più noto. Alcuni operatori mobili, per esempio in Corea del Sud, lo sfruttano per il bonding WiFi/LTE. Diversi data center lo adottano per il multi-homing tra uplink diversi. Nel kernel Linux mainline c&#8217;è dal 5.6.</p>



<p class="wp-block-paragraph">Il punto che mi ha fatto alzare un sopracciglio è un altro. Dalla versione 1.24, i programmi scritti in Go richiedono MPTCP di default per i socket in ascolto. Il Go Security Team l&#8217;ha confermato il 29 ottobre. Insieme, ha dato un avviso scomodo: il bug di cui parliamo oggi non è specifico di MPTCP. Un sistema senza listener MPTCP attivi può restare comunque esposto ad attacchi simili. Il codice vulnerabile è nel path TCP IPv4 generico, non in un modulo opzionale. Si può disattivare MPTCP programma per programma, con la variabile <code>GODEBUG=multipathtcp=0</code> a runtime. Ma il Go Security Team definisce questa mitigazione &#8220;fragile&#8221;: basta un solo listener MPTCP rimasto esposto per vanificarla. Nessuno ha dimostrato che ogni exploit funzionante dipenda davvero da MPTCP. Ecco perché il codice MPTCP resta superficie di attacco, anche se nel tuo stack non lo attivi mai consapevolmente: basta che sia compilato nel kernel e raggiungibile.</p>



<p class="wp-block-paragraph">Il progetto MPTCP stesso dichiara, sulla propria pagina, che le principali distribuzioni Linux correnti spediscono il kernel con il supporto MPTCP compilato di default (<code>CONFIG_MPTCP=y</code>). Nomina esplicitamente Debian, Ubuntu, RHEL e Fedora. È una dichiarazione del progetto stesso, non una verifica indipendente distro per distro, ma il concetto resta valido: il supporto è acceso a livello di kernel, non &#8220;opt-in&#8221; a livello di sistema operativo. Solo la negoziazione per singola connessione resta a carico dell&#8217;applicazione.</p>



<h2 class="wp-block-heading">La vulnerabilità kernel Linux CVE-2026-98432 in breve</h2>



<p class="wp-block-paragraph">Il CVE team del kernel Linux ha pubblicato la CVE-2026-98432 il 15 ottobre 2026. Il fix upstream era già stato applicato dieci giorni prima, il 5 ottobre. Capita spesso che la pubblicazione segua il commit con un certo ritardo. Il punteggio CVSS di 9,8 (critico) è arrivato solo il 24 ottobre, nove giorni dopo la pubblicazione della CVE.</p>



<p class="wp-block-paragraph">Il problema sta nella gestione dell&#8217;handshake TCP per IPv4, in particolare nella funzione <code>tcp_v4_syn_recv_sock()</code>. Quando una connessione viene creata, le opzioni IP del pacchetto SYN vengono passate dal request socket in attesa al nuovo socket. Per esempio Record Route o Timestamp, se il client le include in un SYN costruito ad arte. Il problema è che vengono passate per riferimento, non per copia, e senza il lock del listener. Secondo l&#8217;analisi tecnica della patch, le strutture coinvolte si chiamano <code>inet_opt</code> e <code>ireq_opt</code>. Una seconda CPU può liberare quel buffer con <code>kfree()</code>, chiamato da <code>inet_sock_destruct()</code> o da <code>tcp_v4_reqsk_destructor()</code>. Nel frattempo una prima CPU lo sta ancora leggendo in <code>ip_options_build()</code>, per costruire il SYNACK. È un classico use-after-free causato da una race condition. Il percorso IPv6 equivalente, <code>tcp_v6_syn_recv_sock()</code>, copia le opzioni invece di passarle per riferimento: non è vulnerabile alla race principale. Esiste anche una seconda via d&#8217;attacco, tramite la migrazione dei request-socket: <code>net.ipv4.tcp_migrate_req=1</code> oppure un programma eBPF <code>BPF_SK_REUSEPORT_SELECT_OR_MIGRATE</code>. Entrambe sono disattivate di default.</p>



<p class="wp-block-paragraph">Il bug è remoto e non richiede autenticazione né interazione dell&#8217;utente, secondo la valutazione del kernel team. È presente dalla versione 4.4 del kernel. Il fix è firmato da Eric Dumazet, segnalato da Xinyang Ge di Anthropic. Sposta la liberazione della memoria a dopo un grace period RCU, con <code>kfree_rcu()</code>: così nessuna CPU può più leggere un buffer già liberato. Le versioni stabili corrette sono 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 e la mainline dalla 7.3-rc7.</p>



<h2 class="wp-block-heading">Punteggi CVSS discordanti: non tutti i vendor sono d&#8217;accordo</h2>



<p class="wp-block-paragraph">Qui la storia si complica. Il kernel CVE team e Ubuntu valutano la complessità di attacco come bassa, e danno 9,8 (critico). Oracle e SUSE danno invece 8,1 (importante): stesso vettore CVSS, ma complessità di attacco alta. Red Hat, curiosamente, ha due valutazioni che non coincidono tra loro. La pagina CVE pubblica mostra &#8220;Moderate, 5.9&#8221;. Il file di advisory leggibile da macchina, aggiornato il 29 ottobre, mostra invece &#8220;Important, 8.1&#8221;, con impatto alto su confidenzialità e integrità. Lo stesso giorno il bug tracker interno di Red Hat ha alzato la severità da medium a high. Amazon, dal suo lato, assegna 7,0. Al momento in cui scrivo, l&#8217;NVD non ha ancora pubblicato un punteggio proprio.</p>



<p class="wp-block-paragraph">Vale la pena dirlo con onestà. Questa incongruenza interna a Red Hat non è un dettaglio che ho dedotto io: è riportata così dall&#8217;articolo originale di The Hacker News, la mia fonte principale per questi dati. Non è la prima volta che un vendor pubblica due numeri diversi per lo stesso bug, su canali diversi. Ma qui il salto da &#8220;moderato&#8221; a &#8220;importante&#8221; nello stesso giorno dice molto. Anche per chi scrive il codice, stimare con certezza lo sfruttabilità reale di una race condition nel kernel è difficile.</p>



<h2 class="wp-block-heading">Stato delle patch: Debian già corretto, altri ancora no</h2>



<p class="wp-block-paragraph">Questo è il punto che mi riguarda più da vicino: gli hosting che gestisco girano su Debian stable. E qui i fatti parlano chiaro, senza bisogno di aggiungere enfasi: <strong>Debian ha già corretto questa vulnerabilità kernel Linux</strong>, sia su trixie che su bookworm. Debian trixie (stable) è stata corretta il 16 ottobre 2026, con il pacchetto <code>linux 6.12.113-1</code>, avviso DSA-6568-1. Debian 12 (bookworm) è stata corretta in due passaggi: il 17 e il 22 ottobre 2026, con <code>linux 6.1.190-1</code> (avviso DLA-4841-1) e <code>linux-6.12 6.12.113-1~deb12u1</code> (avviso DLA-4850-1). Nella propria tabella di tracciamento, Debian non elenca un punteggio CVSS separato per questa CVE. Si limita a segnare lo stato di fix per ogni release: è l&#8217;informazione che conta davvero, per chi deve decidere se riavviare un server.</p>



<p class="wp-block-paragraph">Confrontare questo con lo stato di altre distribuzioni molto diffuse aiuta a dare peso alla cosa. Al 30 ottobre, Red Hat ha aggiornato lo stato di RHEL 8, 9, 10 e OpenShift 4. Prima era &#8220;fix deferred&#8221; (segnato il 29 ottobre), ora è &#8220;affected&#8221;. Nessuna data di rilascio è stata comunicata. Ubuntu, su tutte le versioni supportate (22.04, 24.04, 26.04, 26.10), risulta ancora &#8220;in lavorazione&#8221;, senza una data. Ubuntu 16.04, 18.04 e 20.04 risultano vulnerabili, senza nemmeno un fix elencato. SUSE Linux Enterprise Server, dalla SP4 alla SP7 più la 16.0, è nella stessa situazione. Oracle Linux (UEK), openSUSE Leap 16.0, SUSE Linux Micro 6.2 e Amazon Linux 2023 risultano invece già corretti. RHEL 7 non è affetto: il percorso di codice vulnerabile non è mai stato distribuito su quella release.</p>



<p class="wp-block-paragraph">Non lo dico per fare concorrenza a Ubuntu o RHEL. Restano distribuzioni serie, con processi di sicurezza robusti. Lo dico perché su questo singolo bug, in questa finestra temporale, i fatti sono questi: chi si affida a hosting basati su Debian stable ha già il fix installato. Su altre distribuzioni molto usate, invece, il server resta esposto per un periodo indefinito. È un vantaggio concreto, verificabile guardando le date. Non è un&#8217;opinione sul progetto Debian in generale.</p>



<h2 class="wp-block-heading">L&#8217;exploit (riportato, non verificato in modo indipendente) di Anthropic</h2>



<p class="wp-block-paragraph">La parte più insolita di questa storia riguarda Anthropic, l&#8217;azienda che per prima ha segnalato il bug tramite Xinyang Ge. Secondo i report di settore, uno dei suoi modelli AI interni, non rilasciato pubblicamente, ha costruito da solo un exploit root funzionante. Partendo solo dalla patch e dal report come prompt. L&#8217;attacco in due fasi funzionerebbe così. Nella prima fase, la race fa inviare all&#8217;attaccante byte extra dalla risposta del kernel. Da lì recupera un indirizzo kernel, per disinnescare KASLR. Nella seconda fase, lo stesso bug causerebbe un overflow di buffer. Sovrascrive un puntatore di callback con l&#8217;indirizzo di un payload già piazzato in memoria kernel dall&#8217;attaccante. Quando il kernel chiama quel puntatore, il payload esegue un comando shell a scelta come root. Una race persa farebbe fallire solo quel singolo tentativo di connessione, senza crashare il sistema: quindi sarebbero possibili tentativi ripetuti. Nel test descritto da Anthropic: 48 minuti per rubare l&#8217;indirizzo kernel, altri 5 minuti per arrivare all&#8217;esecuzione di comandi.</p>



<p class="wp-block-paragraph">Red Hat dice che un attaccante remoto che raggiunge un servizio TCP esposto può in generale innescare la race. L&#8217;exploit root descritto da Anthropic, però, avrebbe preso di mira specificamente server con un listener multipath TCP attivo. Il post di Anthropic non chiarisce se un server senza MPTCP sia sfruttabile allo stesso modo. Né il record CVE né il fix upstream menzionano MPTCP in nessun punto. È la stampa di settore, non una fonte primaria, a riportare questo legame: lo scrivo quindi con lo scetticismo che merita, non come un fatto accertato al cento per cento. Anthropic non ha pubblicato il codice dell&#8217;exploit, né la versione esatta del kernel usata, né la configurazione del server target. Un&#8217;altra società, Innora, ha pubblicato un&#8217;analisi della causa radice, con un ambiente di riproduzione QEMU. Ha dichiarato che non rilascerà un exploit armato nel breve termine. Al momento non ci sono prove di sfruttamento reale da parte di vendor o CERT. Il bug non è nel catalogo CISA KEV, secondo la copia aggiornata da CIRCL del Lussemburgo al 28 ottobre.</p>



<h2 class="wp-block-heading">Cosa fare adesso sui tuoi server</h2>



<p class="wp-block-paragraph">Nessun vendor ha pubblicato un workaround ufficialmente sanzionato per questa <strong>vulnerabilità kernel Linux</strong>. Red Hat dice esplicitamente che nessuna delle misure circolate finora raggiunge il suo standard di facilità di deploy e di stabilità. La mitigazione primaria resta applicare il kernel corretto e riavviare, quando la patch è disponibile per la tua distribuzione. Su Debian lo è già. Su RHEL e Ubuntu ancora no, al momento in cui scrivo.</p>



<p class="wp-block-paragraph">Come difesa in profondità, non come soluzione definitiva, ha senso fare alcune cose. Verificare che <code>net.ipv4.tcp_migrate_req</code> sia impostato a 0. Controllare che non ci siano programmi eBPF <code>BPF_SK_REUSEPORT_SELECT_OR_MIGRATE</code> caricati. Valutare un filtraggio dei pacchetti IPv4 in ingresso con opzioni Record Route o Timestamp. Monitorare eventuali crash che citano <code>ip_options_build</code>, <code>ip_build_and_send_pkt</code> o <code>skb_under_panic</code>. Fare l&#8217;inventario di eventuali listener MPTCP esposti, evitando di lasciarli raggiungibili senza motivo. Se gestisci anche servizi contro attacchi applicativi più comuni, su <a href="https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/">come ho protetto i server in attesa della patch per PHP2Shell</a> trovi lo stesso approccio: mitigare quello che si può, mentre si aspetta il fix definitivo, senza promettere protezioni che non esistono.</p>



<p class="wp-block-paragraph">Per chi mi chiede se aggiornare subito: se usi Debian stable, il kernel corretto è già nei repository di sicurezza. L&#8217;aggiornamento è semplice, e la finestra di esposizione è già chiusa. Se usi altre distribuzioni, oggi non c&#8217;è ancora una patch da installare. Vale la pena seguire da vicino gli avvisi del tuo vendor nei prossimi giorni: la situazione cambia rapidamente.</p>



<p class="wp-block-paragraph">Fonti: <a href="https://thehackernews.com/2026/10/linux-kernel-tcp-flaw-with-98-cvss.html" target="_blank" rel="nofollow noopener">The Hacker News</a>, <a href="https://security-tracker.debian.org/tracker/CVE-2026-98432" target="_blank" rel="nofollow noopener">Debian Security Tracker</a> e il <a href="https://github.com/torvalds/linux/commit/e3f33b0a1d89d738e2b913dab519226eaf76e15b" target="_blank" rel="noopener">commit del fix</a>. Debian, Red Hat, Ubuntu e gli altri nomi citati sono marchi dei rispettivi proprietari.</p><p>The post <a href="https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/">Vulnerabilità kernel Linux: un use-after-free nel TCP IPv4</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHP2Shell: come ho protetto i server in attesa della patch</title>
		<link>https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/</link>
					<comments>https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Thu, 29 Oct 2026 18:53:44 +0000</pubDate>
				<category><![CDATA[Server e database]]></category>
		<category><![CDATA[CVE-2026-109618]]></category>
		<category><![CDATA[CVE-2026-109619]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[ISPConfig]]></category>
		<category><![CDATA[mitigazione]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php2shell]]></category>
		<category><![CDATA[server management]]></category>
		<category><![CDATA[sicurezza server]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=845</guid>

					<description><![CDATA[<p>Due falle gravi nel core di PHP (CVE-2026-109618 e CVE-2026-109619): cosa sono, quali versioni sono colpite, lo script di mitigazione e come ho aggiornato i server.</p>
<p>The post <a href="https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/">PHP2Shell: come ho protetto i server in attesa della patch</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Il 20 ottobre 2026 sono state rese pubbliche due falle gravi nel core di PHP. Il nome comune è <strong>PHP2Shell</strong> e gli identificativi sono CVE-2026-109618 e CVE-2026-109619. Il punteggio CVSS è 9,2. Permettono di eseguire codice sul server senza autenticarsi, e gli attacchi sono già stati osservati.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/php2shell-cve-2026-109618-mitigazione-server.webp" alt="Schema PHP2Shell: cinque cerchi collegati a un riquadro con il simbolo del terminale" width="1200" height="630"/></figure>
<p>In questo articolo spiego cosa sono e quali versioni di PHP sono coinvolte. Racconto come ho messo in sicurezza i server che gestisco mentre la patch non c&#8217;era, e come sono arrivato all&#8217;aggiornamento definitivo. Trovi anche lo script che ho usato e i comandi per lanciarlo.</p>
<h2 class="wp-block-heading">Cos&#8217;è PHP2Shell</h2>
<p>Il problema sta nel modo in cui PHP legge le richieste di tipo <code>multipart/form-data</code>. È il formato che il browser usa per inviare i file. PHP lo interpreta prima che parta qualsiasi script.</p>
<p>Per questo non serve un modulo di upload. Può bastare una sola richiesta a un qualsiasi file PHP del sito.</p>
<p>Le due falle, in sintesi:</p>
<ul class="wp-block-list">
<li><strong>CVE-2026-109618.</strong> Se la memoria si esaurisce mentre PHP legge la richiesta, alcuni dati si corrompono. La corruzione emerge nella pulizia finale della richiesta e può portare a eseguire codice.</li>
<li><strong>CVE-2026-109619.</strong> Parte dello stato di una richiesta resta in memoria. Una richiesta successiva, sullo stesso processo, lo riusa.</li>
</ul>
<p>Questi dettagli tecnici vengono dall&#8217;<a href="https://github.com/NCSC-NL/php2shell/wiki" target="_blank" rel="noopener">analisi del NCSC olandese</a> e da altre fonti pubbliche. Non ho provato a sfruttare le falle sui miei server.</p>
<h2 class="wp-block-heading">Quali versioni di PHP sono coinvolte</h2>
<p>Le versioni corrette sono uscite il 21 ottobre 2026: <strong>PHP 8.5.12, 8.4.27, 8.3.36 e 8.2.35</strong>. Ogni versione precedente a queste è colpita.</p>
<p>I rami 8.1 e più vecchi non hanno una versione corretta ufficiale, perché sono fuori supporto. PHP ha pubblicato solo dei backport minimi del codice sorgente per 7.4, 8.0 e 8.1. Per rami ancora più vecchi non risulta nulla.</p>
<p>Il rischio riguarda ogni modo di eseguire PHP. Il più esposto è mod_php. Contano anche PHP-FPM, php-cgi, FrankenPHP e LiteSpeed. Riguarda poi ogni applicazione che gira sopra: WordPress, Joomla, Drupal, Nextcloud, phpMyAdmin, Roundcube e il pannello ISPConfig.</p>
<p>Su Debian c&#8217;è un dettaglio da conoscere. Debian applica le correzioni come backport e non cambia il numero di versione di PHP. Un server può mostrare un numero basso ed essere già corretto. Per questo lo script non confronta le versioni. Controlla se il changelog del pacchetto installato cita le due CVE.</p>
<h2 class="wp-block-heading">La mitigazione, in attesa della patch</h2>
<p>Quando le falle sono diventate pubbliche, le patch non erano ancora disponibili per le distribuzioni. Non volevo lasciare i server scoperti, quindi ho ridotto il rischio con uno script.</p>
<p><strong>La mitigazione non è una patch.</strong> Disattivare <code>session.upload_progress</code> chiude solo uno dei percorsi noti della CVE-2026-109619 e non fa nulla contro la CVE-2026-109618. Serviva a restringere il margine di attacco fino all&#8217;aggiornamento, non a sostituirlo.</p>
<h3 class="wp-block-heading">Cosa fa lo script</h3>
<p>Lo script è pensato per Debian 12 e 13. Funziona con Apache (mod_php, FastCGI, suPHP, PHP-FPM) e con Nginx (PHP-FPM). Riconosce i server gestiti con ISPConfig, sia Apache sia Nginx.</p>
<p>Le opzioni:</p>
<ul class="wp-block-list">
<li>Senza opzioni controlla e basta. Per ogni pacchetto PHP verifica che il changelog citi le due CVE. Segnala i processi che usano ancora un binario vecchio, legge le impostazioni attive e le porte web in ascolto.</li>
<li><code>--update</code> aggiorna prima l&#8217;indice dei pacchetti.</li>
<li><code>--logs</code> cerca indicatori sospetti: file PHP recenti nelle cartelle di upload o cache, pattern tipici delle webshell, riferimenti a php2shell nei log. È un&#8217;euristica e non prova una compromissione.</li>
<li><code>--harden</code> applica la messa in sicurezza descritta qui sotto.</li>
<li><code>--dry-run</code>, insieme a <code>--harden</code>, mostra cosa farebbe senza modificare nulla.</li>
<li><code>--skip-disable-functions</code>, insieme a <code>--harden</code>, non tocca <code>disable_functions</code>.</li>
<li><code>--rollback</code> toglie quanto applicato da <code>--harden</code>.</li>
</ul>
<h3 class="wp-block-heading">Cosa cambia con &#8211;harden</h3>
<p>Per ogni versione di PHP presente in <code>/etc/php</code>, lo script crea il file <code>mods-available/cve-hardening.ini</code>. Lo abilita con <code>phpenmod</code> per i SAPI fpm, apache2 e cgi. Così la protezione vale per tutti i siti in una volta.</p>
<p>I <code>php.ini</code> originali restano intatti. La CLI non viene toccata, quindi composer, artisan e wp-cli continuano a funzionare.</p>
<p>Il file imposta tre cose:</p>
<ul class="wp-block-list">
<li><code>session.upload_progress.enabled = Off</code></li>
<li><code>expose_php = Off</code></li>
<li><code>disable_functions</code> con exec, passthru, shell_exec, system, proc_open, popen e pcntl_exec, aggiunte a quelle già presenti.</li>
</ul>
<p>Poi lo script testa la configurazione e ricarica PHP-FPM e Apache solo se il test passa. Prima di scrivere fa un backup in <code>/var/backups/php-cve-hardening/</code>.</p>
<h3 class="wp-block-heading">I limiti da conoscere</h3>
<ul class="wp-block-list">
<li><code>disable_functions</code> può rompere alcune applicazioni, per esempio WordPress con certi plugin o Magento. Se succede, usa <code>--rollback</code> oppure rilancia con <code>--skip-disable-functions</code>.</li>
<li>Le direttive <code>php_admin_value</code> nei pool PHP-FPM hanno la precedenza sul file globale. Lo script le segnala ma non le modifica.</li>
<li>Con ISPConfig i file in <code>pool.d</code> sono rigenerati dal pannello. Gli override vanno corretti dal pannello, in Sites, Website, Options, Custom php.ini settings, non a mano.</li>
<li>I <code>php.ini</code> per singolo sito (modalità FastCGI o suPHP di ISPConfig) e le versioni PHP in <code>/opt</code> non sono gestiti. Vanno controllati a parte.</li>
</ul>
<h2 class="wp-block-heading">Come lanciare lo script</h2>
<p>Lo script è qui: <a href="https://cisilino.com/mscripts/php20261.sh">https://cisilino.com/mscripts/php20261.sh</a></p>
<p>Prima di eseguire qualsiasi cosa da internet, leggila. Puoi scaricarlo e aprirlo:</p>
<pre class="wp-block-code"><code>wget -qO php20261.sh https://cisilino.com/mscripts/php20261.sh
less php20261.sh</code></pre>
<p>Se vuoi lanciarlo direttamente da remoto, servono i privilegi di root. Questi sono i comandi, nell&#8217;ordine che consiglio.</p>
<p>1. Solo controllo, con aggiornamento dell&#8217;indice dei pacchetti:</p>
<pre class="wp-block-code"><code>wget -qO- https://cisilino.com/mscripts/php20261.sh | sudo bash -s -- --update</code></pre>
<p>2. Simulazione della messa in sicurezza, senza modifiche:</p>
<pre class="wp-block-code"><code>wget -qO- https://cisilino.com/mscripts/php20261.sh | sudo bash -s -- --harden --dry-run</code></pre>
<p>3. Applicazione:</p>
<pre class="wp-block-code"><code>wget -qO- https://cisilino.com/mscripts/php20261.sh | sudo bash -s -- --harden</code></pre>
<p>4. Rimozione, se qualcosa si rompe:</p>
<pre class="wp-block-code"><code>wget -qO- https://cisilino.com/mscripts/php20261.sh | sudo bash -s -- --rollback</code></pre>
<p>Dopo <code>--harden</code> e dopo <code>--rollback</code> non serve riavviare nulla a mano: lo script ricarica da solo PHP-FPM e Apache, dopo aver testato la configurazione. Il riavvio serve invece dopo l&#8217;aggiornamento del pacchetto PHP, perché i processi in esecuzione tengono in memoria il binario vecchio:</p>
<pre class="wp-block-code"><code>sudo systemctl restart 'php*-fpm' apache2</code></pre>
<p>Gli apici attorno a <code>php*-fpm</code> servono. Senza, è la shell a espandere l&#8217;asterisco, non systemctl. Se il server usa solo Nginx, togli <code>apache2</code>.</p>
<p>L&#8217;esito dello script è anche un codice di uscita: 0 se è tutto a posto, 1 se ci sono avvisi, 2 se il sistema è vulnerabile o serve un&#8217;azione.</p>
<h2 class="wp-block-heading">Sui server con ISPConfig: ispconfig-multipart-guard</h2>
<p><a href="https://www.ispconfig.org/blog/php2shell-critical-php-vulnerabilities-cve-2026-109618-cve-2026-109619/" target="_blank" rel="nofollow noopener"><img decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/ispconfig-logo.png" alt="Logo di ISPConfig" width="239" height="90"></a></p>
<p>Chi usa ISPConfig ha un&#8217;arma in più. Il progetto ha rilasciato lo script <strong>ispconfig-multipart-guard</strong>, descritto <a href="https://www.ispconfig.org/blog/php2shell-critical-php-vulnerabilities-cve-2026-109618-cve-2026-109619/" target="_blank" rel="nofollow noopener">nell&#8217;avviso ufficiale di ISPConfig</a>.</p>
<p>Il principio è semplice. Se il problema è nelle richieste multipart, il web server le ferma prima che arrivino a PHP:</p>
<ul class="wp-block-list">
<li>blocca le richieste <code>Content-Type: multipart/...</code> per tutti i siti, per alcuni siti scelti o per il pannello di controllo;</li>
<li>con Nginx risponde 415 alle richieste PHP dei siti bloccati e i file statici non cambiano. Con Apache risponde 403, anche per i file statici;</li>
<li>di default blocca solo il pannello ISPConfig. I siti vanno bloccati con comandi come <code>block all</code> o <code>block esempio.it</code>;</li>
<li>crea un cron che ogni 5 minuti ripristina i suoi hook, se ISPConfig riscrive la configurazione;</li>
<li>ha una lista di IP autorizzati che possono ancora caricare file.</li>
</ul>
<p>Funziona con Debian e Ubuntu, con ISPConfig 3.2 o 3.3 (e anche senza ISPConfig), con Nginx o con Apache 2.4 e successivi.</p>
<p>Il prezzo è che sui siti bloccati gli upload non funzionano. Valgono anche i media dei CMS, gli allegati dei moduli e quelli del webmail, e gli import di phpMyAdmin. Le pagine normali e i moduli urlencoded continuano a funzionare. Anche questa è una misura provvisoria e non una correzione.</p>
<p>Questo script e il mio non sono alternativi. Il mio agisce sulla configurazione di PHP, quello di ISPConfig sul web server. Non li ho confrontati sul campo e non posso dirti come si comportano insieme su ogni configurazione.</p>
<h2 class="wp-block-heading">L&#8217;aggiornamento definitivo, in due passaggi</h2>
<p>Le mitigazioni dovevano durare poco. Ho aggiornato i server non appena gli aggiornamenti sono stati disponibili, in due passaggi:</p>
<ol class="wp-block-list">
<li><strong>Compilazione diretta.</strong> In attesa che la distribuzione in uso sul singolo server rilasciasse il suo pacchetto, ho compilato PHP dai sorgenti nelle versioni corrette.</li>
<li><strong>Pacchetto ufficiale.</strong> Quando il pacchetto ufficiale della distribuzione è stato rilasciato per quel server, ho sostituito la compilazione con il pacchetto.</li>
</ol>
<p>Il secondo passaggio conta. Un PHP compilato a mano non si aggiorna da solo con il resto del sistema. Il pacchetto della distribuzione sì, e lo script può verificarlo leggendo il changelog.</p>
<h2 class="wp-block-heading">Cosa fare adesso</h2>
<ol class="wp-block-list">
<li>Aggiorna PHP alla 8.5.12, 8.4.27, 8.3.36 o 8.2.35. Su Debian puoi anche usare il pacchetto della distribuzione quando il changelog cita le due CVE.</li>
<li>Riavvia PHP-FPM e Apache, poi rilancia lo script senza opzioni. Non deve più segnalare problemi.</li>
<li>Se usi PHP 8.1 o precedente, pianifica il passaggio a un ramo supportato. Per quei rami non c&#8217;è una versione ufficiale corretta.</li>
<li>Tieni disattivato <code>session.upload_progress</code> fino al prossimo rilascio di correzioni, se la tua applicazione non lo usa.</li>
<li>Controlla i log e i file recenti, con <code>--logs</code> o a mano, cercando file PHP comparsi nelle cartelle di upload.</li>
<li>Non dimenticare PHP dentro container, immagini e appliance di terzi. Vanno aggiornati a parte.</li>
<li>Se il tuo sito usa WordPress, il <a href="https://www.cisilino.com/2026/10/29/cisilino-site-defense-network/">plugin Cisilino Site Defense Network</a> non risolve PHP2Shell. Protegge però il login e tiene un registro delle attività, utile per capire cosa succede sul sito.</li>
</ol>
<h2 class="wp-block-heading">Fonti</h2>
<ul class="wp-block-list">
<li><a href="https://www.ispconfig.org/blog/php2shell-critical-php-vulnerabilities-cve-2026-109618-cve-2026-109619/" target="_blank" rel="nofollow noopener">ISPConfig: PHP2Shell, vulnerabilità critiche di PHP (CVE-2026-109618, CVE-2026-109619)</a></li>
<li><a href="https://github.com/NCSC-NL/php2shell/wiki" target="_blank" rel="noopener">NCSC-NL: wiki su PHP2Shell</a></li>
</ul>
<p>ISPConfig, PHP, Debian e gli altri nomi citati sono marchi dei rispettivi proprietari. Sono indicati solo per identificare i prodotti.</p><p>The post <a href="https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/">PHP2Shell: come ho protetto i server in attesa della patch</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
