Description
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nft_byteorder: remove multi-register support
64bit byteorder conversion is broken when several registers need to be
converted because the source register array advances in steps for 4 bytes
instead of 8:
for (i = ...
src64 = nft_reg_load64(&src[i]);
~~~~~ u32 *src
nft_reg_store64(&dst64[i],
Remove the multi-register support, it has other issues as well:
Pablo points out that commit
caf3ef7468f7 ("netfilter: nf_tables: prevent OOB access in nft_byteorder_eval")
alters semantics: before the loop operated on registers, i.e.
for ( ... )
dst32[i] = htons((u16)src32[i])
.. but after the patch it will operate on bytes, which makes this
useless to convert e.g. concatenations, which store each compound
in its own register.
Multi-convert of u32 has one theoretical application:
ct mark . meta mark . tcp dport @intervalset
Because ct mark and meta mark are host byte order, use with
intervals has to convert the byteorder for ct/meta mark value
to network byte order (bigendian).
nftables emits this:
[ meta load mark => reg 1 ]
[ byteorder reg 1 = hton(reg 1, 4, 4) ]
[ ct load mark => reg 9 ]
[ byteorder reg 9 = hton(reg 9, 4, 4) ]
...
I.e. two separate calls. Theoretically it could be changed to do:
[ meta load mark => reg 1 ]
[ ct load mark => reg 9 ]
[ byteorder reg 1 = htonl(reg 1, 4, 8) ]
...
But then all it would take to change the set to
meta mark . tcp dport . ct mark
... and we'd be back to two "byteorder" calls. IOW, support to
convert a range of registers is both dysfunctional and dubious.
Simplify this: remove the feature.
Pablo Neira Ayuso points out that nftables before 1.1.0 can generate
incorrect byteorder conversions, see 9fe58952c45a,
"evaluate: skip byteorder conversion for selector smaller than 2 bytes"
in nftables.git). Affected rulesets fail to load with this change and
old userspace due to 'len != size' check.
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| Linux | Linux | b8b514b2a6cdfac24911e4910461bcb9db15ca8d | — |
| Linux | Linux | 25b42be4e067e107a2559266b54bf07fa5b094fb | — |
| Linux | Linux | patch: 6.18.59 | — |
| Linux | Linux | 5.10.210 <5.11 | — |
| Linux | Linux | 6.7 | — |
| Linux | Linux | 1a605657adc58b3c8e2c1c66aaa5fecd29072135 | — |
| Linux | Linux | 5.15.140 <5.16 | — |
| Linux | Linux | 9a865a11d6890d4a789db1eaafebdc8bd092b12c | — |
| Linux | Linux | c301f0981fdd3fd1ffac6836b423c4d7a8e0eb63 <dc29c0478b8564feb9371e715b5a0016eb8903fd | — |
| Linux | Linux | patch: 0 | — |
| Linux | Linux | 6.1.64 <6.2 | — |
| Linux | Linux | c301f0981fdd3fd1ffac6836b423c4d7a8e0eb63 <bb061d3de41707415269be75ebf700efb03ec212 | — |
| Linux | Linux | 013deed31ab15ef287b0045e4e7bd8f250e75b94 | — |
| Linux | Linux | 6.6.3 <6.7 | — |
| Linux | Linux | 5.4.269 <5.5 | — |
| Linux | Linux | patch: 6.12.115 | — |
| Linux | Linux | fca41e5b687e029f69e3a35a2fa31e2560e538dc | — |
| Linux | Linux | c301f0981fdd3fd1ffac6836b423c4d7a8e0eb63 <3c5fb3a6c8118d15e60295e76fb5b879021eef43 | — |
| Linux | Linux | 4.19.307 <4.20 | — |
| Linux | Linux | 18a169810cff769a7a697b35058c756805f589e0 | — |
| Linux | Linux | 6.5.13 <6.6 | — |
| Linux | Linux | patch: 7.1 | — |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | linux | 7.1.3-1 | — |
| Debian 13 | linux | 6.12.115-1 | — |
| Debian 12 | linux | No fix yet | — |
Advisories 1
- WID-SEC-2026-4461 Linux Kernel: Mehrere Schwachstellen BSI CERT-Bund (WID) · Nov 10, 2026