CVE-2025-21702
pfifo_tail_enqueue: sch->limit == 0일 때 새 패킷 드롭
- 게시됨
- 2025. 2. 18.
- 업데이트됨
- 2026. 9. 8.
- CNA 할당 중
- Linux
- 증거 관찰됨
- 2026. 8. 14.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H낮음 · 다음 30일
- 백분위수
- 19.8%
- 모델 날짜
- 2026. 9. 21.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
Linux 커널에서 다음 취약점이 해결되었습니다: pfifo_tail_enqueue: sch->limit == 0일 때 새 패킷 드롭 예상 동작: 스케줄러의 한도에 도달한 경우, pfifo_tail_enqueue()는 스케줄러의 큐에서 패킷 하나를 드롭하고 스케줄러의 qlen을 1만큼 감소시킵니다. 그런 다음 pfifo_tail_enqueue()는 새 패킷을 enqueue하고 스케줄러의 qlen을 1만큼 증가시킵니다. 마지막으로 pfifo_tail_enqueue()는 `NET_XMIT_CN` 상태 코드를 반환합니다. 이상 동작: `sch->limit == 0`으로 설정하고 패킷이 없는 스케줄러에서 pfifo_tail_enqueue()를 트리거하면, '패킷 드롭' 단계는 아무 작업도 수행하지 않습니다. 이는 스케줄러의 qlen이 여전히 0과 같은 값을 가짐을 의미합니다. 그런 다음 새 패킷을 enqueue하고 스케줄러의 qlen을 1만큼 증가시킵니다. 요약하면, pfifo_tail_enqueue()를 활용하여 qlen을 1만큼 증가시키고 `NET_XMIT_CN` 상태 코드를 반환할 수 있습니다. 문제는 다음과 같습니다: 두 개의 qdisc, Qdisc_A와 Qdisc_B가 있다고 가정해 봅시다. - Qdisc_A의 유형에는 부모/자식 관계를 생성하는 '->graft()' 함수가 있어야 합니다. Qdisc_A의 유형이 `hfsc`라고 가정해 봅시다. 이 qdisc에 패킷을 enqueue하면 `hfsc_enqueue`가 트리거됩니다. - Qdisc_B의 유형은 pfifo_head_drop입니다. 이 qdisc에 패킷을 enqueue하면 `pfifo_tail_enqueue`가 트리거됩니다. - Qdisc_B는 `sch->limit == 0`으로 구성됩니다. - Qdisc_A는 enqueue된 패킷을 Qdisc_B로 라우팅하도록 구성됩니다. Qdisc_A를 통해 패킷을 enqueue하면 다음이 발생합니다: - hfsc_enqueue(Qdisc_A) -> pfifo_tail_enqueue(Qdisc_B) - Qdisc_B->q.qlen += 1 - pfifo_tail_enqueue()가 `NET_XMIT_CN` 반환 - hfsc_enqueue()가 `NET_XMIT_SUCCESS`를 확인하고 `NET_XMIT_CN`을 확인 => hfsc_enqueue()는 Qdisc_A의 qlen을 증가시키지 않음 전체 과정은 Qdisc_A->q.qlen == 0이고 Qdisc_B->q.qlen == 1인 상황을 초래합니다. 'hfsc'를 다른 유형(예: 'drr')으로 교체해도 동일한 문제가 발생합니다. 이는 부모의 qlen이 자식들의 qlen 합계와 같아야 한다는 설계를 위반합니다. 버그 영향: 이 문제는 도달 가능한 경우 사용자->커널 권한 상승에 사용될 수 있습니다.
소스
1Linux 커널 CVE 익스플로잇 분석 보고서 및 관련 디버그 환경. 더 이상 Linux 커널을 컴파일하고 환경을 구성할 필요가 없습니다.
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.