
Linus Torvalds ha recentemente espresso con la sua consueta franchezza un forte disappunto riguardo ai file system che implementano il supporto per il case-folding, ovvero la gestione di nomi di file e cartelle senza distinzione tra lettere maiuscole e minuscole.
Il contesto di queste osservazioni nasce da un problema riscontrato nel file system Bcachefs, che ha evidenziato un malfunzionamento nel supporto al case-folding nella sua implementazione. Per questo motivo, è stata presentata una richiesta di correzione da integrare nella versione del kernel Linux 6.15, la prossima versione stabile. Torvalds ha quindi pubblicato un lungo messaggio sulla mailing list ufficiale del kernel Linux (LKML), dove ha illustrato le sue opinioni critiche su questa funzionalità.
Il problema del case-folding nei file system Linux non è nuovo. In passato si sono verificati problemi legati alla gestione di caratteri Unicode speciali, come le emoji, che complicano ulteriormente il corretto confronto dei nomi di file e cartelle senza distinzione tra maiuscole e minuscole.
Il case-folding è un metodo utilizzato per trattare le lettere maiuscole e minuscole come equivalenti, consentendo ad esempio di riconoscere “File.txt” e “file.txt” come lo stesso nome di file. Questa funzionalità, diffusa in diversi file system, semplifica alcune operazioni, ma può anche introdurre complicazioni e rischi per la sicurezza, soprattutto in contesti che richiedono una gestione precisa e rigorosa dei nomi dei file.
Le opinioni di Linus Torvalds sul case-folding dei file system
Nel suo intervento su LKML, Linus Torvalds ha dichiarato senza mezzi termini che chi si occupa di sviluppo di file system non impara mai dai propri errori. Secondo lui, l’adozione di nomi case-insensitive (cioè che non distinguono tra maiuscole e minuscole) è un errore grave e non avrebbe dovuto essere implementata.
Tra i punti chiave del suo discorso:
- Il problema non è la mancanza di test, ma il fatto stesso di aver implementato questa funzionalità.
- Tentare di gestire il case-folding “in modo corretto” è impossibile, perché non esiste un modo universalmente giusto per farlo; questo porta a interpretazioni arbitrarie di byte casuali nei nomi dei file.
- I test effettuati finora sono falliti nel coprire tutti i casi problematici, in particolare quelli che possono causare vulnerabilità di sicurezza negli ambienti utente.
- Alcuni programmi in modalità utente verificano che i nomi dei file non corrispondano a pattern sensibili per motivi di sicurezza, ma il file system case-insensitive può comunque far corrispondere questi pattern ignorando caratteri non stampabili o altri dettagli, esponendo così i programmi a rischi di inganno.
- Torvalds cita esempi di commit (modifiche al codice) che tentano di gestire questi casi, ma che dimostrano la complessità e i problemi insiti nel case-folding.
- Un esempio concreto riguarda i caratteri Unicode
e
, che differiscono solo per punti di codice ignorabili. Il primo è un semplice cuore (U+2764), mentre il secondo include un modificatore di stile (U+2764 U+FE0F), che lo rende un’emoji. Chi vuole che questi 2 caratteri siano considerati uguali finisce per far sì che altri file con punti di codice ignorabili vengano trattati allo stesso modo, con conseguenze potenzialmente pericolose.
- Molti programmi che effettuano controlli di sicurezza sui percorsi dei file possono essere ingannati da questa gestione errata del case-folding.
- Per Torvalds, la distinzione tra maiuscole e minuscole non è un problema da risolvere, ma una caratteristica fondamentale e la sua assenza rappresenta un vero e proprio bug.
- Egli critica chi continua a considerare il case-folding una funzionalità da implementare, paragonandolo a un tentativo di ricreare i limiti del vecchio file system FAT, noto per le sue carenze.
Questa posizione di Torvalds è coerente con la sua storica attenzione alla robustezza e sicurezza del kernel Linux e dei file system associati e non dovrebbe rappresentare una novità. Del resto mi sembra chiaro quando scrive:
Dammit. Case sensitivity is a BUG. The fact that filesystem people *still* think it’s a feature, I cannot understand. It’s like they revere the old FAT filesystem _so_ much that they have to recreate it – badly.
Dannazione. La distinzione tra maiuscole e minuscole è un BUG. Il fatto che chi si occupa di file system *ancora* la consideri una funzionalità, non riesco a capirlo. È come se venerassero così tanto il vecchio file system FAT da dover ricrearlo, e alla grande.
Perché la distinzione tra maiuscole e minuscole è importante nei file system GNU/Linux
Nei sistemi GNU/Linux, la distinzione tra lettere maiuscole e minuscole nei nomi di file e cartelle è una caratteristica fondamentale. Ad esempio, “Documento.txt” e “documento.txt” sono considerati 2 file distinti. Questo comportamento deriva dalla filosofia Unix di mantenere un controllo preciso e rigoroso sui nomi dei file, evitando ambiguità.
I file system più comuni su GNU/Linux, come ext4
, rispettano questa distinzione, garantendo così una gestione coerente e sicura dei dati. Al contrario, file system come FAT o NTFS (tipici di Windows) sono case-insensitive, cioè non distinguono tra maiuscole e minuscole, il che può portare a problemi di compatibilità e sicurezza quando si usano in ambienti GNU/Linux.
Il problema del case-folding diventa ancora più complesso quando si considerano i caratteri Unicode, che includono simboli, emoji e caratteri speciali. La gestione corretta di questi caratteri richiede una normalizzazione e un confronto preciso, che spesso non è possibile realizzare in modo affidabile con il case-folding.
Implicazioni per gli sviluppatori e gli utenti di GNU/Linux
Le osservazioni di Linus Torvalds mettono in guardia sviluppatori e utenti riguardo all’adozione di file system con supporto case-insensitive o case-folding, specialmente in ambienti GNU/Linux dove la distinzione tra maiuscole e minuscole è la norma.
Gli sviluppatori di file system sono invitati a considerare attentamente le implicazioni di sicurezza e compatibilità prima di implementare funzionalità di questo tipo. Gli utenti, invece, devono essere consapevoli delle differenze tra i vari file system e scegliere quelli più adatti alle proprie esigenze, tenendo presente che la gestione dei nomi di file senza distinzione tra maiuscole e minuscole può comportare rischi e comportamenti inattesi.
Novità in Bcachefs versione 6.15
Le distribuzioni GNU/Linux stanno per ricevere la versione 6.15 del kernel Linux, che includerà una correzione per il supporto case-folding nel file system Bcachefs. Questa correzione mira a risolvere i problemi di funzionamento riscontrati nella gestione dei nomi di file e cartelle senza distinzione tra maiuscole e minuscole. Tuttavia, come evidenziato da Linus Torvalds, la correzione non elimina le problematiche di fondo legate al case-folding, che rimane una funzionalità controversa e fonte di potenziali vulnerabilità di sicurezza.
Fonte: https://lore.kernel.org/lkml/CAHk-=wjajMJyoTv2KZdpVRoPn0LFZ94Loci37WLVXmMxDbLOjg@mail.gmail.com/
Fonte: https://www.phoronix.com/news/Linus-Torvalds-Anti-Case-Fold
Source: Read More