🇰🇷 한글 설명
Linux 커널의 FUSE 구성 요소에서 디렉토리 엔트리(dirent)의 크기가 페이지 캐시 크기를 초과하는지 검사하지 않는 취약점이 발견되었습니다. 악의적인 FUSE 서버가 비정상적으로 큰 데이터를 반환할 경우, memcpy() 함수 호출 시 커널 페이지 경계를 넘어 메모리 오버플로가 발생할 수 있습니다.
💡 쉬운 설명
파일 시스템을 연결해주는 기능에서 데이터 크기를 제대로 확인하지 않아 발생하는 문제입니다. 나쁜 의도를 가진 서버가 너무 큰 데이터를 보내면 컴퓨터의 중요한 메모리 영역을 침범할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
fuse: reject oversized dirents in page cache
fuse_add_dirent_to_cache() computes a serialized dirent size from the
server-controlled namelen field and copies the dirent into a single
page-cache page. The existing logic only checks whether the dirent fits
in the remaining space of the current page and advances to a fresh page
if not. It never checks whether the dirent itself exceeds PAGE_SIZE.
As a result, a malicious FUSE server can return a dirent with
namelen=4095, producing a serialized record size of 4120 bytes. On 4 KiB
page systems this causes memcpy() to overflow the cache page by 24 bytes
into the following kernel page.
Reject dirents that cannot fit in a single page before copying them into
the readdir cache.
📍 영향받는 시스템
FUSE를 사용하는 Linux 커널 시스템 (PAGE_SIZE가 4KiB인 환경)
⚔️ 공격 벡터
악의적으로 조작된 namelen 값을 가진 FUSE 서버를 통해 커널 메모리 오버플로 유도
🛡️ 대응 방법
FUSE 관련 커널 패치를 적용하여 단일 페이지 크기를 초과하는 dirent를 거부하도록 업데이트
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 보안 패치 버전인지 확인