🇰🇷 한글 설명
리눅스 커널의 iomap 구성 요소에서 파일 크기 조절(truncate)과 쓰기 작업이 동시에 발생할 때 정수 언더플로우가 발생하는 취약점입니다. 파일 끝(EOF) 위치가 쓰기 범위보다 작아질 경우 io_size가 매우 큰 값으로 변환되어 파일 시스템의 데이터 무결성을 손상시킬 수 있습니다.
💡 쉬운 설명
파일을 저장하는 도중에 갑자기 파일 크기를 줄이면, 컴퓨터가 계산 오류를 일으켜 파일의 크기를 엄청나게 크게 착각하게 됩니다. 이로 인해 파일 데이터가 깨지거나 시스템에 오류가 생길 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iomap: guard io_size EOF trim against concurrent truncate underflow
iomap: fix zero padding data issue in concurrent append writes
changed ioend accounting so that io_size tracks only valid data
within EOF. This trims io_size when a writeback range extends
past end_pos:
ioend->io_size += map_len;
if (ioend->io_offset + ioend->io_size > end_pos)
ioend->io_size = end_pos - ioend->io_offset;
However, if end_pos ends up below ioend->io_offset, the subtraction
becomes negative and is stored in size_t io_size, causing an unsigned
wrap to a huge value. This can happen when writeback continues past
byte-level EOF up to a block-aligned range, or when a concurrent
truncate shrinks the file after end_pos was sampled in
iomap_writeback_handle_eof().
A wrapped io_size can mislead append detection and corrupt
completion-time size handling, since filesystem end_io paths consume
io_size for decisions such as on-disk EOF updates and unwritten/COW
completion ranges.
Fix this by clamping io_size to zero when EOF has moved to or before
the ioend start offset. This preserves the original intent of trimming
io_size to valid in-EOF data while avoiding the underflow.
📍 영향받는 시스템
Linux Kernel (iomap 구성 요소를 사용하는 시스템)
⚔️ 공격 벡터
파일 쓰기 작업과 동시에 파일 크기를 줄이는 truncate 작업을 수행하여 정수 언더플로우 유도
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인