🇰🇷 한글 설명
Linux 커널의 HFSC qdisc 클래스 처리 과정에서 발생하는 Use-After-Free(UAF) 취약점입니다. hfsc_change_class() 함수에서 특정 자식 qdisc(netem, codel 등)를 처리할 때, 체크 시점과 사용 시점의 차이(TOCTOU)로 인해 큐가 비어있음에도 비어있지 않다고 판단하여 메모리 오류가 발생합니다.
💡 쉬운 설명
네트워크 데이터를 관리하는 규칙을 변경할 때, 데이터가 이미 사라졌는데도 남아있다고 착각하여 잘못된 메모리 주소를 참조하는 문제입니다. 이로 인해 시스템이 충돌하거나 보안 공격에 악용될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net_sched: hfsc: Fix a UAF vulnerability in class handling
This patch fixes a Use-After-Free vulnerability in the HFSC qdisc class
handling. The issue occurs due to a time-of-check/time-of-use condition
in hfsc_change_class() when working with certain child qdiscs like netem
or codel.
The vulnerability works as follows:
1. hfsc_change_class() checks if a class has packets (q.qlen != 0)
2. It then calls qdisc_peek_len(), which for certain qdiscs (e.g.,
codel, netem) might drop packets and empty the queue
3. The code continues assuming the queue is still non-empty, adding
the class to vttree
4. This breaks HFSC scheduler assumptions that only non-empty classes
are in vttree
5. Later, when the class is destroyed, this can lead to a Use-After-Free
The fix adds a second queue length check after qdisc_peek_len() to verify
the queue wasn't emptied.
📍 영향받는 시스템
HFSC qdisc를 사용하는 Linux 커널 (netem 또는 codel qdisc와 함께 사용 시)
⚔️ 공격 벡터
특정 qdisc(netem, codel 등)를 사용하는 환경에서 네트워크 클래스 설정을 변경하여 메모리 오류 유도
🛡️ 대응 방법
HFSC qdisc 관련 패치가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인