In the Linux kernel, the following vulnerability has been resolved:
mptcp: prevent BPF accessing lowat from a subflow socket.
Alexei reported the following splat:
WARNING: CPU: 32 PID: 3276 at net/mptcp/subflow.c:1430 subflowdataready+0x147/0x1c0 Modules linked in: dummy bpftestmod(O) [last unloaded: bpftestnocfi(O)] CPU: 32 PID: 3276 Comm: testprogs Tainted: GO 6.8.0-12873-g2c43c33bfd23 Call Trace: <TASK> mptcpsetrcvlowat+0x79/0x1d0 sksetsockopt+0x6c0/0x1540 _bpfsetsockopt+0x6f/0x90 bpfsockopssetsockopt+0x3c/0x90 bpfprog509ce5db2c7f9981bpftestsockoptint+0xb4/0x11b bpfprogdce07e362d941d2bbpftestsocketsockopt+0x12b/0x132 bpfprog348c9b5faaf10092skopssockopt+0x954/0xe86 _cgroupbpfrunfiltersockops+0xbc/0x250 tcpconnect+0x879/0x1160 tcpv6connect+0x50c/0x870 mptcpconnect+0x129/0x280 _inetstreamconnect+0xce/0x370 inetstreamconnect+0x36/0x50 bpftrampoline6442491565+0x49/0xef inetstreamconnect+0x5/0x50 _sysconnect+0x63/0x90 _x64sys_connect+0x14/0x20
The root cause of the issue is that bpf allows accessing mptcp-level proto_ops from a tcp subflow scope.
Fix the issue detecting the problematic call and preventing any action.
[
{
"signature_type": "Function",
"id": "CVE-2024-35894-47f4f76a",
"target": {
"function": "mptcp_set_rcvlowat",
"file": "net/mptcp/sockopt.c"
},
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ee3c845787b621cfe82c2e52c513024a9d7a78f5",
"digest": {
"function_hash": "16512399394213532952235671185658497370",
"length": 854.0
}
},
{
"signature_type": "Line",
"id": "CVE-2024-35894-4ca30066",
"target": {
"file": "net/mptcp/sockopt.c"
},
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@fcf4692fa39e86a590c14a4af2de704e1d20a3b5",
"digest": {
"threshold": 0.9,
"line_hashes": [
"6168283461678315043856960289313356164",
"65861411409188864127607013732169314609",
"272244991081046929932407078524758614769"
]
}
},
{
"signature_type": "Function",
"id": "CVE-2024-35894-75f3d4b1",
"target": {
"function": "mptcp_set_rcvlowat",
"file": "net/mptcp/sockopt.c"
},
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3ffb1ab698376f09cc33101c07c1be229389fe29",
"digest": {
"function_hash": "184838477108248433506999755191145033940",
"length": 841.0
}
},
{
"signature_type": "Line",
"id": "CVE-2024-35894-78de75dd",
"target": {
"file": "net/mptcp/sockopt.c"
},
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3ffb1ab698376f09cc33101c07c1be229389fe29",
"digest": {
"threshold": 0.9,
"line_hashes": [
"6168283461678315043856960289313356164",
"65861411409188864127607013732169314609",
"272244991081046929932407078524758614769"
]
}
},
{
"signature_type": "Line",
"id": "CVE-2024-35894-b0541aca",
"target": {
"file": "net/mptcp/sockopt.c"
},
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@ee3c845787b621cfe82c2e52c513024a9d7a78f5",
"digest": {
"threshold": 0.9,
"line_hashes": [
"6168283461678315043856960289313356164",
"65861411409188864127607013732169314609",
"272244991081046929932407078524758614769"
]
}
},
{
"signature_type": "Function",
"id": "CVE-2024-35894-f1fc961e",
"target": {
"function": "mptcp_set_rcvlowat",
"file": "net/mptcp/sockopt.c"
},
"signature_version": "v1",
"deprecated": false,
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@fcf4692fa39e86a590c14a4af2de704e1d20a3b5",
"digest": {
"function_hash": "184838477108248433506999755191145033940",
"length": 841.0
}
}
]