🇰🇷 한글 설명
Linux 커널의 net/sched hhf 구성 요소에서 hh_flows_limit 설정 시 상한선이 없어 발생하는 메모리 고갈 취약점입니다. 공격자가 매우 큰 값을 설정할 경우 스푸핑된 트래픽을 통해 무제한적인 메모리 할당을 유도하여 시스템을 마비시킬 수 있습니다.
💡 쉬운 설명
네트워크 관리 설정 중 하나를 아주 큰 숫자로 조작하여 컴퓨터의 메모리를 전부 써버리게 만드는 버그입니다. 이로 인해 시스템이 느려지거나 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/sched: hhf: cap hh_flows_limit at change time
hhf_change() stores TCA_HHF_HH_FLOWS_LIMIT with no upper bound. A huge
hh_flows_limit lets each new heavy-hitter flow pass the
hh_flows_current_cnt check in alloc_new_hh() and forces a fixed-size
kzalloc(GFP_ATOMIC) per flow under spoofed traffic, for unbounded memory
growth.
Bound the attribute with NLA_POLICY_MAX() at 2*HH_FLOWS_CNT (the
hhf_init() default) and report the rejected value via extack. The
deprecated nested parse is kept: legacy tc does not set NLA_F_NESTED on
TCA_OPTIONS. Configs relying on hh_limit above the default were relying
on unbounded, unsafe behaviour and are not supported going forward.
hhf_init() also ran hhf_change() before setting the default
hh_flows_limit, so a user-supplied hh_limit at add time was clobbered
back to 2048. Set the default before hhf_change() so the configured
value sticks.
This is a follow-up to commit eb56a495f59b ("net/sched: hhf: clamp
quantum in change and init paths"), which bounded the quantum of the
same qdisc; the hh_flows_limit bound is the remaining unbounded knob of
that series' scope.
Conditions to recreate the bug: CAP_NET_ADMIN in a user namespace;
tc qdisc change dev X root hhf hh_limit 4294967295 succeeds and the
value is echoed by tc qdisc show, unbounding heavy-hitter flow
allocations; also tc qdisc add dev X root hhf hh_limit 500 stores 2048
instead of 500.
📍 영향받는 시스템
Linux kernel (net/sched hhf component)
⚔️ 공격 벡터
CAP_NET_ADMIN 권한을 가진 사용자가 tc 명령어를 통해 hh_flows_limit 값을 비정상적으로 높게 설정
🛡️ 대응 방법
커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 hh_flows_limit에 상한선(2*HH_FLOWS_CNT)을 적용해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux