🇰🇷 한글 설명
Linux 커널의 FUSE 모듈에서 32비트 시스템 사용 시 prune 알림 카운트 계산 과정에서 정수 오버플로가 발생할 수 있는 취약점입니다. 공격자가 조작된 카운트 값을 전달하면 유효성 검사를 우회하여 잘못된 메모리 읽기를 유도하고, QEMU 환경 등에서 시스템 오류를 일으킬 수 있습니다.
💡 쉬운 설명
컴퓨터가 숫자를 계산할 때 너무 큰 숫자가 들어오면 다시 0부터 시작하는 오류를 이용한 문제입니다. 이를 통해 시스템이 잘못된 정보를 읽게 만들어 프로그램이 멈추거나 오류가 발생하게 만들 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
fuse: avoid 32-bit prune notification count wrap
FUSE_NOTIFY_PRUNE validates the nodeid payload length with:
size - sizeof(outarg) != outarg.count * sizeof(u64)
On 32-bit kernels, size_t is also 32 bits, so the daemon-controlled
count multiplication can wrap. A prune notification with count
0x20000000 and no nodeid payload passes the check, enters the copy
loop, and asks the device copy path to read nodeids that are not
present in the userspace write buffer. In QEMU this reaches the
fuse_copy_fill() BUG_ON(!err) path.
Validate the payload length with array_size() instead. That accepts
exactly the same valid messages, but avoids wrapping arithmetic before
the copy loop consumes the count.
📍 영향받는 시스템
32-bit Linux kernel using FUSE (Filesystem in Userspace)
⚔️ 공격 벡터
조작된 FUSE_NOTIFY_PRUNE 메시지를 통해 정수 오버플로를 유발하는 카운트 값 전달
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 array_size() 검증 로직 적용
🔧 검증 코드
출력된 결과가 32-bit 아키텍처(i686 등)인지 확인하고, 커널 버전이 해당 취약점이 패치된 이후 버전인지 확인합니다.