🇰🇷 한글 설명
Linux 커널의 net/sched: sch_multiq 구성 요소에서 패킷 처리 방식의 오류로 인해 발생하는 취약점입니다. 특정 조건에서 패킷을 꺼내는 과정 중 데이터 불일치가 발생하여 NULL 포인터를 참조하게 되며, 이로 인해 커널 패닉이 발생하여 시스템이 중단될 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 처리하는 과정에서 순서가 꼬여 컴퓨터가 처리할 수 없는 잘못된 정보를 참조하게 됩니다. 이로 인해 시스템이 갑자기 멈추거나 재부팅되는 현상이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/sched: sch_multiq: Replace direct dequeue call with peek and qdisc_dequeue_peeked
multiq_dequeue() takes a packet from a band's child with a direct
->dequeue() call after multiq_peek() peeked it. When the child is
non-work-conserving the peek stashes the skb in the child's gso_skb, so
the direct dequeue returns a different skb and orphans the stash,
desyncing the child's qlen/backlog. With a qfq child reached through a
peeking parent (e.g. tbf) this re-enters the child on an emptied list and
dereferences NULL, panicking the kernel from softirq on ordinary egress.
Take the packet through qdisc_dequeue_peeked(), as sch_prio already does
and as sch_red and sch_sfb were just fixed to do. The helper is a no-op
when the child has no stash, so a work-conserving child is unaffected.
📍 영향받는 시스템
Linux Kernel (sch_multiq를 사용하는 네트워크 스케줄러 환경)
⚔️ 공격 벡터
특정 네트워크 트래픽 패턴을 유도하여 커널의 소프트 인터럽트(softirq) 과정에서 커널 패닉 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 qdisc_dequeue_peeked() 함수가 적용된 패치를 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.