It might be worth adding that the traffic exploiting that problem is not
invalid in any sense. TCP segments can arrive out-of-order in legitimate
usage, too. For instance, individual TCP packets of one connection can
take different paths to your peer, so a higher fragment may very well
arrive before a lower one. If that was not expected, there would be no
need for TCP reassembly at all.

So, reassembling TCP segments is needed, unless you're willing to break
perfectly legitimate connections. But an attacker should not be able to
grow the reassembly queue up to the point where you crash because you
run out of memory. Finding a good strategy to decide what queue entries
to drop at what point is not trivial. I think we'll wait and see what
strategies work best in the TCP/IP stack, and use that experience if/when
implementing TCP reassembly in pf scrub.

Daniel

Reply via email to