🔍 CVE-2024-35944

5.5
CVSS Score
MEDIUM
2024-05-19
2026-10-15 01:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 VMCI 드라이버에서 memcpy() 함수가 구조체 필드 경계를 넘어 메모리를 복사하는 버그입니다. payload_size를 포함한 전체 데이터그램 크기만큼 복사하려고 하지만, 목적지 버퍼의 msg 필드는 24바이트로 고정되어 있어 오버플로우가 발생합니다.

💡 쉬운 설명

Linux 커널이 메모리에 데이터를 복사할 때 버퍼 크기를 초과해서 복사하려는 시도를 했습니다. 이는 메모리 보안 문제를 일으킬 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host() Syzkaller hit 'WARNING in dg_dispatch_as_host' bug. memcpy: detected field-spanning write (size 56) of single field "&dg_info->msg" at drivers/misc/vmw_vmci/vmci_datagram.c:237 (size 24) WARNING: CPU: 0 PID: 1555 at drivers/misc/vmw_vmci/vmci_datagram.c:237 dg_dispatch_as_host+0x88e/0xa60 drivers/misc/vmw_vmci/vmci_datagram.c:237 Some code commentry, based on my understanding: 544 #define VMCI_DG_SIZE(_dg) (VMCI_DG_HEADERSIZE + (size_t)(_dg)->payload_size) /// This is 24 + payload_size memcpy(&dg_info->msg, dg, dg_size); Destination = dg_info->msg ---> this is a 24 byte structure(struct vmci_datagram) Source = dg --> this is a 24 byte structure (struct vmci_datagram) Size = dg_size = 24 + payload_size {payload_size = 56-24 =32} -- Syzkaller managed to set payload_size to 32. 35 struct delayed_datagram_info { 36 struct datagram_entry *entry; 37 struct work_struct work; 38 bool in_dg_host_queue; 39 /* msg and msg_payload must be together. */ 40 struct vmci_datagram msg; 41 u8 msg_payload[]; 42 }; So those extra bytes of payload are copied into msg_payload[], a run time warning is seen while fuzzing with Syzkaller. One possible way to fix the warning is to split the memcpy() into two parts -- one -- direct assignment of msg and second taking care of payload. Gustavo quoted: "Under FORTIFY_SOURCE we should not copy data across multiple members in a structure."

📍 영향받는 시스템

Linux kernel의 VMCI 드라이버 (drivers/misc/vmw_vmci/vmci_datagram.c)

⚔️ 공격 벡터

로컬 공격자가 VMCI 통신 인터페이스를 통해 payload_size를 조작하여 버퍼 오버플로우 트리거

🛡️ 대응 방법

커널을 최신 패치 버전으로 업데이트하여 memcpy()를 msg와 payload 복사로 분리한 수정 사항 적용

🔧 검증 코드

현재 커널 버전을 확인하고 VMCI 드라이버 모듈이 시스템에 존재하는지 확인합니다. 출력된 버전이 수정된 패치 버전인지 보안 공지에서 확인하세요.

Shell / Script
uname -r && ls -la /lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/ 2>/dev/null | grep -i vmci

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel