🇰🇷 한글 설명
리눅스 커널의 net_sched 구성 요소 중 sch_sfq에서 gso_skb 처리 시 발생할 수 있는 잠재적인 크래시 취약점입니다. SFQ qdisc가 비어 있는 상태에서 패킷을 인큐(enqueue)할 때 q->tail이 적절히 초기화되지 않아 시스템 충돌이 발생할 수 있습니다.
💡 쉬운 설명
네트워크 패킷을 순서대로 처리하는 기능에서 데이터 처리 방식의 오류로 인해 컴퓨터 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 특정 네트워크 설정 환경에서 대량의 데이터를 보낼 때 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net_sched: sch_sfq: fix a potential crash on gso_skb handling
SFQ has an assumption of always being able to queue at least one packet.
However, after the blamed commit, sch->q.len can be inflated by packets
in sch->gso_skb, and an enqueue() on an empty SFQ qdisc can be followed
by an immediate drop.
Fix sfq_drop() to properly clear q->tail in this situation.
ip netns add lb
ip link add dev to-lb type veth peer name in-lb netns lb
ethtool -K to-lb tso off # force qdisc to requeue gso_skb
ip netns exec lb ethtool -K in-lb gro on # enable NAPI
ip link set dev to-lb up
ip -netns lb link set dev in-lb up
ip addr add dev to-lb 192.168.20.1/24
ip -netns lb addr add dev in-lb 192.168.20.2/24
tc qdisc replace dev to-lb root sfq limit 100
ip netns exec lb netserver
netperf -H 192.168.20.2 -l 100 &
netperf -H 192.168.20.2 -l 100 &
netperf -H 192.168.20.2 -l 100 &
netperf -H 192.168.20.2 -l 100 &
📍 영향받는 시스템
Linux Kernel (sch_sfq 모듈을 사용하는 시스템)
⚔️ 공격 벡터
네트워크 트래픽 조작을 통해 특정 qdisc 조건(gso_skb 처리 중 빈 큐에 패킷 인큐)을 유도하여 커널 패닉 유발
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 sfq_drop() 함수 수정 사항을 반영해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.