
Il Broken Access Control è la principale vulnerabilità nella sicurezza delle applicazioni web secondo l’OWASP Top 10 del 2021. Questa vulnerabilità si verifica quando le restrizioni su quali utenti possono vedere o usare le risorse non sono correttamente applicate, rendendo possibile a malintenzionati accedere, modificare, o distruggere dati a cui non dovrebbero avere accesso. Questo tipo di controllo è fondamentale per garantire che solo utenti autorizzati possano accedere a determinate funzioni o dati sensibili.

Un esempio comune di Broken Access Control è la manipolazione di metadati come un JSON Web Token (JWT) o i cookie per elevare i privilegi dell’utente. Queste manipolazioni possono consentire l’accesso non autorizzato a dati o funzionalità critiche. Configurazioni scorrette di CORS possono permettere accessi API da origini non autorizzate, esponendo ulteriormente le applicazioni a rischi di sicurezza.
Per prevenire il Broken Access Control, è essenziale adottare strategie di mitigazione come il principio del deny by default, che nega l’accesso a tutto se non specificamente consentito. È anche importante disabilitare la lista delle directory del server web e assicurarsi che i file metadati e di backup non siano presenti nelle root del web. Monitorare e limitare i fallimenti nei controlli di accesso può aiutare a minimizzare il danno causato dagli attacchi automatizzati.

Christmas Sale -40% 𝗖𝗵𝗿𝗶𝘀𝘁𝗺𝗮𝘀 𝗦𝗮𝗹𝗲! Sconto del 𝟰𝟬% 𝘀𝘂𝗹 𝗽𝗿𝗲𝘇𝘇𝗼 𝗱𝗶 𝗰𝗼𝗽𝗲𝗿𝘁𝗶𝗻𝗮 del Corso "Dark Web & Cyber Threat Intelligence" in modalità E-Learning sulla nostra Academy!🚀
Fino al 𝟯𝟭 𝗱𝗶 𝗗𝗶𝗰𝗲𝗺𝗯𝗿𝗲, prezzi pazzi alla Red Hot Cyber Academy. 𝗧𝘂𝘁𝘁𝗶 𝗶 𝗰𝗼𝗿𝘀𝗶 𝘀𝗰𝗼𝗻𝘁𝗮𝘁𝗶 𝗱𝗲𝗹 𝟰𝟬% 𝘀𝘂𝗹 𝗽𝗿𝗲𝘇𝘇𝗼 𝗱𝗶 𝗰𝗼𝗽𝗲𝗿𝘁𝗶𝗻𝗮.
Per beneficiare della promo sconto Christmas Sale, scrivici ad [email protected] o contattaci su Whatsapp al numero di telefono: 379 163 8765.
Se ti piacciono le novità e gli articoli riportati su di Red Hot Cyber, iscriviti immediatamente alla newsletter settimanale per non perdere nessun articolo. La newsletter generalmente viene inviata ai nostri lettori ad inizio settimana, indicativamente di lunedì. |
Il Broken Access Control si verifica quando un’applicazione non gestisce correttamente le autorizzazioni degli utenti. Ciò può permettere a utenti non autorizzati di accedere a funzionalità o dati riservati. Questo sbaglio può verificarsi in diversi modi, tra cui la manipolazione dei metadati come JSON Web Token (JWT), la modifica degli URL, e l’uso improprio delle configurazioni CORS.
Ad esempio, un utente malevolo potrebbe manipolare un cookie o un campo nascosto per elevare i suoi privilegi. Le applicazioni devono implementare controlli di accesso rigorosi per prevenire tale abuso.
Rilevare le vulnerabilità di broken access control richiede un’analisi approfondita. Gli strumenti di test automatizzati possono essere utili, ma verifiche manuali da parte di esperti di sicurezza sono spesso necessarie. Controllare le autorizzazioni dopo l’autenticazione è cruciale per garantire che solo gli utenti autorizzati possano accedere a certe funzioni.
Analisti della sicurezza cercano segnali di manipolazione dei parametri, modifiche degli URL, e accessi non autorizzati tramite richieste API. Questi test devono coprire tutti i metodi HTTP, inclusi POST, PUT e DELETE, per identificare correttamente i potenziali punti deboli.
Un esempio comune di broken access control è il bypass dei controlli di accesso tramite manipolazione dell’URL. Un utente potrebbe cambiare l’ID in un URL per accedere a informazioni che non dovrebbe vedere. In siti mal configurati, la mancata verifica sui permessi degli utenti permette a chiunque di modificare o eliminare dati sensibili.
Un’altra pratica pericolosa è la configurazione errata di CORS, che permette accessi API da origini non autorizzate. Questo scenario può esporre dati critici a terzi non attendibili. Implementare politiche di sicurezza robuste è essenziale per proteggere le applicazioni contro tali minacce.
Nel complesso, prevenire il broken access control richiede una combinazione di controlli di sicurezza stretti e una verifica continua delle autorizzazioni utente.

