Sommario
Una nuova vulnerabilità critica, CVE-2025-20188, è stata scoperta nel software Cisco IOS XE Wireless LAN Controller (WLC) fino alla versione 17.12.03. L’exploit consente upload di file arbitrari non autenticati grazie a un JSON Web Token (JWT) hard-coded, aprendo potenzialmente la strada all’esecuzione remota di codice (RCE). Questo attacco colpisce una delle piattaforme più utilizzate nella gestione delle reti wireless aziendali.
Origine della vulnerabilità: JWT e accesso Lua non protetto
L’analisi ha preso avvio confrontando le immagini ISO delle versioni vulnerabile e corretta del software WLC, precisamente C9800-CL-universalk9.17.12.03.iso e 17.12.04.iso. All’interno, sono stati individuati script Lua come ewlc_jwt_verify.lua
e ewlc_jwt_upload_files.lua
, responsabili della gestione dei token JWT e delle operazioni di upload.
Questi script sono referenziati nella configurazione del server OpenResty basato su Nginx, in particolare in /usr/binos/conf/nginx-conf/https-only/ap-conf/ewlc_auth_jwt.conf
, per due endpoint:
/aparchive/upload
/ap_spec_rec/upload
Questi percorsi permettono upload di file fino a 1,5 GB, previa verifica di un token JWT il cui segreto è letto dal file /tmp/nginx_jwt_key
. Il problema sorge quando il file della chiave segreta è assente: il sistema accetta un valore di default chiamato "notfound"
come segreto, permettendo a un attaccante di generare token JWT validi senza autenticazione.
Esecuzione dell’attacco: scrittura arbitraria con path traversal
Sfruttando il comportamento degli script Lua, un utente malevolo può caricare un file con nome ../../usr/binos/openresty/nginx/html/foo.txt
, scrivendolo fuori dalla directory prevista. In assenza di controlli di path traversal, questo permette di scrivere file in percorsi arbitrari del filesystem, incluso il web root, rendendoli pubblicamente accessibili.
Una volta ottenuta la scrittura, il passo successivo verso l’esecuzione di codice remoto (RCE) implica:
- Sovrascrivere file di configurazione usati da processi interni, monitorati da strumenti come
inotifywait
. - Causare un reload dei servizi mediante la scrittura di file “trigger”.
- Verificare il successo dell’esecuzione, ad esempio accedendo a endpoint controllati dall’attaccante.
In particolare, è stato individuato un processo di gestione (pvp.sh
) che consente esecuzione condizionata all’inserimento di specifici file in directory monitorate, facilitando la compromissione remota persistente.
Contesto e diffusione: un rischio infrastrutturale critico
Il software IOS XE con WLC è utilizzato in ambienti enterprise, campus universitari, enti governativi e ambienti mission-critical. Secondo i test condotti, l’endpoint vulnerabile su porta 8443 risulta attivo di default su installazioni fresche del controller C9800, ampliando la superficie d’attacco.
Il fatto che l’intero meccanismo JWT si basi su una chiave salvata in una directory temporanea e potenzialmente rigenerabile ad ogni reboot, senza un controllo più severo, rappresenta una debolezza sistemica.
Mitigazione e soluzioni temporanee
Cisco ha rilasciato una patch nella versione 17.12.04, ma per gli ambienti che non possono aggiornare immediatamente, è possibile disattivare l’opzione Out-of-Band AP Image Download. Questo reindirizzerà le operazioni di aggiornamento degli access point verso un metodo sicuro (CAPWAP), isolato da JWT e senza impatto sul client state.
Ulteriori mitigazioni raccomandate includono:
- Monitoraggio delle directory di upload tramite intrusion detection.
- Disabilitazione di porte non documentate (es. 8443).
- Validazione dei path e dei nomi file lato server.
- Verifica del file
/tmp/nginx_jwt_key
per presenza di chiavi residue o errate.
Un caso di architettura errata e rischio persistente
La vulnerabilità CVE-2025-20188 evidenzia i rischi derivanti da hardcoded secrets, verifica incompleta dell’input utente e uso scorretto di JWT in contesti enterprise. L’integrazione tra Lua e Nginx, seppur flessibile, può generare falle gravi in ambienti complessi se non auditata regolarmente. La lezione da trarre è che l’adozione di framework web anche su dispositivi embedded impone standard di sicurezza analoghi a quelli del web pubblico, pena compromissioni sistemiche.