CVE-2024-26733 in Linuxinfo

Summary

by MITRE • 04/03/2024

In the Linux kernel, the following vulnerability has been resolved:

arp: Prevent overflow in arp_req_get().

syzkaller reported an overflown write in arp_req_get(). [0]

When ioctl(SIOCGARP) is issued, arp_req_get() looks up an neighbour entry and copies neigh->ha to struct arpreq.arp_ha.sa_data.

The arp_ha here is struct sockaddr, not struct sockaddr_storage, so the sa_data buffer is just 14 bytes.

In the splat below, 2 bytes are overflown to the next int field, arp_flags. We initialise the field just after the memcpy(), so it's not a problem.

However, when dev->addr_len is greater than 22 (e.g. MAX_ADDR_LEN), arp_netmask is overwritten, which could be set as htonl(0xFFFFFFFFUL) in arp_ioctl() before calling arp_req_get().

To avoid the overflow, let's limit the max length of memcpy().

Note that commit b5f0de6df6dc ("net: dev: Convert sa_data to flexible array in struct sockaddr") just silenced syzkaller.

[0]:
memcpy: detected field-spanning write (size 16) of single field "r->arp_ha.sa_data" at net/ipv4/arp.c:1128 (size 14) WARNING: CPU: 0 PID: 144638 at net/ipv4/arp.c:1128 arp_req_get+0x411/0x4a0 net/ipv4/arp.c:1128 Modules linked in: CPU: 0 PID: 144638 Comm: syz-executor.4 Not tainted 6.1.74 #31 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-debian-1.16.0-5 04/01/2014 RIP: 0010:arp_req_get+0x411/0x4a0 net/ipv4/arp.c:1128 Code: fd ff ff e8 41 42 de fb b9 0e 00 00 00 4c 89 fe 48 c7 c2 20 6d ab 87 48 c7 c7 80 6d ab 87 c6 05 25 af 72 04 01 e8 5f 8d ad fb 0b e9 6c fd ff ff e8 13 42 de fb be 03 00 00 00 4c 89 e7 e8 a6 RSP: 0018:ffffc900050b7998 EFLAGS: 00010286 RAX: 0000000000000000 RBX: ffff88803a815000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: ffffffff8641a44a RDI: 0000000000000001 RBP: ffffc900050b7a98 R08: 0000000000000001 R09: 0000000000000000 R10: 0000000000000000 R11: 203a7970636d656d R12: ffff888039c54000 R13: 1ffff92000a16f37 R14: ffff88803a815084 R15: 0000000000000010 FS: 00007f172bf306c0(0000) GS:ffff88805aa00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f172b3569f0 CR3: 0000000057f12005 CR4: 0000000000770ef0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 PKRU: 55555554 Call Trace: arp_ioctl+0x33f/0x4b0 net/ipv4/arp.c:1261 inet_ioctl+0x314/0x3a0 net/ipv4/af_inet.c:981 sock_do_ioctl+0xdf/0x260 net/socket.c:1204 sock_ioctl+0x3ef/0x650 net/socket.c:1321 vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:870 [inline]
__se_sys_ioctl fs/ioctl.c:856 [inline]
__x64_sys_ioctl+0x18e/0x220 fs/ioctl.c:856 do_syscall_x64 arch/x86/entry/common.c:51 [inline]
do_syscall_64+0x37/0x90 arch/x86/entry/common.c:81 entry_SYSCALL_64_after_hwframe+0x64/0xce RIP: 0033:0x7f172b262b8d Code: 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f172bf300b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 RAX: ffffffffffffffda RBX: 00007f172b3abf80 RCX: 00007f172b262b8d RDX: 0000000020000000 RSI: 0000000000008954 RDI: 0000000000000003 RBP: 00007f172b2d3493 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 000000000000000b R14: 00007f172b3abf80 R15: 00007f172bf10000

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 08/03/2025

The vulnerability identified as CVE-2024-26733 resides within the Linux kernel's Address Resolution Protocol (ARP) implementation, specifically in the arp_req_get() function located in net/ipv4/arp.c. This flaw manifests as a buffer overflow during the execution of the SIOCGARP ioctl command, which is used to retrieve ARP table entries. The issue arises due to a mismatch in buffer sizing between the source and destination structures, creating a potential for memory corruption. The vulnerability was discovered through automated testing by syzkaller, a coverage-guided fuzzer designed to identify kernel-level issues.

The technical root cause lies in the handling of the arp_ha field, which is defined as a struct sockaddr rather than struct sockaddr_storage, limiting the sa_data buffer to just 14 bytes. When the function attempts to copy neighbor hardware address data into this fixed-size buffer, an overflow occurs if the source data exceeds the buffer capacity. The problem becomes particularly critical when dev->addr_len exceeds 22 bytes, a condition that can occur with certain network device types. In such cases, the overflow overwrites the arp_netmask field, which may have been set to htonl(0xFFFFFFUL) during the ioctl processing, potentially leading to unpredictable behavior or exploitation.

This vulnerability directly relates to CWE-121, which addresses stack-based buffer overflow conditions, and aligns with ATT&CK technique T1059.005, covering the use of system commands and APIs to manipulate network configurations. The operational impact of this vulnerability extends beyond simple memory corruption, as it could potentially enable attackers to manipulate ARP table entries or interfere with network communications. The condition requires specific circumstances to be exploited, particularly involving devices with large address lengths, but once triggered, the overflow can corrupt adjacent memory regions and potentially lead to privilege escalation or denial of service. The fix implemented in the kernel involves limiting the maximum length of the memcpy() operation to prevent the overflow, a mitigation that aligns with defensive programming practices and follows the principle of least privilege. The vulnerability highlights the importance of proper buffer management in kernel space, where memory corruption can lead to system instability and security breaches. The patch addresses the immediate issue by ensuring that the memory copy operation respects the boundaries of the target buffer, thereby preventing the overflow that could lead to more severe consequences. This fix demonstrates the kernel community's response to fuzzing findings and reinforces the need for rigorous input validation in critical system components.

Reservation

02/19/2024

Disclosure

04/03/2024

Moderation

accepted

CPE

ready

EPSS

0.00256

KEV

no

Activities

very low

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!