L’accesso non autorizzato a informazioni sensibili può causare furto di dati. Quando gli attaccanti ottengono dati personali o aziendali, possono utilizzarli per scopi malevoli, come il furto di identità o il ricatto.
Perdita di fiducia è un’altra conseguenza. Se i clienti scoprono che i loro dati non sono sicuri, possono decidere di non utilizzare più il servizio. Questo può portare a una perdita significativa per l’azienda.
La compromissione della sicurezza delle applicazioni può anche portare a ulteriori exploit da altri attaccanti, aumentando il rischio complessivo per l’organizzazione.
Gli attaccanti utilizzano vari metodi per abusare del controllo di accesso. Un metodo comune è modificare l’URL o i parametri per bypassare i controlli di accesso. Questo può essere realizzato facilmente attraverso la manipolazione diretta dell’URL nel browser.
Un altro metodo è l’uso di strumenti di attacco API. Gli attaccanti possono inviare richieste con metodi HTTP come POST, PUT e DELETE senza le corrette verifiche di autorizzazione. Questo permette loro di eseguire azioni privilegiate senza autorizzazione.
Modifiche allo stato dell’applicazione sono utilizzate per aggirare i controlli di accesso interni, permettendo agli attaccanti di ottenere accesso non autorizzato.
Uno studio di caso noto è l’attacco a un’applicazione bancaria che ha condotto a una violazione dei dati. Gli attaccanti sono stati in grado di modificare i parametri dell’URL, accedendo ai conti bancari di altri utenti e trasferendo denaro senza autorizzazione.
Un’altra situazione riguarda un’applicazione di e-commerce. Gli attaccanti hanno usato strumenti di attacco API per modificare ordini e prezzi, causando perdite finanziarie all’azienda.
Un esempio comune è anche l’accesso non autorizzato a sistemi aziendali interni, dove gli attaccanti compromettono le credenziali e accedono a documenti riservati, mettendo a rischio la sicurezza dell’intera organizzazione.

