Il riassunto
Gitea, il popolare servizio Git self-hosted, presenta una vulnerabilità critica di lettura arbitraria di file non autenticata — CVE-2026-59774, valutata CVSS 9.8 — che consente a chiunque di leggere file sul server senza effettuare il login, e di concatenare quell'accesso all'esecuzione di codice remoto. L'attacco richiede solo un repository pubblico e un documento Org-mode contraffatto: una richiesta all'endpoint di rendering markup di Gitea sfrutta la direttiva Org-mode #+INCLUDE per includere file arbitrari tramite percorso assoluto. Le versioni interessate sono 1.22.1 fino a 1.27.0; il fix è Gitea 1.27.1, che corregge anche una falla RCE correlata, CVE-2026-60004.
Se si utilizza Gitea in proprio come parte dello stack CI/CD e DevOps — come fanno molti team proprio per tenere il codice sorgente lontano dai cloud di terze parti — questa è una patch da applicare nella stessa giornata, non un advisory di routine. La prima cosa che un attaccante leggerà è il file di configurazione, che contiene le chiavi di tutto il resto.
Cosa è successo
Il 2 agosto 2026 il progetto Gitea ha pubblicato un advisory di sicurezza e rilasciato la versione 1.27.1, esortando tutti gli utenti ad aggiornare il prima possibile. Il problema principale, CVE-2026-59774, è una lettura arbitraria di file non autenticata segnalata indipendentemente da XBOW Security e dal ricercatore Guido Leo (NightRang3r). Riporta un punteggio CVSS di 9.8 e interessa ogni release Gitea dalla 1.22.1 alla 1.27.0.
La falla risiede nella funzionalità di rendering markup di Gitea. Una richiesta a POST /{owner}/{repo}/markup renderizza contenuti come i file README. La route include controlli di assegnazione al repository e di lettura, ma un utente anonimo soddisfa quei controlli per un repository pubblico con l'unità di codice abilitata — una configurazione molto comune. Quando Gitea renderizza contenuti Org-mode, elabora la direttiva #+INCLUDE, e nelle versioni interessate quella direttiva risolve percorsi assoluti del filesystem. Il risultato pratico: inviare markup Org-mode contraffatto e leggere indietro qualsiasi file che l'account del servizio Gitea può aprire.
La causa tecnica radice è piccola e istruttiva. Gitea 1.27.0 inizializzava la libreria di parsing go-org con org.New() ma non sostituiva il callback di lettura file predefinito della libreria, che corrisponde a un semplice ReadFile. Nulla limitava #+INCLUDE al repository, rendendo il meccanismo di inclusione un primitivo di lettura tramite path traversal. La patch sovrascrive quel callback; il fix è la versione 1.27.1 o successiva.
Come una lettura di file diventa esecuzione di codice
Una lettura arbitraria di file è già grave su un server di controllo del codice sorgente, perché il primo file che vale la pena leggere è la configurazione stessa di Gitea. Secondo l'advisory del progetto, l'esposizione si escala in una breve catena: leggere app.ini per estrarre l'INTERNAL_TOKEN, usare quel token per iniettare un hook Git tramite il logger interno, e poi attivare l'hook durante un clone anonimo. Lo stato finale è l'esecuzione di comandi sull'host. Gitea 1.27.1 corregge anche una falla direttamente correlata, CVE-2026-60004, descritta come esecuzione di codice remoto tramite l'API diffpatch attraverso l'installazione di hook Git — segnalata dallo stesso ricercatore.
Alla data dei primi articoli pubblici il 5 agosto 2026, CVE-2026-59774 non era ancora apparso nel catalogo KEV della CISA e nessun proof-of-concept indipendente era stato pubblicato. È un magro conforto. Il comportamento di lettura file era stato dimostrato pubblicamente prima dell'advisory formale, l'endpoint è banale da raggiungere, e il percorso di escalation è documentato. Per una vulnerabilità così facile da sfruttare su infrastruttura che contiene codice sorgente e segreti, «non ancora nel KEV» è un dettaglio di pianificazione, non una tregua.
Scoperta in parte da un'IA
Un dettaglio si trova all'intersezione di due temi che monitoriamo. Uno dei due segnalatori indipendenti di CVE-2026-59774 era XBOW, un sistema autonomo di sicurezza offensiva che trova e valida vulnerabilità senza che un umano diriga ogni passaggio. È un esempio concreto di un cambiamento più ampio: gli strumenti IA comprimono il tempo necessario per scoprire, confermare e weaponizzare i bug. Quando la stessa categoria di strumenti è disponibile sia per difensori che per attaccanti, l'ipotesi prudente è che una falla appena divulgata e facile da raggiungere venga sondata rapidamente.
Questo non richiede panico; richiede cadenza. I team che tengono un inventario degli strumenti di sviluppo self-hosted, si abbonano ai loro advisory di sicurezza e trattano «critico, non autenticato, raggiungibile via Internet» come trigger di patch accelerata chiuderanno questa finestra in poche ore. I team che scoprono quali servizi interni gestiscono solo quando uno viene compromesso non lo faranno. Un audit di sicurezza periodico che include la supply chain degli sviluppatori — server Git, runner CI, registri di artefatti — è il luogo in cui questi punti ciechi emergono prima che un attaccante li trovi.
Cosa significa per i team software italiani
Gitea è particolarmente attraente per i team che vogliono il controllo: mantenere i repository sulla propria infrastruttura, all'interno della propria rete, lontano dai SaaS di terze parti. Quell'istinto è solido — e in Italia è spesso motivato da esigenze di sovranità digitale e conformità al GDPR. Ma sposta l'onere di patch e hardening su di voi. Un server Git self-hosted non è uno storage passivo di file; contiene codice sorgente, deploy key, segreti webhook e i token che consentono al CI di fare push in produzione. Un accesso in lettura non autenticato alla configurazione di quel server è un punto d'ingresso nell'intera pipeline di delivery.
Il quadro di conformità è familiare. Sotto GDPR, SOC 2 e NIS2, una falla non corretta e raggiungibile da remoto che può portare all'esecuzione di codice e all'esposizione di segreti è una lacuna di controllo con implicazioni di change management e, potenzialmente, di notifica di violazione. «Era il nostro server Git interno» non è un fattore attenuante se quel server era raggiungibile e i segreti che conteneva toccavano dati dei clienti o sistemi di produzione. La mossa pragmatica è integrare gli strumenti di sviluppo self-hosted nella stessa SLA di patch e disciplina di igiene dei segreti già applicata ai servizi di produzione.
Cosa fare adesso
Questo è un incidente «applica la patch poi presupponi l'esposizione». L'ordine è importante: l'aggiornamento ferma nuovi sfruttamenti, ma ruotare i segreti che una versione vulnerabile avrebbe potuto esporre rende inutile qualsiasi lettura precedente.
- Aggiornare a Gitea 1.27.1 o successivo. Chiude CVE-2026-59774 e la falla RCE correlata CVE-2026-60004. Eseguire la patch su ogni istanza, inclusi server di staging e server interni dimenticati.
- Verificare prima l'esposizione. Esaminare i log di accesso per richieste all'endpoint
/{owner}/{repo}/markupsulle versioni interessate, e verificare se il Gitea era raggiungibile da reti non affidabili o da Internet. - Ruotare ciò che la configurazione rivela. Rigenerare l'
INTERNAL_TOKENinapp.ini, poi ruotare le password del database, i segreti delle applicazioni OAuth, le chiavi di firma JWT, le credenziali SMTP e qualsiasi token di integrazione memorizzato nella configurazione o nel filesystem. - Cercare hook installati. Poiché la lettura file può concatenarsi all'esecuzione di codice tramite hook Git, ispezionare i repository e la directory dei dati Gitea per hook inattesi o modificati di recente, e trattare un'esposizione confermata come una compromissione dell'host.
- Rimuoverlo da Internet aperto. Posizionare Gitea dietro una VPN o una allowlist ove possibile; gli strumenti di sviluppo raramente devono essere pubblicamente raggiungibili, e ridurre l'esposizione restringe il raggio d'azione della prossima falla.
- Configurare il feed di advisory. Iscriversi alle note di rilascio di Gitea e aggiungere «strumenti di sviluppo self-hosted critici» a una SLA di patch accelerata, così che il prossimo 9.8 sia un evento gestito nella stessa giornata.
Il segnale duraturo di CVE-2026-59774 non riguarda un callback di libreria. Significa che l'infrastruttura di sviluppo self-hosted porta privilegi di livello produzione e merita operazioni di livello produzione: un inventario noto, un feed di advisory, un percorso di patch accelerato e segreti limitati abbastanza da impedire che la lettura di un file di configurazione sblocchi l'intera pipeline. I team che trattano il proprio server Git come il sistema prezioso che è applicheranno questa patch in un pomeriggio e andranno avanti.
Domande frequenti
Che cos'è CVE-2026-59774 in Gitea?
CVE-2026-59774 è una vulnerabilità critica di lettura arbitraria di file non autenticata in Gitea, il servizio Git self-hosted, valutata CVSS 9.8. Un attaccante senza account può leggere qualsiasi file accessibile al processo del servizio Gitea inviando markup Org-mode contraffatto all'endpoint di rendering dei repository pubblici. Le versioni 1.22.1 fino a 1.27.0 sono interessate; il fix è Gitea 1.27.1, che corregge anche una falla RCE correlata, CVE-2026-60004.
Come una falla di lettura file può diventare esecuzione di codice remoto?
Secondo l'advisory di Gitea, il primitivo di lettura file può essere concatenato all'esecuzione di comandi. Un attaccante legge il file di configurazione app.ini per estrarre l'INTERNAL_TOKEN, inietta un hook Git tramite il logger interno e lo attiva durante un clone anonimo. CVE-2026-60004 copre l'esecuzione di codice remoto tramite l'API diffpatch attraverso l'installazione di hook Git. Entrambe le vulnerabilità sono corrette in Gitea 1.27.1, motivo per cui il progetto esorta tutti ad aggiornare immediatamente.
Quali versioni di Gitea sono interessate e qual è la soluzione?
Gitea 1.22.1 fino a 1.27.0 sono vulnerabili a CVE-2026-59774. La soluzione è Gitea 1.27.1 o successivo. La causa tecnica è che Gitea inizializzava la libreria go-org senza sovrascrivere il callback di lettura file predefinito, consentendo alla direttiva #+INCLUDE di risolvere percorsi assoluti del filesystem. L'aggiornamento sostituisce quel comportamento e chiude l'endpoint al path traversal.
Abbiamo applicato la patch a Gitea. È sufficiente?
La patch blocca ulteriori sfruttamenti, ma se una versione vulnerabile era raggiungibile occorre presumere che i segreti possano già essere stati esposti. Esaminare i log di accesso per richieste all'endpoint di markup, poi ruotare l'INTERNAL_TOKEN in app.ini e tutte le altre credenziali che la configurazione o il filesystem del server potrebbe rivelare: segreti OAuth, chiavi di firma JWT, password del database, credenziali SMTP e token di integrazione. Poiché la lettura file può concatenarsi all'esecuzione di codice, trattare un'esposizione confermata come una compromissione del server e verificare gli hook Git inattesi.
Perché una vulnerabilità scoperta da un'IA è importante per la nostra cadenza di patch?
Uno dei due segnalatori indipendenti di questa falla era XBOW, un sistema autonomo di sicurezza offensiva. Poiché gli strumenti IA trovano e weaponizzano i bug più rapidamente, la finestra tra divulgazione e sfruttamento si restringe. La lezione duratura è operativa, non specifica a uno strumento: mantenere un inventario dell'infrastruttura di sviluppo self-hosted, inserire gli advisory critici in uno SLA di patch accelerato, e non esporre strumenti di sviluppo come Gitea direttamente a Internet senza necessità.
Fonti
Gitea — Release of 1.27.1 (advisory di sicurezza)
The Hacker News — Critical Gitea Flaw Let Unauthenticated Attackers Read Server Files via Org-Mode Markup
Cyber Security News — Critical Gitea Arbitrary File Read Vulnerability Enables RCE