Regarding "Inferring and hijacking VPN-tunneled TCP connections"

Jason A. Donenfeld Jason at
Thu Dec 5 21:24:31 CET 2019

Hey Vasili,

On Thu, Dec 5, 2019 at 8:50 PM Vasili Pupkin <diggest at> wrote:
> Isn't it enough to just enforce Strong Host Model, i.e. a host won't
> respond from it's IP that is not facing the interface. If a host is
> connected to two subnets 10.1.x.x and 10.2.x.x and have two IP
> and, it will just drop all the packets sent to that
> came from the interface and vice verse. This model can be
> emulated using the FIB lookup feature of NFT with this one liner:
> nft add rule inet filter input fib daddr . iif type != { local,
> broadcast, multicast } drop
> this also works for both IP4 and IP6. This mode can be safely enabled on
> most setups not breaking things. Enabling it is a good precaution
> measure anyway and it is a shame that it is not widely assumed as
> default and standard.
> Doing the same with just iptables isn't easy and can't be accomplished
> with one liner but nft perfectly coexist with iptables.

That actually appears to work pretty well in my quick bootleg setup.
Thanks. I'm adding William to the email chain -- perhaps he can try
this and report back with his attack rig?

If we can make nft coexistance work reliably, perhaps we can run the
nft rule on systems where the nft binary simply exists.

For cleanup, we'll need some way of marking that rule as belonging to
wg-quick(8) for our interface. The iptables magic currently uses
--comment for that.

There's also the issue with nft not having default table and chain
names. Perhaps it'd be cleanest to just ad a new table and chain with
a given name, and set that as a high priority input hook?

We'll also probably want to make this only apply to our interface, and
not others, if that's possible.

Any downsides I'm overlooking?

William -- you might want to subscribe to follow along better:

More information about the WireGuard mailing list