Per affrontare il problema del Broken Access Control, è essenziale implementare strategie di mitigazione efficaci che comprendano i principi di sicurezza del controllo di accesso, le migliori pratiche di sviluppo e implementazione, e l’uso di strumenti e tecniche di test.
Nel controllo di accesso, il principio del minimum privilege richiede che gli utenti abbiano solo i permessi necessari per svolgere le loro attività. Questo riduce i rischi se vengono compromessi.
La politica deny by default implica che gli accessi siano vietati, a meno che non siano esplicitamente consentiti. Ogni accesso deve essere verificato e approvato.
Le liste di controllo degli accessi (ACL) e i modelli di controllo di accesso come il Role-Based Access Control (RBAC), sono utili per segmentare i permessi in modo accurato e gestibile, garantendo che solo utenti specifici possano accedere a risorse particolari.
Immaginiamo di avere una piccola applicazione web dove ci sono due pagine principali: una pagina utente normale e una pagina di amministrazione. La pagina di amministrazione dovrebbe essere accessibile solo agli amministratori, ma a causa di un errore di controllo degli accessi, qualsiasi utente autenticato può accedervi.
pythonCopy codefrom flask import Flask, request, redirect, url_for, render_template, session
app = Flask(__name__)
app.secret_key = 'supersecretkey'
# Simuliamo un database di utenti
users = {
'admin': {'password': 'adminpass', 'role': 'admin'},
'user1': {'password': 'user1pass', 'role': 'user'}
}
@app.route('/')
def home():
if 'username' in session:
return f"Ciao {session['username']}!<br><a href='/admin'>Vai alla pagina di amministrazione</a><br><a href='/logout'>Logout</a>"
return "Ciao! <br><a href='/login'>Login</a>"
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username in users and users[username]['password'] == password:
session['username'] = username
session['role'] = users[username]['role']
return redirect(url_for('home'))
return 'Credenziali non valide'
return render_template('login.html')
@app.route('/admin')
def admin():
# Problema di Broken Access Control: non controlliamo se l'utente è un admin
if 'username' in session:
return f"Pagina di Amministrazione - Solo per admin.<br>Ciao {session['username']}!<br><a href='/logout'>Logout</a>"
return redirect(url_for('login'))
@app.route('/logout')
def logout():
session.pop('username', None)
session.pop('role', None)
return redirect(url_for('home'))
if __name__ == '__main__':
app.run(debug=True)
htmlCopy code<!doctype html>
<html lang="en">
<head>
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
Il problema qui è che chiunque si logga può accedere alla pagina /admin, anche se non è un amministratore. Non c’è nessun controllo per verificare se l’utente ha il ruolo di admin.
Per risolvere il problema di Broken Access Control, dobbiamo aggiungere un controllo nella funzione admin per assicurarci che solo gli amministratori possano accedere a quella pagina:
pythonCopy code@app.route('/admin')
def admin():
if 'username' in session and session.get('role') == 'admin':
return f"Pagina di Amministrazione - Solo per admin.<br>Ciao {session['username']}!<br><a href='/logout'>Logout</a>"
return redirect(url_for('login'))
admin verifica se c’è una sessione attiva controllando 'username' in session.session.get('role')) è 'admin'. Solo se entrambe le condizioni sono vere, l’utente può accedere alla pagina di amministrazione.Questa modifica garantisce che solo gli utenti con il ruolo di amministratore possano accedere alla pagina di amministrazione, risolvendo così il problema di Broken Access Control.
Durante lo sviluppo, è essenziale riutilizzare i meccanismi di controllo di accesso standardizzati in tutta l’applicazione, invece di crearli separatamente per ogni funzionalità. Questo riduce la possibilità di errori.
Implementare modelli di controllo che rafforzano la proprietà dei record, assicurando che solo i proprietari possano eseguire azioni complesse sui propri dati. Inserire session handling efficace, invalidando sessioni al logout.
Il rate limiting sugli accessi ai controlli API è un’altra strategia per limitare i danni causati da attacchi automatizzati, come menzionato su OWASP.
Il codice deve essere sottoposto a revisione frequente per rilevare eventuali vulnerabilità nel controllo di accesso. Il OWASP Testing Guide fornisce linee guida dettagliate su come condurre questi test.
Usare strumenti di test automatici aiuta a identificare punti deboli e garantisce che i controlli di accesso siano correttamente implementati. Per esempio, strumenti come Burp Suite e OWASP ZAP sono molto apprezzati per testare le vulnerabilità di sicurezza.
P
Immagina di avere una piccola applicazione web dove ci sono due pagine principali: una pagina utente normale e una pagina di amministrazione. La pagina di amministrazione dovrebbe essere accessibile solo agli amministratori, ma a causa di un errore di controllo degli accessi, qualsiasi utente autenticato può accedervi.
pythonCopy codefrom flask import Flask, request, redirect, url_for, render_template, session
app = Flask(__name__)
app.secret_key = 'supersecretkey'
# Simuliamo un database di utenti
users = {
'admin': {'password': 'adminpass', 'role': 'admin'},
'user1': {'password': 'user1pass', 'role': 'user'}
}
@app.route('/')
def home():
if 'username' in session:
return f"Ciao {session['username']}!<br><a href='/admin'>Vai alla pagina di amministrazione</a><br><a href='/logout'>Logout</a>"
return "Ciao! <br><a href='/login'>Login</a>"
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username in users and users[username]['password'] == password:
session['username'] = username
session['role'] = users[username]['role']
return redirect(url_for('home'))
return 'Credenziali non valide'
return render_template('login.html')
@app.route('/admin')
def admin():
# Problema di Broken Access Control: non controlliamo se l'utente è un admin
if 'username' in session:
return f"Pagina di Amministrazione - Solo per admin.<br>Ciao {session['username']}!<br><a href='/logout'>Logout</a>"
return redirect(url_for('login'))
@app.route('/logout')
def logout():
session.pop('username', None)
session.pop('role', None)
return redirect(url_for('home'))
if __name__ == '__main__':
app.run(debug=True)
htmlCopy code<!doctype html>
<html lang="en">
<head>
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
Il problema qui è che chiunque si logga può accedere alla pagina /admin, anche se non è un amministratore. Non c’è nessun controllo per verificare se l’utente ha il ruolo di admin.
Per risolvere il problema di Broken Access Control, dobbiamo aggiungere un controllo nella funzione admin per assicurarci che solo gli amministratori possano accedere a quella pagina:
pythonCopy code@app.route('/admin')
def admin():
if 'username' in session and session.get('role') == 'admin':
return f"Pagina di Amministrazione - Solo per admin.<br>Ciao {session['username']}!<br><a href='/logout'>Logout</a>"
return redirect(url_for('login'))
admin verifica se c’è una sessione attiva controllando 'username' in session.session.get('role')) è 'admin'. Solo se entrambe le condizioni sono vere, l’utente può accedere alla pagina di amministrazione.Questa modifica garantisce che solo gli utenti con il ruolo di amministratore possano accedere alla pagina di amministrazione, risolvendo così il problema di Broken Access Control.
Penetratio tests periodici sono cruciali per simulare attacchi reali e vedere come il sistema resiste agli stessi. Questi test devono essere eseguiti da esperti per massimizzare la loro efficacia.
Seguici su Google News, LinkedIn, Facebook e Instagram per ricevere aggiornamenti quotidiani sulla sicurezza informatica. Scrivici se desideri segnalarci notizie, approfondimenti o contributi da pubblicare.

CybercrimeC’è un momento preciso, quasi sempre notturno, in cui la curiosità supera la prudenza. Un repository appena aperto, poche stelle ma un exploit dal punteggio altissimo, il file README scritto bene quanto basta da sembrare…
CybercrimeUna campagna di cyberspionaggio su larga scala, caratterizzata da un elevato livello di automazione, sta colpendo in modo sistematico l’infrastruttura cloud che supporta numerose applicazioni web moderne. In meno di 48 ore, decine di migliaia…
InnovazionePier Giorgio Perotto (per chi non conosce questo nome), è stato un pioniere italiano dell’elettronica, che negli anni 60 quando lavorava presso la Olivetti, guidò il team di progettazione che costruì il Programma 101 (o…
VulnerabilitàQuando si parla di sicurezza informatica, non si può mai essere troppo prudenti. Inoltre quando si parla di backdoor (o di presunte tali), la domanda che segue è: chi l’ha inserita? Era per scopo di…
CybercrimeSecondo quanto appreso da fonti interne di RedHotCyber, l’offensiva digitale che sta creando problemi al Sistema Postale Nazionale in Francia è stata ufficialmente rivendicata dal collettivo hacker filo-russo NoName057(16). Gli analisti confermano che l’azione rientra…