Autenticazione compromessa e deserializzazione non sicura
Esplori come una gestione debole delle sessioni, il credential stuffing e le vulnerabilità di deserializzazione non sicura consentano di dirottare account ed eseguire codice.
Autenticazione compromessa e deserializzazione non sicura è una lezione Cloud & IT Cert Prep gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Cloud & IT Cert Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.
Che cos'è l'autenticazione compromessa?
Per autenticazione compromessa si intendono le debolezze nel modo in cui un'applicazione verifica l'identità degli utenti e gestisce le sessioni. Quando l'autenticazione è compromessa, gli attaccanti possono appropriarsi di password, chiavi o token di sessione per assumere l'identità di altri utenti. Questa categoria della OWASP Top 10 comprende un'ampia gamma di vulnerabilità: credenziali deboli, gestione inadeguata delle sessioni, MFA assente e archiviazione non sicura delle credenziali.
Credential stuffing e password spraying
Il credential stuffing utilizza grandi elenchi di coppie nome utente/password sottratte in precedenti violazioni dei dati e le prova su altri siti, sfruttando il riutilizzo delle password. Il password spraying adotta l'approccio opposto: prova un numero limitato di password comuni (ad esempio Password1!) su molti account, per evitare le soglie di blocco degli account. Entrambi gli attacchi hanno successo a causa di policy delle password deboli e dell'assenza di MFA.
# Password spraying concept (defensive awareness)
# Attacker tries 'Password1!' against 10,000 accounts
# rather than trying 10,000 passwords against 1 account
# This avoids triggering lockout policies (e.g., 5 attempts/account)
# Defense: MFA + adaptive authentication + rate limitingGestione debole delle sessioni
Le sessioni collegano gli utenti autenticati allo stato dell'applicazione. Le vulnerabilità di gestione debole delle sessioni includono: valori prevedibili dei token di sessione (ID sequenziali che gli attaccanti possono indovinare), token che non scadono mai, token trasmessi tramite HTTP anziché HTTPS e mancata invalidazione dei token al momento della disconnessione. Un attaccante che ottiene un token di sessione valido può impersonare l'utente senza conoscerne la password.
# Signs of weak session management:
# /login response sets:
# Set-Cookie: session=1042 (predictable, sequential)
# Missing: Secure; HttpOnly; SameSite flags
# Missing: session expiry / Max-Age
# Logout does NOT invalidate server-side sessionSession fixation e dirottamento della sessione
La session fixation costringe una vittima a utilizzare un ID di sessione scelto dall'attaccante. Ad esempio, un attaccante invia un link con un cookie di sessione preimpostato; dopo che la vittima si autentica, l'attaccante usa lo stesso ID di sessione per accedere all'account. Il session hijacking sottrae un token di sessione esistente tramite XSS, sniffing di rete (su connessioni non cifrate) o cookie rubati. La soluzione consiste nel rigenerare gli ID di sessione dopo l'accesso e nell'utilizzare HTTPS ovunque.
Archiviazione non sicura delle password
Archiviare le password in chiaro o utilizzando funzioni di hashing deboli (MD5, SHA-1) rappresenta un grave errore di autenticazione. Quando un database viene violato, le password in chiaro e gli hash deboli possono essere utilizzati immediatamente. L'archiviazione sicura delle password richiede un algoritmo di hashing adattivo progettato per le password: bcrypt, Argon2 o PBKDF2 con un salt casuale specifico per ogni utente. Questi algoritmi sono intenzionalmente lenti, rendendo il cracking offline costoso dal punto di vista computazionale.
# Python example — secure password hashing with bcrypt
import bcrypt
# Hash a password (includes random salt automatically)
password = b'UserSuperSecret123'
hashed = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# Verify
bcrypt.checkpw(password, hashed) # returns TrueChe cos'è la deserializzazione non sicura?
La serializzazione converte lo stato di un oggetto in un formato (JSON, XML, binario) per l'archiviazione o la trasmissione. La deserializzazione ricostruisce l'oggetto a partire da quel formato. La deserializzazione non sicura si verifica quando un'applicazione deserializza dati controllati dall'attaccante senza convalidarli, consentendo agli attaccanti di modificare gli oggetti serializzati per manipolare la logica dell'applicazione, aumentare i privilegi o eseguire codice arbitrario sul server.
Esempio di attacco di deserializzazione
Un modello di attacco comune prevede oggetti serializzati passati nei cookie o nei parametri API. Ad esempio, un'applicazione Java che utilizza ObjectInputStream.readObject() su dati non attendibili può consentire l'attivazione della Remote Code Execution (RCE) tramite catene di gadget presenti in librerie diffuse (Apache Commons Collections). L'attaccante crea un payload serializzato dannoso, lo invia all'applicazione e il codice viene eseguito durante la deserializzazione, spesso prima che venga eseguito qualsiasi controllo di autenticazione.
# Insecure deserializing pattern (Python pickle — dangerous)
import pickle
# Attacker-controlled payload
class Exploit:
def __reduce__(self):
import os
return (os.system, ('id',)) # executes 'id' on server
payload = pickle.dumps(Exploit())
pickle.loads(payload) # RCE! Never deserialize untrusted data with picklePrevenzione della deserializzazione non sicura
Le difese contro la deserializzazione non sicura includono: non deserializzare mai dati non attendibili utilizzando formati pericolosi come la serializzazione nativa Java o pickle di Python. Preferite formati contenenti solo dati (JSON, XML) alla serializzazione binaria. Se la deserializzazione è necessaria, implementate controlli di integrità (firmando l'oggetto serializzato con HMAC), utilizzate allowlist per limitare le classi che possono essere deserializzate ed eseguite il codice di deserializzazione in ambienti isolati e con privilegi ridotti.
# Safe approach: sign serialized data before transmitting
import hmac, hashlib, json
def serialize_safe(data, secret):
payload = json.dumps(data) # use JSON, not pickle
sig = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
return payload + '.' + sigL'autenticazione a più fattori come controllo
Multi-Factor Authentication (MFA) è il singolo controllo più efficace contro l'autenticazione compromessa. Anche se le credenziali vengono compromesse tramite phishing, credential stuffing o una violazione del database, un attaccante privo del secondo fattore non può autenticarsi. Microsoft riferisce che la MFA blocca oltre il 99,9% degli attacchi automatizzati di compromissione degli account. La MFA dovrebbe essere obbligatoria per gli account privilegiati e incoraggiata per tutti gli utenti.
Blocco degli account e limitazione della frequenza
Le policy di blocco degli account disabilitano temporaneamente un account dopo un numero definito di tentativi di accesso falliti, rallentando gli attacchi brute force. Tuttavia, i blocchi possono consentire attacchi di negazione del servizio contro utenti legittimi: gli aggressori attivano intenzionalmente i blocchi per impedire l'accesso. La limitazione della frequenza (il rallentamento delle risposte dopo ripetuti errori tramite un backoff esponenziale) e le challenge CAPTCHA riducono l'efficacia degli attacchi brute force con un rischio di DoS inferiore.
Autenticazione compromessa nell'OWASP Top 10
OWASP elenca la Broken Authentication tra i rischi critici, perché le vulnerabilità dell'autenticazione sono comuni e possono avere un impatto elevato. Tra gli indicatori principali di autenticazione compromessa rientrano: consentire attacchi automatizzati come il credential stuffing; consentire attacchi brute force o altri attacchi automatizzati; consentire password predefinite, deboli o note; utilizzare processi deboli di recupero delle credenziali; usare password in testo semplice o con hashing debole; e non disporre di un'autenticazione multifattore, oppure implementarla in modo inefficace.
Verifica rapida
Verifichi la Sua comprensione dei concetti di CompTIA Security+ (SY0-701) trattati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: l'autenticazione compromessa include sessioni deboli, credential stuffing e archiviazione non sicura delle password; la deserializzazione non sicura può portare all'esecuzione di codice remoto tramite oggetti serializzati dannosi; e MFA, hashing delle password con bcrypt, rigenerazione della sessione dopo l'accesso e dati serializzati firmati sono difese fondamentali. Nel prossimo argomento esamineremo il secure SDLC e gli strumenti SAST e DAST.
Domande Frequenti
La lezione «Autenticazione compromessa e deserializzazione non sicura» è gratuita?
Sì — il testo completo di «Autenticazione compromessa e deserializzazione non sicura» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Cloud & IT Cert Prep, passa a CoddyKit PRO. Il corso Cloud & IT Cert Prep include 4 lezioni in totale.
Cosa imparerò in «Autenticazione compromessa e deserializzazione non sicura»?
Esplori come una gestione debole delle sessioni, il credential stuffing e le vulnerabilità di deserializzazione non sicura consentano di dirottare account ed eseguire codice. Eserciti Cloud & IT Cert Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Cloud & IT Cert Prep?
Non è richiesta alcuna esperienza precedente. Cloud & IT Cert Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Autenticazione compromessa e deserializzazione non sicura»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Cloud & IT Cert Prep?
Sì. Ogni lezione Cloud & IT Cert Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- SQL injection e command injection
- Cross-Site Scripting (XSS) e CSRF
- Autenticazione compromessa e deserializzazione non sicura
- SDLC sicuro e strumenti SAST e DAST