I ricercatori di Argus Systems hanno reso pubblica una vulnerabilità presente da 27 anni in OpenBSD, sistema operativo noto proprio per la sua attenzione maniacale alla sicurezza. Il problema, che affligge lo stack PPP del sistema operativo, consentiva di aggirare completamente l’autenticazione PAP utilizzando credenziali vuote, senza conoscere nome utente o password. La falla è comparsa a partire dal lontano 1999, durante l’importazione del codice originario da FreeBSD, e ha attraversato indisturbata decine di versioni della piattaforma.
Una vulnerabilità nascosta nel cuore dell’autenticazione PPP su OpenBSD
La falla interessa la funzione sppp_pap_input(), componente del sottosistema utilizzato da OpenBSD per la gestione delle connessioni PPP sincrone e delle implementazioni PPPoE. Durante la fase di autenticazione, il protocollo PAP richiede al client di trasmettere nome utente e password al sistema che svolge il ruolo di autenticatore.
Il codice vulnerabile confrontava le credenziali ricevute con quelle configurate localmente mediante la funzione bcmp(). Il problema nasceva dal fatto che la lunghezza delle stringhe da confrontare proveniva direttamente dai pacchetti inviati dall’attaccante. Se il campo name_len o passwd_len assumeva valore zero, la chiamata bcmp() restituiva automaticamente successo perché non esistevano byte da confrontare. In pratica il controllo di autenticazione terminava positivamente anche in assenza totale di credenziali.
Si tratta di un errore estremamente semplice da comprendere a posteriori. Il codice verificava soltanto che le lunghezze non superassero un limite massimo consentito, ma non controllava che coincidessero con la lunghezza effettiva delle credenziali memorizzate.
Il problema di sicurezza pluridecennale di OpenBSD non interessa tutti
La vulnerabilità vecchia di 27 anni non interessa genericamente tutti i server OpenBSD. Il codice coinvolto appartiene infatti al sottosistema PPP e, più precisamente, alla gestione dell’autenticazione PAP all’interno delle connessioni PPPoE e PPP sincrone. Se il sistema non utilizza questi componenti, la falla rimane sostanzialmente inaccessibile agli utenti non autorizzati.
Nella maggior parte delle installazioni, OpenBSD è impiegato come firewall, router, sistema DNS, server web, mail server oppure piattaforma per servizi di rete. In questi scenari il protocollo PAP non entra quasi mai in gioco.
Un server OpenBSD che utilizza esclusivamente Ethernet, VLAN, VPN IPsec, WireGuard, OpenVPN o servizi TCP/IP tradizionali non espone il percorso contenente il codice vulnerabile. Anche se il componente esiste nel sistema operativo, nessun pacchetto di rete può raggiungere la funzione incriminata. In tutte queste configurazioni, quindi, il rischio è quindi trascurabile.
La situazione cambia completamente quando OpenBSD svolge il ruolo di server PPPoE: in questo caso il sistema accetta richieste di autenticazione provenienti dai client e verifica le credenziali PAP ricevute durante la fase di connessione. Qui la vulnerabilità diventa immediatamente sfruttabile.
Perché PPPoE esiste ancora oggi
PPPoE, acronimo di Point-to-Point Protocol over Ethernet, nasce alla fine degli anni ’90 per consentire ai provider Internet di mantenere i meccanismi di autenticazione e contabilizzazione tipici delle connessioni dial-up anche sulle nuove reti broadband basate su Ethernet.
Invece di assegnare automaticamente l’accesso alla rete, il cliente deve stabilire una sessione PPP, autenticarsi e solo successivamente può ottenere connettività IP.
Ancora oggi molti operatori DSL e FTTH utilizzano PPPoE: quando un router domestico richiede username e password per collegarsi a Internet, molto spesso dietro le quinte sta instaurando una sessione PPPoE verso l’infrastruttura dell’operatore di telecomunicazioni.
PPPoE crea una sorta di “tunnel” tra il router del cliente e l’apparato di accesso dell’operatore, consentendo autenticazione, gestione della sessione e raccolta di informazioni per la fatturazione o il controllo degli accessi.
Chi utilizza il lato vulnerabile della connessione
Quando un utente installa OpenBSD sul proprio computer o sul proprio firewall e utilizza PPPoE per collegarsi al provider, il sistema svolge normalmente il ruolo di client: a partire dalle credenziali inserite, tenta di autenticarsi presso il server dell’operatore. La vulnerabilità non interessa direttamente questo scenario.
Il codice vulnerabile è eseguito quando OpenBSD si trova dall’altra parte della comunicazione, cioè quando deve verificare le credenziali ricevute. In altre parole, il sistema vulnerabile è quello che fa da autenticatore PAP, non quello che si limita a presentare username e password.
I primi soggetti interessati dall’aggiornamento, nel frattempo distribuito da OpenBSD, sono quindi gli operatori di rete che utilizzano il sistema operativo come piattaforma per la terminazione PPPoE degli utenti.
Non si parla necessariamente dei grandi provider nazionali: molti ISP utilizzano apparati dedicati di altri produttori oppure sistemi basati su Linux e software specializzati per la gestione delle connessioni broadband.
Perché la vulnerabilità è comunque importante
Qualcuno potrebbe chiedersi perché una falla che colpisce una configurazione specifica stia ricevendo tanta attenzione.
Da un lato il bypass consentiva di superare completamente un controllo di autenticazione, uno degli errori più gravi che possano esistere in un software di rete. Dall’altro lato il bug era presente dal 1999 ed è rimasto invisibile per 27 anni in un progetto che ha costruito gran parte della propria reputazione sulla revisione continua del codice.
L’aspetto più sorprendente non è tanto il numero di sistemi potenzialmente esposti oggi, quanto il fatto che un semplice controllo mancante sulle lunghezze delle credenziali abbia attraversato quasi tre decenni di sviluppo senza attirare l’attenzione di sviluppatori, revisori e ricercatori.