🇰🇷 한글 설명
Linux 커널의 cake 네트워크 스케줄러에서 메모리 제한이 낮을 때 패킷 드롭이 발생하지만 cake_enqueue가 NET_XMIT_CN(혼잡 알림) 대신 NET_XMIT_SUCCESS를 반환하여 HTB 큐의 상태 불일치로 WARNING이 발생하는 버그.
💡 쉬운 설명
네트워크 패킷 관리 시스템에서 메모리 부족으로 패킷이 버려질 때 시스템이 이를 올바르게 보고하지 않아 오류가 발생합니다. 매우 제한된 메모리 환경에서 나타나는 버그입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/sched: Make cake_enqueue return NET_XMIT_CN when past buffer_limit
The following setup can trigger a WARNING in htb_activate due to
the condition: !cl->leaf.q->q.qlen
tc qdisc del dev lo root
tc qdisc add dev lo root handle 1: htb default 1
tc class add dev lo parent 1: classid 1:1 \
htb rate 64bit
tc qdisc add dev lo parent 1:1 handle f: \
cake memlimit 1b
ping -I lo -f -c1 -s64 -W0.001 127.0.0.1
This is because the low memlimit leads to a low buffer_limit, which
causes packet dropping. However, cake_enqueue still returns
NET_XMIT_SUCCESS, causing htb_enqueue to call htb_activate with an
empty child qdisc. We should return NET_XMIT_CN when packets are
dropped from the same tin and flow.
I do not believe return value of NET_XMIT_CN is necessary for packet
drops in the case of ack filtering, as that is meant to optimize
performance, not to signal congestion.
📍 영향받는 시스템
Linux kernel 5.14 이상의 모든 버전 (net/sched/sch_cake.c cake_enqueue 함수)
⚔️ 공격 벡터
로컬 공격: 매우 낮은 memlimit으로 cake qdisc 설정 후 루프백 인터페이스로 대량 패킷 송신하여 메모리 초과 상황 유발
🛡️ 대응 방법
Linux 커널을 패치된 최신 버전으로 업데이트하거나 cake qdisc 사용 시 적절한 memlimit 값 설정으로 회피
🔧 검증 코드
커널 버전이 5.14 이상인지 확인. 해당 버전의 경우 배포판 보안 공지를 통해 패치 여부 확인 필요.
cat /proc/version | grep -oP 'Linux version \K[0-9]+\.[0-9]+'