La crittografia rappresenta uno dei metodi, forse il più importante e antico, per proteggere le informazioni e preservare l’integrità delle comunicazioni.
Tuttavia, anche piccoli errori nella gestione e implementazione dei sistemi crittografici possono aprire la porta ad attacchi devastanti, con gravi conseguenze per la privacy, la conformità normativa e l’affidabilità aziendale.

OWASP, nel suo report Top Ten, classifica le vulnerabilità crittografiche tra i problemi più rilevanti per la sicurezza delle applicazioni web, sottolineando l’importanza di prevenire i Cryptographic Failure per evitare esposizioni accidentali di dati sensibili.

Cryptographic Failure vulnerability
  1. Cos’è la vulnerabilità Cryptographic Failure?
  2. Cause principali dei Cryptographic Failures
  3. Esempi pratici di Cryptographic Failure
  4. Come si ricercano le vulnerabilità di Cryptographic Failures in un software
  5. Strategie per prevenire i Cryptographic Failures

Cos’è la vulnerabilità Cryptographic Failure?

I “Cryptographic Failures” rappresentano l’insieme di falle di sicurezza che emergono quando i dati sensibili non vengono adeguatamente protetti tramite misure crittografiche. Questi errori possono manifestarsi sotto forma di progettazione inadeguata, implementazione scorretta o gestione inefficace delle chiavi crittografiche. A differenza dei data breach, che derivano da accessi non autorizzati, le vulnerabilità crittografiche spesso si verificano a causa di configurazioni errate, algoritmi obsoleti o chiavi deboli, rendendo i dati visibili o modificabili da terzi senza autorizzazione.

Cause principali dei Cryptographic Failures

Mancata implementazione di algoritmi sicuri

La scelta di algoritmi crittografici sicuri e aggiornati è fondamentale.
Algoritmi come AES (Advanced Encryption Standard) per la cifratura e SHA-256 per l’hashing garantiscono livelli elevati di protezione.
Tuttavia, algoritmi obsoleti come MD5 e SHA-1 continuano ad essere utilizzati, nonostante si possano definire vulnerabili agli attacchi informatici.

Errori nella gestione delle chiavi

Le chiavi crittografiche devono essere uniche, conservate in sicurezza e ruotate periodicamente per prevenire exploit. Errori comuni come l’utilizzo di chiavi deboli o hard-coded (CWE-259), la mancanza di rotazione e la conservazione in repository di codice sorgente espongono facilmente i dati a rischio.

Utilizzo di protocolli e metodi obsoleti

Protocollo di trasmissione dei dati in chiaro o l’uso di metodi crittografici deboli come il padding PKCS #1 v1.5 costituiscono una debolezza critica. I dati devono essere cifrati end-to-end con protocolli sicuri (es. TLS 1.2 o superiori) e configurati con HSTS (HTTP Strict Transport Security) per evitare downgrade degli algoritmi e proteggere i dati sensibili in transito.

Cryptographic Failures impact

Esempi pratici di Cryptographic Failure

Scenario #1: dati trasferiti in chiaro
Un’applicazione web trasferisce dati sensibili, come le informazioni di autenticazione, utilizzando un protocollo non cifrato, come HTTP invece di HTTPS:

http://example.com/login?user=username&pass=password

Un attaccante posizionato su una rete non sicura, ad esempio una rete Wi-Fi pubblica, può intercettare il traffico e ottenere le credenziali dell’utente. Senza TLS (Transport Layer Security), tutte le informazioni scambiate possono essere viste in chiaro, esponendo i dati sensibili a rischi di intercettazione.

Scenario #2: chiavi crittografiche hard-coded
In un sistema di autenticazione, una chiave crittografica per cifrare i token di accesso è integrata direttamente nel codice sorgente:

String secretKey = "12345ABCDE";

Se il codice sorgente viene compromesso, o se un attaccante riesce a ottenere accesso al repository, la chiave hard-coded può essere facilmente estratta e utilizzata per generare o decifrare i token di accesso, permettendo agli attaccanti di impersonare altri utenti e accedere a risorse protette.

