CVE-2024-56770 in Linux
요약
\~에 의해 VulDB • 2026. 06. 21.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net/sched: netem: 자식 qdisc의 백로그 업데이트를 반영함
일반적으로 모든 계층형(qclassful) qdisc의 'qlen'은 해당 qdisc 자체와 그 하위(자식) qdisc들이 보유하고 있는 패킷 수를 추적해야 합니다. netem의 경우, 'qlen'은 내부 tfifo에 있는 패킷에만 대해 계산됩니다. netem이 자식 qdisc와 함께 사용될 때, 자식 qdisc는 생성되거나 삭제된 SKBs(parent에게 알리기 위해)을 부모인 netem에 통지하기 위해 'qdisc_tree_reduce_backlog' 함수를 사용할 수 있습니다. 이 함수는 netem의 'qlen'과 백로그 통계 값을 업데이트하지만, netem은 자식 qdisc가 변경한 내용을 반영하지 않습니다. 이로 인해 tfifo 내 패킷 수가 잘못된 값으로 표시됩니다.
자식 qdisc가 enqueue(큐 삽입) 중에 새로운 SKBs를 생성하고 이를 부모에게 알리면, netem의 'qlen' 값이 증가합니다. 그러나 netem이 자식으로 부터 새로 생성된 SKBs를 dequeue(큐 제거)할 때, netem 내의 'qlen'은 업데이트되지 않습니다. 만약 'qlen'이 구성된 sch->limit에 도달하면, tfifo가 가득 차지 않았음에도 불구하고 enqueue 함수 작동을 멈춥니다.
버그 재현 방법: 송신자 머신의 GSO(Generic Segmentation Offload)가 활성화되어 있는지 확인합니다. outgoing 인터페이스에서 루트 qdisc로 netem을 설정하고 그 자식으로 tbf를 다음과 같이 구성합니다: $ tc qdisc add dev root handle 1: netem delay 100ms limit 100 $ tc qdisc add dev parent 1:0 tbf rate 50Mbit burst 1542 latency 50ms
이 인터페이스를 통해 대량의 TCP 트래픽을 전송합니다. 예를 들어, 머신에서 iPerf3 클라이언트를 실행하여 수행할 수 있습니다. qdisc 통계를 확인합니다: $ tc -s qdisc show dev
패치 적용 전 iPerf3 TCP 테스트 10초 후의 통계(netem의 backlog > limit이며, netem이 패킷 수용을 중단했음에 유의): qdisc netem 1: root refcnt 2 limit 1000 delay 100ms Sent 2767766 bytes 1848 pkt (dropped 652, overlimits 0 requeues 0) backlog 4294528236b 1155p requeues 0 qdisc tbf 10: parent 1:1 rate 50Mbit burst 1537b lat 50ms Sent 2767766 bytes 1848 pkt (dropped 327, overlimits 7601 requeues 0) backlog 0b 0p requeues 0
패치 적용 후의 통계: qdisc netem 1: root refcnt 2 limit 1000 delay 100ms Sent 37766372 bytes 24974 pkt (dropped 9, overlimits 0 requeues 0) backlog 0b 0p requeues 0 qdisc t
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.