Le vulnerabilità dei programmi sono tipicamente generate da un errore nella progettazione o nell'implementazione del software. Si indica tipicamente con exploit l'esecuzione delle azioni necessarie ad approfittare di una vulnerabilità del sistema per sferrare un attacco. La vulnerabilità in se può essere sfruttata solo mettendo in opera un procedimento apposito, il più delle volte complesso, volto a sfruttarla per danneggiare la sicurezza del sistema.
Possono essere vulnerabili sia i sistemi ad uso personale sia i server, ma gli exploit avvengono più frequentemente sui server che, essendo sempre accesi e connessi, sono maggiormente esposti. Le vulnerabilità del software possono dipendere a volte da errate configurazioni ed installazioni, fatte dall'amministratore o dagli stessi utenti, che rendono un sistema robusto facilmente accedibile dall'esterno. Ad esempio concedere l'uso di programmi che operano in modalità superutente, aumenta notevolmente il grado di vulnerabilità del sistema operativo.
Esistono appositi tool che consentono di scoprire le vulnerabilità presenti in un certo sistema, attraverso un insieme di operazioni di vulnerability assessment. La migliore difesa verso la vulnerabilità del software resta comunque il frequente aggiornamento e l'installazione di tutti i moduli di correzione offerti dal produttore (patch).