🇰🇷 한글 설명
Linux 커널의 fbdev udlfb 드라이버에서 발생한 Use-After-Free 취약점입니다. 사용자가 프레임버퍼를 매핑한 상태에서 USB 연결 해제나 버퍼 재할당이 발생할 경우, 커널이 기존 메모리 페이지를 해제한 후에도 사용자 공간에서 해당 메모리에 접근할 수 있어 발생합니다.
💡 쉬운 설명
컴퓨터의 화면 정보를 담는 메모리 공간이 사용 중인데도 시스템이 이를 강제로 비워버려 발생하는 문제입니다. 이로 인해 해킹 공격자가 이미 해제된 메모리 영역에 접근하여 시스템을 조작할 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
fbdev: udlfb: add vm_ops to dlfb_ops_mmap to prevent use-after-free
dlfb_ops_mmap() uses remap_pfn_range() to map vmalloc framebuffer pages
to userspace but sets no vm_ops on the VMA. This means the kernel cannot
track active mmaps. When dlfb_realloc_framebuffer() replaces the backing
buffer via FBIOPUT_VSCREENINFO, existing mmap PTEs are not invalidated.
On USB disconnect, dlfb_ops_destroy() calls vfree() on the old pages
while userspace PTEs still reference them, resulting in a use-after-free:
the process retains read/write access to freed kernel pages.
Add vm_operations_struct with open/close callbacks that maintain an
atomic mmap_count on struct dlfb_data. In dlfb_realloc_framebuffer(),
check mmap_count and return -EBUSY if the buffer is currently mapped,
preventing buffer replacement while userspace holds stale PTEs.
Tested with PoC using dummy_hcd + raw_gadget USB device emulation.
📍 영향받는 시스템
Linux kernel (fbdev: udlfb driver component)
⚔️ 공격 벡터
USB 장치 연결 해제 또는 FBIOPUT_VSCREENINFO를 통한 버퍼 재할당 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 vm_ops 및 mmap_count 체크 로직을 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.