Fallimenti Crittografici (OWASP A02): Guida Completa con Esempi
1 luglio 2026 · di Pentevo
I fallimenti crittografici (Cryptographic Failures) occupano il secondo posto nell'OWASP Top 10 2021. Sono la causa principale delle grandi violazioni di dati: database con password in chiaro, comunicazioni non cifrate, chiavi hardcoded nel codice.
Cosa si intende per fallimento crittografico
Non significa solo "non si usa la crittografia". Include qualsiasi errore nel proteggere i dati con la crittografia:
- Dati sensibili trasmessi in HTTP invece di HTTPS
- Password memorizzate in chiaro o con hashing debole (MD5, SHA1)
- Chiavi crittografiche hardcoded nel codice sorgente
- Algoritmi crittografici obsoleti (DES, RC4, MD5)
- Numeri casuali non crittograficamente sicuri usati per token o salt
- Certificati TLS scaduti o mal configurati
Le vulnerabilità più comuni
Password con hashing debole
Il caso più frequente e con conseguenze devastanti. Un database con password hashate con MD5:
MD5("password123") → 482c811da5d5b4bc6d497ffa98491e38
Con una GPU moderna, un attaccante può calcolare miliardi di hash MD5 al secondo. Un intero database di password MD5 può essere craccato in poche ore con tabelle arcobaleno precompilate.
La soluzione: usa bcrypt, Argon2id o scrypt con work factor appropriato. Questi algoritmi sono progettati per essere lenti e computazionalmente costosi, rendendo il brute force impraticabile.
# Sbagliato
import hashlib
hashed = hashlib.md5(password.encode()).hexdigest()
# Corretto
import bcrypt
hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))
Dati sensibili in chiaro nel database
Numeri di carte di credito, codici fiscali, dati medici memorizzati in chiaro. In caso di breach del database, tutti i dati sono immediatamente leggibili.
La soluzione: cifra i dati sensibili a riposo. Usa cifratura a livello di colonna del database o cifratura a livello applicativo con chiavi separate dai dati.
Chiavi hardcoded nel codice
SECRET_KEY = "mysupersecretkey123" # ← vulnerabilità critica
API_KEY = "sk-abc123def456"
Se il codice è in un repository (anche privato), questa chiave è compromessa. Se finisce su GitHub per sbaglio, è compromessa in pochi minuti (esistono bot che scansionano i commit in tempo reale).
La soluzione: usa variabili d'ambiente o sistemi di secrets management (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault).
TLS mal configurato
HTTPS non è automaticamente sicuro. Configurazioni errate includono:
- Supporto a protocolli obsoleti (TLS 1.0, TLS 1.1, SSLv3)
- Cipher suite deboli
- Certificati scaduti o self-signed in produzione
- Assenza di HSTS (HTTP Strict Transport Security)
La soluzione: usa configurazioni TLS aggiornate. Tools come SSL Labs (ssllabs.com/ssltest/) ti permettono di verificare la configurazione del tuo server gratuitamente.
Cookie senza flag di sicurezza
Cookie di sessione senza i flag Secure e HttpOnly:
- Senza
Secure: il cookie viene inviato anche su HTTP, intercettabile - Senza
HttpOnly: il cookie è accessibile via JavaScript, vulnerabile a XSS
La soluzione:
Set-Cookie: sessionId=abc123; Secure; HttpOnly; SameSite=Strict
Come identificare i fallimenti crittografici
Audit del codice:
- Cerca uso di MD5, SHA1 per password
- Cerca string hardcoded con pattern di chiavi (regex:
[A-Za-z0-9+/]{20,}) - Verifica i flag dei cookie di sessione
- Verifica la configurazione TLS
Test attivi:
- Usa proxy (Burp Suite) per verificare se i dati sensibili transitano in chiaro
- Verifica se le password vengono inviate o salvate in chiaro
- Analizza i JWT: decodifica l'header per vedere l'algoritmo usato
Tool automatici:
- SSL Labs per la configurazione TLS
- OWASP ZAP per test automatici
- Semgrep o CodeQL per analisi statica del codice
Classificazione dei dati
Il primo passo per proteggersi dai fallimenti crittografici è sapere quali dati hai e quanto sono sensibili:
Livello 0 - Pubblico: nessuna protezione richiesta Livello 1 - Interno: accesso autenticato, HTTPS Livello 2 - Confidenziale: cifratura a riposo, logging degli accessi Livello 3 - Riservato: cifratura a riposo e in transito, cifratura a livello campo, audit trail completo
I fallimenti crittografici spesso avvengono perché non si sa che certi dati sono sensibili, o perché la protezione viene aggiunta "dopo". La classificazione dei dati deve avvenire all'inizio del progetto, non a posteriori.
Domande frequenti
Cosa sono i fallimenti crittografici?
Sono vulnerabilità causate dall'uso errato o assente della crittografia per proteggere dati sensibili. Includono: dati trasmessi in chiaro, uso di algoritmi obsoleti (MD5, SHA1, DES), chiavi crittografiche deboli o hardcoded, password memorizzate senza hashing.
Qual è la differenza tra cifratura e hashing?
La cifratura è reversibile: con la chiave giusta si può decifrare. L'hashing è a senso unico: non si può ricavare il valore originale dall'hash. Le password devono essere hashate (non cifrate), perché il sistema non ha mai bisogno di recuperare la password in chiaro.
Quali algoritmi di hashing sono sicuri per le password?
bcrypt, Argon2, scrypt e PBKDF2. MD5 e SHA-1/256 non sono adatti per le password perché sono troppo veloci — un attaccante può provare miliardi di hash al secondo con hardware moderno.
Letture correlate
API Security: Le Best Practice per Proteggere le Tue API nel 2026
Le API sono il bersaglio preferito dagli attaccanti. Guida completa alle best practice di sicurezza per API REST e GraphQL: autenticazione, autorizzazione, rate limiting e molto altro.
SecurityFallimenti di Autenticazione (OWASP A07): Come Riconoscerli e Difendersi
I fallimenti di autenticazione permettono agli attaccanti di compromettere account utente e admin. Guida completa alle vulnerabilità e alle difese efficaci.
SecurityBroken Access Control: La Vulnerabilità #1 OWASP Spiegata
Il broken access control è la vulnerabilità più diffusa nel web. Scopri come funziona, gli esempi reali e come proteggere la tua applicazione.
SecurityPrompt Injection negli LLM: La Vulnerabilità che Minaccia l'AI nel 2026
La prompt injection è la vulnerabilità più critica dei sistemi basati su LLM. Scopri come funziona, le varianti principali e come proteggere le tue applicazioni AI.
Metti in pratica questi concetti
Pentevo Academy trasforma questi concetti in lezioni guidate, video e quiz — gratis.
Inizia a imparare gratis