CVE-2022-49197 Information

Description

In the Linux kernel the following vulnerability has been resolved:

af_netlink: Fix shift out of bounds in group mask calculation

When a netlink message is received netlink_recvmsg() fills in the address of the sender. One of the fields is the 32-bit bitfield nl_groups which carries the multicast group on which the message was received. The least significant bit corresponds to group 1 and therefore the highest group that the field can represent is 32. Above that the UB sanitizer flags the out-of-bounds shift attempts.

Which bits end up being set in such case is implementation defined but it’s either going to be a wrong non-zero value or zero which is at least not misleading. Make the latter choice deterministic by always setting to 0 for higher-numbered multicast groups.

To get information about membership in groups >= 32 userspace is expected to use nl_pktinfo control messages[0] which are enabled by NETLINK_PKTINFO socket option. [0] https://lwn.net/Articles/147608/

The way to trigger this issue is e.g. through monitoring the BRVLAN group:

 bridge monitor vlan &
 ip link add name br type bridge

Which produces the following citation:

UBSAN: shift-out-of-bounds in net/netlink/af_netlink.c:162:19
shift exponent 32 is too large for 32-bit type 'int'

Reference

https://git.kernel.org/stable/c/0caf6d9922192dd1afa8dc2131abfb4df1443b9f https://git.kernel.org/stable/c/41249fff507387c3323b198d0052faed08b14de4 https://git.kernel.org/stable/c/7409ff6393a67ff9838d0ae1bd102fb5f020d07a https://git.kernel.org/stable/c/ac5883a8890a11c00b32a19949a25d4afeaa2f5a https://git.kernel.org/stable/c/b0898362188e05b2202656058cc32d98fabf3bac https://git.kernel.org/stable/c/e1c5d46f05aa23d740daae5cd3a6472145afac42 https://git.kernel.org/stable/c/e23e1e981247feb3c7d0236fe58aceb685f234ae https://git.kernel.org/stable/c/e8aaf3134bc5e943048eefe9f2ddaabf41d92b1a https://git.kernel.org/stable/c/f75f4abeec4c04b600a15b50c89a481f1e7435ee

Share on: