🇰🇷 한글 설명
Linux 커널의 net/smc 모듈 내 __smc_setsockopt() 함수에서 발생하는 로직 결함으로, 로컬 비특권 사용자가 소켓 잠금(lock)을 무기한 유지시켜 서비스 거부(DoS)를 유발할 수 있습니다. 공격자가 userfaultfd 또는 FUSE를 사용하여 복사 작업 중 실행을 중단시키면 커널 워커가 고갈되고 시스템이 멈출 수 있습니다.
💡 쉬운 설명
특정 네트워크 기능을 사용하는 과정에서 시스템의 중요한 자물쇠를 잠근 채로 놓아주지 않는 버그가 발견되었습니다. 이를 통해 공격자는 컴퓨터가 응답하지 않도록 마비시킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/smc: fix sleep-inside-lock in __smc_setsockopt() causing local DoS
A logic flaw in __smc_setsockopt() allows a local unprivileged user to
cause a Denial of Service (DoS) by holding the socket lock indefinitely.
The function __smc_setsockopt() calls copy_from_sockptr() while holding
lock_sock(sk). By passing a userfaultfd-monitored memory page (or
FUSE-backed memory on systems where unprivileged userfaultfd is disabled)
as the optval, an attacker can halt execution during the copy operation,
keeping the lock held.
Combined with asynchronous tear-down operations like shutdown(), this
exhausts the kernel wq (kworkers) and triggers the hung task watchdog.
[ 240.123456] INFO: task kworker/u8:2 blocked for more than 120 seconds.
[ 240.123489] Call Trace:
[ 240.123501] smc_shutdown+...
[ 240.123512] lock_sock_nested+...
This patch moves the user-space copy outside the lock_sock() critical
section to prevent the issue.
📍 영향받는 시스템
Linux kernel (net/smc 모듈을 사용하는 시스템)
⚔️ 공격 벡터
로컬 비특권 사용자가 userfaultfd 또는 FUSE를 이용해 메모리 복사 중 실행을 제어하여 소켓 잠금을 유지함
🛡️ 대응 방법
커널 패치를 적용하여 사용자 공간 메모리 복사 작업을 소켓 잠금(lock_sock) 구간 외부로 이동시켜야 함
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인하십시오.