Scenario #3: utilizzo di algoritmi di hash obsoleti
Un’applicazione conserva le password degli utenti utilizzando un algoritmo di hash non sicuro, come MD5:

hashedPassword = MD5(password);

Gli algoritmi come MD5 non sono considerati sicuri poiché vulnerabili agli attacchi di collisione e possono essere facilmente compromessi utilizzando strumenti pubblicamente disponibili. Un attaccante potrebbe decifrare l’hash e ottenere le password in chiaro, guadagnando così l’accesso agli account utente.

Scenario #4: cifratura senza randomizzazione del IV
Un’applicazione cifra i dati utilizzando il metodo AES in modalità CBC (Cipher Block Chaining) ma riutilizza lo stesso vettore di inizializzazione (IV) per ogni sessione utente:

iv = "0000000000000000";

Il riutilizzo del vettore di inizializzazione permette agli attaccanti di correlare i dati cifrati e, tramite attacchi di tipo “known plaintext,” possono estrarre informazioni sensibili. In questo scenario, l’assenza di un IV randomizzato riduce significativamente la sicurezza della cifratura.

Scenario #5: mancato controllo della catena di certificazione
Un’applicazione si connette a un servizio esterno tramite HTTPS ma non verifica la catena di certificati:

https://example.com/sensitiveData

Se un attaccante riesce a posizionarsi come “man-in-the-middle” utilizzando un certificato non valido o auto-firmato, l’assenza di una verifica della catena permette all’attaccante di intercettare il traffico e ottenere dati sensibili. L’applicazione dovrebbe verificare che il certificato sia firmato da un’autorità di certificazione attendibile per prevenire attacchi MITM.

Come si ricercano le vulnerabilità di Cryptographic Failures in un software

Per individuare le vulnerabilità legate ai Cryptographic Failures in un software, si adottano diverse tecniche di verifica e analisi che consentono di identificare configurazioni crittografiche errate, implementazioni deboli o la mancanza di pratiche di sicurezza aggiornate.

Ecco i principali metodi per condurre un’analisi approfondita:

  • Code review con focus su pratiche di crittografia
  • Dynamic analysis con scansioni di sicurezza automatizzate
  • Analisi statica del codice (static code analysis)
  • Penetration testing specifico per la crittografia
  • Audit di sicurezza sui processi di key management
  • Analisi delle impostazioni di cifratura per i dati a riposo e in transito.

Strategie per prevenire i Cryptographic Failures

Classificazione dei dati e minimo di conservazione

Classificare i dati sensibili e conservare solo ciò che è necessario riduce la superficie di attacco.
L’adozione di pratiche come la tokenizzazione (PCI DSS compliant) permette di minimizzare il rischio, dato che i dati non archiviati non possono essere compromessi.

Uso di algoritmi e protocolli aggiornati

Assicurarsi che i protocolli e gli algoritmi siano aggiornati è cruciale per mantenere un alto livello di protezione.
Standard come AES per la cifratura e TLS 1.3 per la trasmissione dati proteggono le informazioni da attacchi avanzati, mentre la rotazione regolare delle chiavi riduce la probabilità di compromissione.

Gestione sicura delle chiavi crittografiche

Le chiavi devono essere generate con generatori casuali sicuri (CSPRNG) e mai hard-coded nel codice sorgente. Inoltre, è essenziale utilizzare un derivatore di chiavi per le password (es. PBKDF2 o bcrypt) per evitare che vengano compromesse. Le chiavi devono essere conservate in spazi sicuri e aggiornate periodicamente.

I Cryptographic Failures costituiscono una minaccia critica alla sicurezza dei dati. Gli errori di crittografia, se non corretti, possono esporre informazioni sensibili a terzi e provocare gravi danni finanziari e reputazionali. Investire in solide pratiche di progettazione crittografica e adottare politiche di gestione e implementazione rigorose sono passi fondamentali per evitare che queste vulnerabilità diventino un punto di ingresso per gli attacchi informatici. Adottare misure preventive e testare regolarmente i sistemi rappresentano un passo verso una difesa proattiva contro le minacce crittografiche.