🔍 CVE-2025-40012

7.8
CVSS Score
HIGH
2025-10-20
2026-10-19 21:10
✅ 완료

🇰🇷 한글 설명

Linux 커널의 net/smc 모듈에서 smc_lo_register_dmb() 함수가 DMB 버퍼를 할당할 때 페이지 기반이 아닌 kzalloc()을 사용하여 발생하는 취약점입니다. 이로 인해 smc_rx_splice()에서 get_page() 호출 시 경고가 발생하며, 메모리가 splice_to_pipe() 완료 전에 해제될 경우 Use-After-Free(UAF) 취약점으로 이어질 수 있습니다.

💡 쉬운 설명

메모리를 관리하는 방식의 오류로 인해, 이미 사용이 끝난 메모리 영역을 시스템이 다시 사용하려고 시도할 수 있는 보안 결함입니다. 이 결함이 악용되면 시스템이 비정상적으로 종료되거나 해커가 시스템 권한을 탈취할 위험이 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: net/smc: fix warning in smc_rx_splice() when calling get_page() smc_lo_register_dmb() allocates DMB buffers with kzalloc(), which are later passed to get_page() in smc_rx_splice(). Since kmalloc memory is not page-backed, this triggers WARN_ON_ONCE() in get_page() and prevents holding a refcount on the buffer. This can lead to use-after-free if the memory is released before splice_to_pipe() completes. Use folio_alloc() instead, ensuring DMBs are page-backed and safe for get_page(). WARNING: CPU: 18 PID: 12152 at ./include/linux/mm.h:1330 smc_rx_splice+0xaf8/0xe20 [smc] CPU: 18 UID: 0 PID: 12152 Comm: smcapp Kdump: loaded Not tainted 6.17.0-rc3-11705-g9cf4672ecfee #10 NONE Hardware name: IBM 3931 A01 704 (z/VM 7.4.0) Krnl PSW : 0704e00180000000 000793161032696c (smc_rx_splice+0xafc/0xe20 [smc]) R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:0 RI:0 EA:3 Krnl GPRS: 0000000000000000 001cee80007d3001 00077400000000f8 0000000000000005 0000000000000001 001cee80007d3006 0007740000001000 001c000000000000 000000009b0c99e0 0000000000001000 001c0000000000f8 001c000000000000 000003ffcc6f7c88 0007740003e98000 0007931600000005 000792969b2ff7b8 Krnl Code: 0007931610326960: af000000 mc 0,0 0007931610326964: a7f4ff43 brc 15,00079316103267ea #0007931610326968: af000000 mc 0,0 >000793161032696c: a7f4ff3f brc 15,00079316103267ea 0007931610326970: e320f1000004 lg %r2,256(%r15) 0007931610326976: c0e53fd1b5f5 brasl %r14,000793168fd5d560 000793161032697c: a7f4fbb5 brc 15,00079316103260e6 0007931610326980: b904002b lgr %r2,%r11 Call Trace: smc_rx_splice+0xafc/0xe20 [smc] smc_rx_splice+0x756/0xe20 [smc]) smc_rx_recvmsg+0xa74/0xe00 [smc] smc_splice_read+0x1ce/0x3b0 [smc] sock_splice_read+0xa2/0xf0 do_splice_read+0x198/0x240 splice_file_to_pipe+0x7e/0x110 do_splice+0x59e/0xde0 __do_splice+0x11a/0x2d0 __s390x_sys_splice+0x140/0x1f0 __do_syscall+0x122/0x280 system_call+0x6e/0x90 Last Breaking-Event-Address: smc_rx_splice+0x960/0xe20 [smc] ---[ end trace 0000000000000000 ]---

📍 영향받는 시스템

Linux Kernel (smc module 사용 환경, 특히 6.17.0-rc3 관련 버전)

⚔️ 공격 벡터

SMC(Shared Memory Communications) 프로토콜을 사용하는 네트워크 통신 과정에서 특수하게 조작된 패킷을 전송하여 메모리 해제 후 재사용 유도

🛡️ 대응 방법

kzalloc() 대신 페이지 기반 메모리 할당을 보장하는 folio_alloc()을 사용하도록 커널 패치 적용

🔧 검증 코드

현재 실행 중인 커널 버전을 확인하여 취약점이 해결된 패치 버전인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

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

💻 영향받는 소프트웨어

Linux Kernel