L’ente governativo americano Office of the National Cyber Director (ONCD) ha recentemente pubblicato un report in cui raccomanda agli sviluppatori di utilizzare diversi “linguaggi di programmazione sicuri per la memoria”. Questo elenco esclude linguaggi diffusissimi come C e C++, che stando al report sono pericolosi per la sicurezza. In effetti, recenti studi di Microsoft e Google portati come prova, hanno rilevato che circa il 70% di tutte le vulnerabilità di sicurezza sono causate da problemi di sicurezza della memoria.

La sicurezza della memoria citata nel report è la protezione integrata nell’accesso alla memoria che protegge da bug e vulnerabilità. Java, ad esempio, offre controlli per il rilevamento degli errori in fase di esecuzione e per questo è considerato un linguaggio sicuro per la memoria. C e C++, invece, non prevedono controlli di sicurezza e consentono l’accesso diretto alla memoria e per questo l’ONCD ne sconsiglia l’uso nelle grandi organizzazioni, nelle aziende tecnologiche e negli enti governativi.

Tuttavia, l’ONCD non ha un elenco approvato di linguaggi di programmazione e si è limitato a chiedere alle aziende di usare discernimento con il loro software. La National Security Agency (NSA) ha però elencato nel 2022 i linguaggi sicuri per la memoria, che includono Rust, Go, C#, Java, Swift, JavaScript e Ruby.

Tuttavia, l’abbandono di C e C++, che comunque non viene imposto ma solo consigliato dall’ONCD, non avverrà da un giorno all’altro, ma sarà molto probabilmente un processo lungo e difficile e, affinché avvenga questo cambiamento, secondo diversi osservatori il governo e il settore privato devono collaborare per rendere il codice sicuro una priorità. Ricordiamo infatti che quasi un programmatore di software su quattro usa il C++ e uno su cinque il C. Ciò rende entrambi i linguaggi meno popolari rispetto a quelli più recenti come Java e Python, ma comunque parte integrante del software odierno.

c++

Riscrivere un software per utilizzare un altro linguaggio di programmazione è poi un’impresa non indifferente. Anzi, a volte è praticamente impossibile, soprattutto se uno sviluppatore si affida a uno strumento o a un framework di terze parti che non utilizza un determinato linguaggio. Ma, almeno per ora, la Casa Bianca non sta esortando gli sviluppatori ad abbandonare del tutto C e C++.

“Non esistono soluzioni uniche per la sicurezza informatica e l’uso di un linguaggio di programmazione sicuro per la memoria non può eliminare tutti i rischi”, si legge nel rapporto dell’ONCD. “Tuttavia, identificare i punti deboli critici e dare priorità alla riscrittura di queste aree potrebbe essere un inizio produttivo, così come lo sviluppo di nuovi strumenti che aiutino i programmatori a utilizzare linguaggi sicuri per la memoria”.

C’è chi però, come Maya Posch di Hackaday, contesta la validità della tesi dell’ONCD, sottolineando la mancanza di dettagli tecnici nel rapporto e la citazione di blog di Microsoft e Google come principali fonti di riferimento. Secondo Posch, inoltre, la preoccupazione per la sicurezza della memoria potrebbe essere esagerata, poiché molte vulnerabilità rilevanti provengono da problemi diversi, come la mancanza di controlli di validazione degli input e errori logici.

Infine, la sicurezza della memoria può essere gestita efficacemente in linguaggi come C++ mediante l’uso di pratiche come RAII (resource allocation is initialization) e l’incapsulamento del codice in classi con costruttori e distruttori ben testati.