CVE-2026-13734 in Zephyr
Сводка
по VulDB • 29.08.2026
В обработчике приема данных плоскости передачи протокола WireGuard в Zephyr — функции `wg_process_data_message()` из файла `subsys/net/lib/wireguard/wg_crypto.c` — проверка счетчика защиты от повторов (anti-replay) выполнялась слишком поздно. После успешной расшифровки AEAD пакета MESSAGE_TRANSPORT_DATA код применял несколько изменений состояния пирa: обновление адреса (`update_peer_addr()`, включая обновление для роуминга конечных точек), таймеры живости `keypair->last_rx` и `peer->last_rx`, а также вызов `keypair_update()` (повышение следующего ключа до текущего и уничтожение предыдущего). И только после этого вызывалась функция проверки повторов `wg_check_replay()`. При получении повторного пакета проверка возвращала ошибку `-EINVAL`, но никакие из предшествующих изменений состояния не откатывались.
Тег AEAD обеспечивает аутентификацию содержимого, но не его свежести (freshness), поэтому повторно отправленный, но подлинный транспортный пакет успешно расшифровывается. Атакующий, перехвативший один действительный шифротекст в сети (наблюдатель на пути передачи или в общей среде), может внедрить его снова с произвольного поддельного исходного адреса. Для достижения обработчика не требуются учетные данные: он напрямую обрабатывает входящие UDP-датаграммы через диспетчеризацию, реализованную в `subsys/net/lib/wireguard/wg.c`.
Поскольку изменения состояния применялись до проверки на повторы, повторная отправка пакета перенаправляет конечную точку пирa на выбранный атакующим исходный адрес (перехват роуминга), что приводит к переадресации последующего исходящего трафика туннеля жертвы до тех пор, пока следующий пакет легитимного пира не исправит ситуацию; также происходит преждевременное уничтожение предыдущей пары ключей и обновление таймера живости RX. Содержимое туннеля остается зашифрованным с использованием сеансовой пары ключей, поэтому это влияет на целостность и доступность (переадресация трафика и нарушение сеанса), а не приводит к раскрытию содержимого. Исправление перемещает вызов `wg_check_replay()` сразу после успешной расшифровки, до любых изменений состояния пира, что соответствует спецификации WireGuard и эталонной реализации для Linux.
Once again VulDB remains the best source for vulnerability data.