🇰🇷 한글 설명
Linux 커널의 io_uring/io-wq 구성 요소에서 발생한 취약점으로, 작업 종료 비트(IO_WQ_BIT_EXIT)를 확인하는 로직이 불충분하여 발생합니다. 연결된 작업 항목(linked work item)을 처리하는 과정에서 종료 신호를 적절히 감지하지 못해, 시스템 종료가 시작된 후에도 일부 작업이 계속 실행될 수 있습니다.
💡 쉬운 설명
컴퓨터가 작업을 끝내고 종료하려고 할 때, 특정 작업들이 종료 명령을 무시하고 계속 실행되는 문제입니다. 이로 인해 시스템이 완전히 꺼지지 않거나 예상치 못한 동작이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
io_uring/io-wq: re-check IO_WQ_BIT_EXIT for each linked work item
commit 10dc95939817 ("io_uring/io-wq: check IO_WQ_BIT_EXIT inside work
run loop") fixed the obvious case where io_worker_handle_work() took one
exit-bit snapshot before draining pending work, but the fix stops one
level too early.
io_worker_handle_work() now re-checks IO_WQ_BIT_EXIT in its outer work
run loop, yet it still snapshots that bit once before processing a whole
dependent linked-work chain. If io_wq_exit_start() sets IO_WQ_BIT_EXIT
after the first linked item has started, the remaining linked items can
still reuse stale do_kill = false, skip IO_WQ_WORK_CANCEL, and continue
running after exit has begun.
Move the check further inside, so it covers linked items too. Note: this
is a syzbot special as it loves setting up tons of slow linked work on
weird devices like msr that take forever to read, and immediately close
the ring. Exit then takes a long time.
📍 영향받는 시스템
Linux Kernel (io_uring을 사용하는 환경)
⚔️ 공격 벡터
느린 입출력 장치를 이용해 긴 작업 체인을 생성한 후 즉시 io_uring을 닫아 종료 프로세스를 유도하는 방식
🛡️ 대응 방법
커널 패치(commit 10dc95939817 포함)가 적용된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 수정된 패치 버전 이후인지 확인