fastd v23
This release contains a number of small improvements and bugfixes, including
mitigations for the LOW severity vulnerability CVE-2025-24356.
Bugfixes
Add mitigations for fast-reconnect amplification attacks
When receiving a data packet from an unknown IP address/port combination, fastd will assume that one of its connected peers has moved to a new address (for example due to internet lines with dynamic IP, or roaming between WWAN and a local internet connection) and initiate a reconnect by sending a handshake packet. This “fast reconnect” avoids having to wait for a session timeout (up to ~90s) until a new connection is established.
Even a 1-byte UDP packet just containing the fastd packet type header can trigger a much larger handshake packet (~150 bytes of UDP payload). With fastd v22, this number is doubled, because two handshakes are sent (one in a pre-v22-compatible format and one in a new L2TP-style format). Including IPv4 and UDP headers, the resulting amplification factor is roughly 12-13.
By sending data packets with a spoofed source address to fastd instances reachable on the internet, this amplification of UDP traffic might be used to facilitate a Distributed Denial of Service attack.
fastd has always implemented rate limiting for handshakes to unknown IP addresses and ports to 1 handshake per 15s to avoid this kind of attack, however the rate is limited per-port and not per-address, thus still allowing handshakes to be sent to all 65535 UDP ports of the same IP address unlimited.
The issue has been mitigated in fastd v23 by a number of changes:
Rate-limiting has been changed changed to be applied per-address instead of per-port
Only one handshake instead of two handshakes is sent for fast-reconnect (by determining from the format of the data packet whether a pre-v22 or L2TP-style handshake should be used)
Require at least a full method header instead of just a single byte for a data packet to be considered valid. This does not have an effect on instances that enable the
nullmethod (regardless ofnullbeing actually in use), as a single-byte UDP packet is a validnullkeepalive, but for all other methods the amplification factor is slightly reduced.
Only fastd instances that allow connections from arbitrary IP addresses are vulnerable. Instances in a “client” role that configure their peers using the
remoteconfig option (which includes the common deployment as part of the Gluon wireless mesh firmware) will not respond to unexpected data packets with a handshake and are therefore unaffected.CVE-2025-24356has been assigned to this issue. The severity of this vulnerability is considered LOW.A GitHub security advisory can be found under GHSA-pggg-vpfv-4rcv.
Fix config loading to fail on
offload l2tp no;when L2TP offloading is unsupported by the fastd build or the kernelFix assembly Salsa20(/12) implementations accidentally generating the Linux- specific
.note.GNU-stackELF section on non-Linux systemsThis is unlikely to have caused any issues, as other systems should just ignore the unknown section.
Status socket: - Fix interface name information with L2TP offloading - Add per-peer MTU information
Documentation: - Fix incorrect “persist interface” examples - Improve explanation of
floatoptionBuild: - Fix build on macOS (again) - Fix build with Meson 0.49 (the minimum version marked as supported by fastd)
Other changes
Add support for Indirect Branch Tracking and Shadow Stacks on x86
The assembly Salsa20(/12) implementations have been marked compatible with IBT and SHSTK, which are part of Intel CET (Control-flow Enforcement Technology) and can be enabled using the
-fcf-protectionGCC option.The file
COPYRIGHThas been renamed toLICENSEThe vendored version of libmnl that is used with
libmnl_builtin=truehas been updated to 1.0.5