Un server che non fa nulla non è un server utile. Un file di testo non può essere eseguibile da solo, ma generalmente l'elaborazione deve essere eseguita su di esso. Le vulnerabilità di Zero-day non sono in genere problemi con la normale funzionalità del programma, ma piuttosto sfruttano oscuri errori di programmazione come il fatto che la funzionalità viene compromessa quando viene inviato un particolare input non valido.
Nell'esempio del tuo server di posta, forse c'è un filtro antispam che lo analizza e se inserisci una certa quantità di e-mail provoca un bug nel comportamento del filtro antispam. O forse quando si invia una richiesta SMTP non valida si può ottenere per eseguire codice arbitrario che si inserisce nella richiesta SMTP non valida. Le e-mail stesse possono essere di testo, ma quel testo deve essere utilizzato a un certo punto. I protocolli per gestire lo scambio di questi messaggi devono anche eseguire esecuzioni più avanzate e devono scrivere e leggere le informazioni dal disco.
Una possibile vulnerabilità zero day potrebbe essere presente in qualsiasi parte del processo e dal momento che gli sviluppatori non sono perfetti, qualsiasi parte di esso potrebbe potenzialmente avere un problema. L'unico modo per un computer di essere perfettamente sicuro (verso il mondo esterno) è di non farlo affatto rispondere al mondo esterno. Se si espone qualsiasi tipo di funzionalità interattiva, allora è possibile che un bug in tale funzionalità possa consentire l'esecuzione di comandi arbitrari alimentando l'input che sovrascrive la memoria con una chiamata al codice inclusa con l'input.
Questo è chiamato overflow del buffer e, sebbene non sia l'unico tipo di vulnerabilità zero day, è piuttosto comune. Nella memoria, non c'è alcuna differenza tra i dati e le istruzioni del programma. Le cose chiamate puntatori dicono al computer dove andare a cercare i dati o le sue prossime istruzioni. Se è possibile inserire istruzioni come dati e quindi modificare un puntatore per indicare al codice del programma di eseguire il codice inserito nella porzione di dati, penserà che sta seguendo il programma anziché eseguire i dati. Ci sono alcune misure tecniche che rendono questo un po 'più difficile da fare, ma questa è l'idea di base e non c'è davvero un modo perfetto per fermarlo.