🇰🇷 한글 설명
Linux 커널의 io_uring/kbuf 구성 요소에서 링 버퍼의 길이를 읽을 때 READ_ONCE()를 사용하지 않아 발생하는 취약점입니다. 사용자 공간에서 매핑된 버퍼의 길이가 검사 후 변경될 수 있어 데이터 무결성 문제가 발생할 수 있으며, 이를 방지하기 위해 안정적인 읽기 방식을 적용하여 해결되었습니다.
💡 쉬운 설명
컴퓨터가 데이터를 읽는 과정에서 데이터의 크기가 갑자기 바뀌어 혼란을 겪을 수 있는 문제입니다. 이를 방지하기 위해 데이터를 읽는 순간의 크기를 고정하여 안전하게 처리하도록 수정되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
io_uring/kbuf: always use READ_ONCE() to read ring provided buffer lengths
Since the buffers are mapped from userspace, it is prudent to use
READ_ONCE() to read the value into a local variable, and use that for
any other actions taken. Having a stable read of the buffer length
avoids worrying about it changing after checking, or being read multiple
times.
Similarly, the buffer may well change in between it being picked and
being committed. Ensure the looping for incremental ring buffer commit
stops if it hits a zero sized buffer, as no further progress can be made
at that point.
📍 영향받는 시스템
io_uring 기능을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
사용자 공간에서 매핑된 버퍼의 길이를 조작하여 커널의 데이터 처리 로직을 교란하는 방식
🛡️ 대응 방법
io_uring/kbuf 패치가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인