]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
netfilter: Validate the sequence number of dataless ACK packets as well
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Fri, 31 Aug 2012 09:55:54 +0000 (09:55 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 6 Dec 2012 11:20:10 +0000 (11:20 +0000)
commit 4a70bbfaef0361d27272629d1a250a937edcafe4 upstream.

We spare nothing by not validating the sequence number of dataless
ACK packets and enabling it makes harder off-path attacks.

See: "Reflection scan: an Off-Path Attack on TCP" by Jan Wrobel,
http://arxiv.org/abs/1201.2074

Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/netfilter/nf_conntrack_proto_tcp.c

index 2458cc933b8508273642c7e5a78134c268c811e9..57ad4666b24e452740ab71174429a70a43dfadf9 100644 (file)
@@ -625,15 +625,9 @@ static bool tcp_in_window(const struct nf_conn *ct,
                ack = sack = receiver->td_end;
        }
 
-       if (seq == end
-           && (!tcph->rst
-               || (seq == 0 && state->state == TCP_CONNTRACK_SYN_SENT)))
+       if (tcph->rst && seq == 0 && state->state == TCP_CONNTRACK_SYN_SENT)
                /*
-                * Packets contains no data: we assume it is valid
-                * and check the ack value only.
-                * However RST segments are always validated by their
-                * SEQ number, except when seq == 0 (reset sent answering
-                * SYN.
+                * RST sent answering SYN.
                 */
                seq = end = sender->td_end;