tcp: reduce accepted window in NEW_SYN_RECV state
authorEric Dumazet <edumazet@google.com>
Thu, 23 May 2024 13:05:27 +0000 (13:05 +0000)
committerJakub Kicinski <kuba@kernel.org>
Mon, 27 May 2024 23:47:23 +0000 (16:47 -0700)
commitf4dca95fc0f6350918f2e6727e35b41f7f86fcce
tree9ce47f24f372bf30a1f3649952b26eb889d6fa89
parentbe008726d0ac338a6bb19c2da2853e3e2112b055
tcp: reduce accepted window in NEW_SYN_RECV state

Jason commit made checks against ACK sequence less strict
and can be exploited by attackers to establish spoofed flows
with less probes.

Innocent users might use tcp_rmem[1] == 1,000,000,000,
or something more reasonable.

An attacker can use a regular TCP connection to learn the server
initial tp->rcv_wnd, and use it to optimize the attack.

If we make sure that only the announced window (smaller than 65535)
is used for ACK validation, we force an attacker to use
65537 packets to complete the 3WHS (assuming server ISN is unknown)

Fixes: 378979e94e95 ("tcp: remove 64 KByte limit for initial tp->rcv_wnd value")
Link: https://datatracker.ietf.org/meeting/119/materials/slides-119-tcpm-ghost-acks-00
Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Neal Cardwell <ncardwell@google.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240523130528.60376-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/request_sock.h
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_minisocks.c
net/ipv6/tcp_ipv6.c