* [PATCH net v2] tcp: fix authentication bypass via unsupported TCP auth options
@ 2026-11-07 22:47 Jérémy Jean
2026-11-07 22:55 ` netdev-bot+sinfo
2026-11-08 0:00 ` Kuniyuki Iwashima
0 siblings, 2 replies; 3+ messages in thread
From: Jérémy Jean @ 2026-11-07 22:47 UTC (permalink / raw)
To: Eric Dumazet, Neal Cardwell, Kuniyuki Iwashima
Cc: Dmitry Safonov, Francesco Ruggeri, Salam Noureddine, netdev,
linux-kernel, Jérémy Jean, stable
tcp_inbound_hash() parses both TCP-MD5 and TCP-AO options when at
least one of the two features is enabled. With TCP_MD5SIG=y and
TCP_AO=n, a packet carrying an AO option reaches the disabled
tcp_inbound_ao_hash() stub. That stub returns success, so sockets
configured to require MD5 authentication end up accepting
unauthenticated data. A forged AO option skips the unsigned fast
path, which is the only place where tcp_inbound_hash() can return
SKB_DROP_REASON_TCP_MD5NOTFOUND.
The inverse configuration with TCP_MD5SIG=n and TCP_AO=y has the same
problem for an MD5 option on AO sockets.
Note that TCP-AO depends on 64BIT: therefore, every 32-bit kernel with
TCP_MD5SIG=y is in the vulnerable configuration.
Make the disabled stubs reject options for the unsupported
authentication scheme. This matches the real helpers' behavior for
sockets without keys. It also means that kernels with TCP_MD5SIG=n and
TCP_AO=y now drop segments carrying an MD5 option on unkeyed sockets,
as kernels configured with TCP_MD5SIG=y already do.
Fixes: 0a3a809089eb ("net/tcp: Verify inbound TCP-AO signed segments")
Cc: stable@vger.kernel.org
Signed-off-by: Jérémy Jean <Jeremy.Jean@oss.cyber.gouv.fr>
---
Changes in v2, upon review by Eric Dumazet:
- Explain how an AO option skips the unsigned MD5 check.
- Mention that TCP_AO depends on 64BIT.
- Count rejected unsupported auth options.
v1: https://lore.kernel.org/all/20261021193151.1819085-2-Jeremy.Jean@oss.cyber.gouv.fr/
include/net/tcp_ao.h | 3 ++-
net/ipv4/tcp.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/include/net/tcp_ao.h b/include/net/tcp_ao.h
index 9a2333e62e994..edf4c9bc5ef5d 100644
--- a/include/net/tcp_ao.h
+++ b/include/net/tcp_ao.h
@@ -303,7 +303,8 @@ static inline enum skb_drop_reason tcp_inbound_ao_hash(struct sock *sk,
const struct request_sock *req, int l3index,
const struct tcp_ao_hdr *aoh)
{
- return SKB_NOT_DROPPED_YET;
+ NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPAOKEYNOTFOUND);
+ return SKB_DROP_REASON_TCP_AOUNEXPECTED;
}
static inline struct tcp_ao_key *tcp_ao_do_lookup(const struct sock *sk,
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 87ef6d5cbfeba..bf8aef32846b3 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -4962,7 +4962,8 @@ tcp_inbound_md5_hash(const struct sock *sk, const struct sk_buff *skb,
const void *saddr, const void *daddr,
int family, int l3index, const __u8 *hash_location)
{
- return SKB_NOT_DROPPED_YET;
+ NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMD5UNEXPECTED);
+ return SKB_DROP_REASON_TCP_MD5UNEXPECTED;
}
#endif
--
2.47.3
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH net v2] tcp: fix authentication bypass via unsupported TCP auth options
2026-11-07 22:47 [PATCH net v2] tcp: fix authentication bypass via unsupported TCP auth options Jérémy Jean
@ 2026-11-07 22:55 ` netdev-bot+sinfo
2026-11-08 0:00 ` Kuniyuki Iwashima
1 sibling, 0 replies; 3+ messages in thread
From: netdev-bot+sinfo @ 2026-11-07 22:55 UTC (permalink / raw)
To: Jérémy Jean
Cc: Eric Dumazet, Neal Cardwell, Kuniyuki Iwashima, Dmitry Safonov,
Francesco Ruggeri, Salam Noureddine, netdev, linux-kernel,
stable
Hi!
This is an automated message. This series looks like a fix, but its
commit messages seem to be missing some information:
- How the issue was discovered, e.g. hit in production, hit during
development, syzbot report, manual code inspection, LLM or static
analysis tool scan.
- Whether the issue was actually triggered, or is only theoretical
(e.g. found by code inspection). If it was triggered please include
the symptoms, like the stack trace or error messages.
Please do not repost the series just to address the above. Instead,
reply to this email with the missing information, so that reviewers
can take it into account. If the series needs another revision for
other reasons, please include the information in the commit messages
then.
The evaluation is done by an LLM so it may be wrong, if you think
that is the case please reply and explain.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net v2] tcp: fix authentication bypass via unsupported TCP auth options
2026-11-07 22:47 [PATCH net v2] tcp: fix authentication bypass via unsupported TCP auth options Jérémy Jean
2026-11-07 22:55 ` netdev-bot+sinfo
@ 2026-11-08 0:00 ` Kuniyuki Iwashima
1 sibling, 0 replies; 3+ messages in thread
From: Kuniyuki Iwashima @ 2026-11-08 0:00 UTC (permalink / raw)
To: Jérémy Jean
Cc: Eric Dumazet, Neal Cardwell, Dmitry Safonov, Francesco Ruggeri,
Salam Noureddine, netdev, linux-kernel, stable
On Sat, 07 Nov 2026 22:47:33 +0000, Jérémy Jean wrote:
> tcp_inbound_hash() parses both TCP-MD5 and TCP-AO options when at
> least one of the two features is enabled. With TCP_MD5SIG=y and
> TCP_AO=n, a packet carrying an AO option reaches the disabled
> tcp_inbound_ao_hash() stub. That stub returns success, so sockets
> configured to require MD5 authentication end up accepting
> unauthenticated data. A forged AO option skips the unsigned fast
> path, which is the only place where tcp_inbound_hash() can return
> SKB_DROP_REASON_TCP_MD5NOTFOUND.
>
> The inverse configuration with TCP_MD5SIG=n and TCP_AO=y has the same
> problem for an MD5 option on AO sockets.
>
> Note that TCP-AO depends on 64BIT: therefore, every 32-bit kernel with
> TCP_MD5SIG=y is in the vulnerable configuration.
>
> Make the disabled stubs reject options for the unsupported
> authentication scheme. This matches the real helpers' behavior for
> sockets without keys. It also means that kernels with TCP_MD5SIG=n and
> TCP_AO=y now drop segments carrying an MD5 option on unkeyed sockets,
> as kernels configured with TCP_MD5SIG=y already do.
>
> Fixes: 0a3a809089eb ("net/tcp: Verify inbound TCP-AO signed segments")
> Cc: stable@vger.kernel.org
> Signed-off-by: Jérémy Jean <Jeremy.Jean@oss.cyber.gouv.fr>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-08 0:00 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-07 22:47 [PATCH net v2] tcp: fix authentication bypass via unsupported TCP auth options Jérémy Jean
2026-11-07 22:55 ` netdev-bot+sinfo
2026-11-08 0:00 ` Kuniyuki Iwashima
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®