La maggior parte degli incidenti di sicurezza che fanno notizia non sfruttano una falla nuova e sofisticata. Sfrutta qualcosa che è noto da anni, documentato, con una soluzione disponibile, che semplicemente non è stato affrontato. La vulnerabilità non era nascosta. Era sulla lista delle cose da fare a cui nessuno aveva dato la priorità.
Questo è scomodo da ammettere, ma è la verità che conta di più per coloro che guidano. Le categorie di vulnerabilità delle applicazioni sono notevolmente stabili. OWASP, punto di riferimento globale nella sicurezza delle applicazioni, pubblica da oltre due decenni lo stesso elenco, con piccole variazioni, dei rischi più comuni. Se i problemi sono noti e le soluzioni esistono, perché persistono?
La risposta non è tecnica. È gestione. La sicurezza delle applicazioni fallisce meno per la mancanza di conoscenza e più per la mancanza di priorità, processi e cultura. Questo testo parla di questo, scritto per coloro che decidono dove trascorrere il tempo il team, non solo per coloro che scrivono codice.
Cos'è una vulnerabilità, senza mistificazione
Una vulnerabilità è un punto debole di un sistema che può essere sfruttato per causare danni: divulgare dati, alterare informazioni, interrompere il servizio, prendere il controllo. Non c'è bisogno di un genio del male per essere esplorato. La maggior parte viene scoperta da strumenti automatizzati che scansionano l'intera Internet alla ricerca esattamente degli stessi errori ripetuti.
Ecco perché "nessuno sarà interessato alla nostra candidatura" è una frase pericolosa. La scansione è automatica e indiscriminata. Ciò che decide se sei un bersaglio non è la rilevanza della tua attività, è l’esistenza del difetto.
E il costo di un difetto sfruttato va ben oltre l'aspetto tecnico. Si verificano interruzioni del servizio, perdita di fiducia, danni alla reputazione e, in Brasile, esposizione alla LGPD quando sono coinvolti dati personali. Una vulnerabilità non trattata è una responsabilità aziendale, non solo un bug.
La OWASP Top 10 come mappa prioritaria
La OWASP Top 10 è il punto di partenza più sensato per qualsiasi organizzazione. Non si tratta di una lista di controllo completa sulla sicurezza, ma rappresenta il consenso della comunità sui rischi che appaiono maggiormente e causano i danni maggiori. Vale la pena conoscerne le principali categorie, tradotte nella lingua di chi decide.
Controllo degli accessi interrotto
La categoria più comune. Succede quando il sistema non controlla adeguatamente chi può fare cosa. Un utente accede ai dati di un altro modificando un numero nell'URL; una persona comune compie un'azione che dovrebbe essere compiuta da un amministratore. È il fallimento del “la porta è aperta a chi sa spingere”.
Difetti crittografici
Dati sensibili che viaggiano o vengono archiviati senza un'adeguata protezione, password archiviate in modo reversibile, connessioni senza crittografia. Nel contesto della LGPD ciò è particolarmente grave: i dati personali esposti da una crittografia assente o mal eseguita rappresentano un fallimento richiesto dalla legge.
Iniezione
Quando i dati inviati dall'utente vengono interpretati come un comando dal sistema. Il caso classico è l'SQL injection, in cui un campo del modulo diventa un'istruzione per il database. È uno degli errori più antichi e ancora più sfruttati, perché continua a essere commesso.
Design insicuro
Una categoria più recente e importante: difetti che non sono nel codice, ma nel design. Puoi implementare senza problemi un'architettura che non era sicura in base alla progettazione. La sicurezza deve essere sul tavolo da disegno, non solo nella revisione finale.
Configurazione errata della sicurezza
Server con configurazione predefinita, pannelli amministrativi esposti, messaggi di errore che rivelano dettagli interni, permessi troppo ampi. Spesso non c'è un codice sbagliato, c'è un ambiente mal configurato, il che è altrettanto pericoloso.
Componenti vulnerabili e obsoleti
Quasi tutto il software moderno è basato su librerie di terze parti. Quando una di queste dipendenze presenta un difetto noto e non viene aggiornata, l'applicazione eredita il problema. Mantenere l'inventario e aggiornare queste parti è un lavoro continuo, non un lavoro occasionale.
Le restanti categorie, errori di identificazione e autenticazione, errori di integrità di dati e software, errori di registrazione e monitoraggio e falsificazione di richieste lato server, completano l'elenco. Il punto non è memorizzare i dieci. Significa comprendere che esiste una mappa pubblica dei rischi più probabili e che ignorarla è una scelta.
La tesi: la sicurezza è una decisione gestionale, non un compito di fine progetto
La mia posizione è che il più grande punto debole della maggior parte delle applicazioni non è tecnico, ma organizzativo. Gli sviluppatori, in generale, sanno cosa sono l'iniezione e il controllo degli accessi interrotti. Ciò che manca è tempo, priorità e un processo che renda la sicurezza parte del lavoro e non una cosa in più da fare “quando possibile”.
Quando la sicurezza viene trattata come una fase alla fine del progetto, un controllo affrettato prima del lancio, si perde. La pressione delle scadenze vince sempre sulle cure che non hanno un proprietario chiaro. I fallimenti costosi sono quelli conosciuti e sottovalutati, non quelli che nessuno ha visto.
La leadership tecnologica che prende sul serio la sicurezza non richiede eroismo di squadra. Costruisci un sistema in cui fare la cosa giusta sia il modo più semplice: revisione del codice con un occhio di riguardo alla sicurezza, test automatizzati che rilevano difetti comuni, aggiornamento delle dipendenze come routine e la chiarezza che fornire soluzioni insicure non significa fornire.
Come ridurre le vulnerabilità nella pratica
Una difesa efficace è fatta di abitudini, non di un unico grande progetto. Trattare la sicurezza come parte del ciclo di sviluppo, piuttosto che come un evento isolato, è ciò che differenzia le organizzazioni mature.
Alcune pratiche hanno un rendimento sproporzionato. La convalida e il trattamento di tutti gli input dell'utente come non attendibili elimina intere classi dall'iniezione. Applicando il principio del privilegio minimo, dando a ciascuna parte del sistema solo l’accesso di cui ha bisogno, si limita il danno quando qualcosa non funziona. Mantenere aggiornate le dipendenze chiude la porta ai difetti noti. La registrazione e il monitoraggio consentono di scoprire un incidente in poche ore, non in mesi.
Vale anche la pena adottare scansioni automatizzate nel flusso di sviluppo stesso, in modo che i difetti comuni vengano identificati prima di raggiungere la produzione. L’automazione non sostituisce il pensiero, ma toglie il lavoro ripetitivo di ricerca degli errori già catalogati.
Per i sistemi che gestiscono i dati dei cittadini, comuni nel settore pubblico, questo si collega direttamente a LGPD e alla continuità del servizio. Un guasto in questo caso non è solo un rischio tecnico; È un rischio legale e di fiducia pubblica.
Limiti e insidie
È onesto riconoscere che la sicurezza assoluta non esiste. L’obiettivo non è rendere l’applicazione a prova di manomissione, ma renderla sufficientemente costosa da poter attaccare e sufficientemente resiliente da rilevare e rispondere quando qualcosa va storto.
La trappola più comune è il teatro della sicurezza: politiche estese, documenti di conformità e strumenti costosi che danno un senso di protezione senza ridurre il rischio reale. La conformità sulla carta non è sicurezza nella pratica. Ciò che protegge è ciò che viene implementato e testato, non ciò che è scritto.
Un'altra trappola è considerare la sicurezza come una responsabilità esclusiva di uno specialista o di un'area isolata. Quando la sicurezza è "il problema degli addetti alla sicurezza", il resto del team perde la responsabilità. La vera difesa è distribuita: chiunque scriva o configuri qualcosa ha un ruolo.
La vulnerabilità conosciuta e ignorata è una decisione, non un incidente
La frase che vale la pena ricordare è semplice: quasi tutte le vulnerabilità sfruttate erano conosciute ed evitabili. Questo è spaventoso, ma anche liberatorio, perché significa che la maggior parte del rischio è sotto il nostro controllo. Non dipendiamo dalla previsione dell’attacco senza precedenti. Dipendiamo dal trattare ciò che già sappiamo.
La massima sicurezza delle applicazioni è, in sostanza, la priorità principale. È decidere che fornire un'assicurazione è parte della fornitura, che aggiornare le dipendenze non è una perdita di tempo, che il fallimento noto e trascurato è una decisione a cui qualcuno risponde. OWASP ci fornisce la mappa. Ciò che manca, quasi sempre, è la volontà di seguirla.
Se la tua organizzazione considera la sicurezza come un passaggio finale piuttosto che come una pratica continua, vale la pena rivedere questo processo prima che il prossimo incidente lo faccia per te. Ho altri testi sul blog sulla sicurezza, sulla LGPD](/post/lgpd-startups-compliance-protecao-dados) e sullo sviluppo sicuro, e sono disponibile a parlare con chi sta strutturando questo fronte.
Leggi anche
- La sicurezza nelle applicazioni web: i fondamenti che nessuno può ignorare
- Prevenzione degli attacchi - Framework per piccoli team
- La sicurezza nelle applicazioni web: l'architettura spiegata per i principianti
- Autorizzazione e permessi: buone pratiche per impedire l'accesso non autorizzato
- Certificati post-quantistici e PKI: cosa dovrebbero pianificare adesso i manager pubblici
- Crittografia dei dati: come applicarla nello sviluppo quotidiano