🔍 CVE-2026-93243

0.0
CVSS Score
UNKNOWN
2026-09-24
2026-10-21 13:21
✅ 완료

🇰🇷 한글 설명

Linux 커널의 secretmem 구현에서 메모리 잠금(mlock) 페이지 계측 오류로 인해 RLIMIT_MEMLOCK 제한을 우회할 수 있는 취약점이 발견되었습니다. 공격자가 메모리 매핑과 해제를 반복하면 시스템의 가용 메모리를 모두 소모하여 시스템 불안정 및 서비스 거부(DoS)를 유발할 수 있습니다.

💡 쉬운 설명

사용자가 정해진 메모리 사용 제한을 무시하고 시스템의 모든 메모리를 강제로 점유할 수 있는 결함입니다. 이로 인해 컴퓨터가 멈추거나 시스템 전체가 다운될 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: mm/secretmem: properly account locked pages secretmem accounts folios by treating memory as if it were mlock()'d and thus limited by the RLIMIT_MEMLOCK limit. However the folios are unevictable and remain so until the inode is evicted, eliminating usual mlock() semantics - mapping folios then unmapping them does not clear their unevictable state, since it depends on AS_UNEVICTABLE, not PG_mlocked. A user can therefore easily work around the RLIMIT_MEMLOCK limit - simply map then unmap and VmLck no longer counts the secretmem range. Worse, folios are not accounted in the process's RSS, meaning the OOM killer won't know to kill the process. Repeatedly mapping/unmapping (or forking) can then result in the consumption of all available system memory with unevictable folios and cause system instability. A secretmem fd can be passed between processes and over fork so a per-process limit simply does not make sense, so follow the precedent set by io_uring, perf, skbuff, iommufd and xdp by tracking the number of locked pages in user_struct->locked_vm. Since the scope tracked is actually inode lifetime, the RLIMIT_MEMLOCK applies per-user not per-process, so it doesn't make sense to bypass for users with CAP_IPC_LOCK, therefore remove this bypass. There is simply no reason to carry on marking the mapping as mlock()'d since it's misleading and the lifecycle is now correctly handled, so remove this too. Note that secretmem does not support any form of truncation (including hole punching) and the folios are unreclaimable, so the folios need only be accounted on fault and unaccounted on inode destruction. __secretmem_account_pages() is more or less a duplicate of the code that io_uring etc. use, but since this is a bug fix that needs backporting, defer any de-duplication efforts to a follow-up. test_mlock_limit() asserts mlock_future_ok() on mmap(), however this has been removed, so remove the test altogether for the fix. A new test will be sent separately for upstream.

📍 영향받는 시스템

Linux Kernel (secretmem 모듈을 사용하는 버전)

⚔️ 공격 벡터

secretmem 파일 디스크립터를 매핑 및 해제(map/unmap)하거나 프로세스를 포크하여 메모리 제한을 우회하는 방식

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 secretmem의 페이지 계측 로직을 수정해야 합니다.

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.

Shell / Script
uname -r

💻 영향받는 소프트웨어

Linux Kernel