CVE-2026-13735 in Zephyrinformazioni

Riassunto

di VulDB • 29/08/2026

L'implementazione di WireGuard in Zephyr, contenuta nel file subsys/net/lib/wireguard/wg_crypto.c, gestiva erroneamente i pacchetti keepalive. Nella funzione wg_process_data_message(), qualsiasi messaggio transport-data di tipo 4 con un payload esattamente lungo 16 byte (ovvero un plaintext vuoto seguito da un tag Poly1305 nudo, che corrisponde a un pacchetto keepalive) veniva accettato e restituito immediatamente, prima ancora che venisse chiamata la funzione wg_decrypt_packet(). Di conseguenza, il tag di autenticazione Poly1305 non era mai verificato; gli unici controlli precedenti erano una ricerca dell'indice del ricevitore in chiaro (get_peer_keypair_for_index() sui dati data_hdr->receiver forniti dall'attaccante) e un controllo della validità/scadenza della chiavetta crittografica che non utilizzava meccanismi crittografici.

Il percorso è raggiungibile interamente dalla rete: il traffico UDP in ingresso sulla porta di WireGuard viene instradato da wg_input() verso handle_transport_data() e successivamente a wg_process_data_message(). L'indice del ricevitore, lungo 32 bit, viene trasmesso in chiaro nei messaggi di handshake e dati di WireGuard; un osservatore on-path può quindi apprenderlo direttamente, mentre un attaccante off-path potrebbe tentare una forza bruta contro la porta UDP. In presenza di una sessione attiva con indice valido per quel ricevitore, un attaccante potrebbe inviare un payload casuale lungo 16 byte e farlo accettare senza possedere la chiave della sessione.

L'accettazione del messaggio non autenticato ha causato l'osservazione da parte dello strato di gestione di un segnale NET_EVENT_VPN_CONNECTED falsificato (impostando peer->first_valid e notificando eventuali listener net_mgmt) ed ha incrementato la statistica keepalive-RX. L'impatto è limitato all'integrità di questo segnale di stato: non viene decifrato né iniettato alcun plaintext, nessuna chiave viene divulgata e il percorso a ritorno anticipato non aggiorna l'endpoint del peer o i timer di liveness; pertanto, non vi sono conseguenze relative all'iniezione di traffico, al takeover della sessione o alla disponibilità.

La correzione rimuove il ritorno anticipato pre-decrittazione in modo che un payload lungo 16 byte venga elaborato da wg_decrypt_packet(), la quale verifica il tag Poly1305 sul plaintext vuoto, seguita dal controllo anti-replay esistente; solo un messaggio autenticato e non replay è quindi riconosciuto come keepalive. I keepalive falsificati ora falliscono il controllo del tag e vengono conteggiati come errori di decrittazione.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsabile

Zephyr

Prenotare

29/06/2026

Divulgazione

29/08/2026

Moderazione

accettato

CPE

pronto

EPSS

0.00000

KEV

no

Attività

molto basso

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!