[방어] 분석 — CVE-2026-31423
CVE-2026-31423 is a local divide‑by‑zero bug in the HFSC network scheduler that can cause a kernel panic, and the fastest interim mitigation is to disable HFSC via
net_sched_hfsc_enable=0.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.0012 · 악용난이도 hard
🔍 공격 기법
tc qdisc add … hfsc 혹은 netlink TCQDISC_ADD 로 HFSC 스케줄러를 생성하고, m1(또는 m2) 값에 4 × 10⁹ 이상과 같은 큰 slope 를 지정하면 sch_hfsc.c 의 rtsc_min() 에서 u64 차이를 u32 로 강제 변환해 0이 되고, do_div() 가 divide‑by‑zero 를 일으켜 커널 Oops → 시스템 전체 패닉이 발생한다. 트리거 조건은 LOCAL(프로세스)이며 CAP_NET_ADMIN(또는 특권 컨테이너) 권한이 필요하다.
악용 가능성: 이 취약점은 AV:L(로컬 공격)·AC:L(낮은 복잡도)·PR:L(일반 사용자 권한)·UI:N(사용자 입력 없음)으로 평가되었으므로, 로컬 시스템에 로그인된 일반 사용자가 특수한 tc 명령이나 netlink 메시지를 통해 HFSC qdisc 구성을 조작하기만 하면 악용이 가능합니다. 공격자는 m1 값에 4 × 10⁹ 정도의 큰 슬로프를 지정하면 rtsc_min() 내부에서 32‑비트 변수 dsm가 0으로 트렁케이트되어 나눗셈 오류(OOPS)가 발생하고, 커널 패닉을 일으켜 서비스 거부(DoS)를 초래합니다. EPSS = 0.0012라는 실측값은 현재 전 세계에서 이 취약점이 실제로 이용된 사례가 극히 드물다는 것을 의미하지만, KEV에 등재되지 않은 점은 아직 대규모 악용 인프라가 구축되지 않았음을 나타냅니다. 따라서 이론적 심각도는 높지만, 실전 공격이 발생하려면 로컬에서 HFSC 스케줄러를 활성화하고 비정상적인 파라미터 값을 주입해야 하는 특수한 트리거 조건이 필요합니다. 노출되는 공격 표면은 Linux 커널의 네트워크 서브시스템 중 net/sched/sch_hfsc.c가 로드된 모든 호스트와, qdisc 구성을 조작할 수 있는 netlink 또는 tc 인터페이스이며, 해당 경로에 접근 가능한 프로세스만이 취약점을 이용할 수 있습니다. 결과적으로 공격 난이도는 낮지만 악용 가능성은 제한적이며, 주된 위험은 로컬 DoS 형태의 서비스 중단에 국한됩니다.
💥 영향 분석
- 가용성: Oops 로 인한 커널 패닉 → 호스트 재부팅 필요, 동일 물리·가상 머신에 배포된 모든 워크로드 중단.
- 범위: HFSC 스케줄러를 사용할 수 있는 모든 Linux 커널(2.6.12‑6.19.*)에 적용되며, 컨테이너/VM 환경에서도 네임스페이스 경계를 넘어 호스트 전체에 영향을 미칠 수 있다.
- 기밀성·무결성: CVSS 벡터에 C와 I가 None 이므로 직접적인 데이터 유출·변조는 없으며, 위험은 서비스 거부(DoS)이다.
🔗 관련 취약점·체이닝
HFSC 와 동일 net/sched 서브시스템에서 발견된 Oops 계열 버그(CVE‑2024‑xxxx 등)와 결합하면 커널 패닉 후 재부팅 스크립트를 악용해 권한 상승이나 지속적 서비스 방해로 이어질 가능성이 있다. 현재 확인된 직접적인 체이닝 사례는 없으나, 네트워크 스케줄링 계열 버그가 연속적으로 보고되는 점을 감안해 모니터링을 강화한다.
🔎 탐지
- 로그 위치:
dmesg,/var/log/kern.log,journalctl -k(kernel 메시지) - 핵심 필드/패턴
- 메시지에
rtsc_min와divide error가 동시에 포함 - Oops 콜스택에 파일 경로
net/sched/sch_hfsc.c가 나타남
- 메시지에
- SIEM 쿼리 예시
- Elastic/Kibana (Lucene)
1source:"kernel" AND message:/rtsc_min.*divide error/ AND message:/sch_hfsc\.c/- Splunk (Search Processing Language)
1index=kernel sourcetype=linux_kernel "rtsc_min" "divide error" "sch_hfsc.c"- 정규식 (로그 파싱 엔진용)
^.*rtsc_min\(.*\): divide error: 0+.*$
- 오탐 시나리오 및 튜닝
- 다른 커널 버그가 동일 문자열을 출력할 수 있으므로 파일 경로(
sch_hfsc.c)와 함께Call Trace:이후 최소 두 개 이상의 함수 이름이 포함된 경우만 매치하도록 조건 추가. - 테스트 환경에서 인위적 Oops 를 발생시켜 정상 부팅 로그와 구분되는 고유 패턴(예:
RIP: 0010:rtsc_min)을 기준으로 필터링한다.
- 다른 커널 버그가 동일 문자열을 출력할 수 있으므로 파일 경로(
🛡️ 완화 방안
-
즉시(긴급 차단)
- 조치:
sysctl -w net_sched_hfsc_enable=0로 HFSC 스케줄러 비활성화하고, 영구 적용은/etc/sysctl.d/99-hfsc.conf에net_sched_hfsc_enable = 0추가. - 구현 난이도: ★★ (루트 권한 한 줄 명령)
- 운영 영향: HFSC 기반 트래픽 쉐이핑·QoS 전부 사용 불가 → 대체 qdisc(e.g.,
fq_codel) 필요. - 검증 방법:
sysctl -a | grep net_sched_hfsc_enable로 0 확인,tc qdisc add dev <if> root hfsc …시 “Invalid argument” 오류 발생 여부 확인.
- 조치:
-
단기(완화)
- 권한 최소화 – 컨테이너·VM 에서
CAP_NET_ADMIN혹은 특권 모드 사용을 금지하고, 필요 시 제한된 서비스 계정만 부여.- 난이도: ★★★ (오케스트레이션 플랫폼 정책 수정)
- 영향: 네트워크 관리 자동화 도구가 동작하지 않을 수 있음 → 사전 협의 필요.
- 검증:
docker inspect <container>혹은kubectl get pod -o jsonpath='{..capAdd}'로 권한 부재 확인.
- Auditd 감시 –
auditctl -a always,exit -F arch=b64 -S setsockopt -F a0=... -k hfsc_add(HFSC qdisc 생성 시도 로그) 설정.- 난이도: ★★★ (규칙 작성·배포)
- 영향: 감사 로그량 증가.
- 검증:
ausearch -k hfsc_add로 이벤트 존재 여부 확인.
- SELinux/AppArmor 정책 –
netlink_route메시지 중TCQDISC_ADD와hfsc를deny규칙으로 추가.- 난이도: ★★★ (정책 컴파일·재로드)
- 영향: 기존 네트워크 스케줄링 도구가 차단될 수 있음.
- 검증:
/var/log/audit/audit.log에 “avc: denied … hfsc” 로그 존재 확인.
- 권한 최소화 – 컨테이너·VM 에서
-
근본(해결)
- 조치: 취약점이 포함된 커널 버전을 패치된 최신 릴리즈로 업그레이드. 적용 대상 범위는
- 2.6.12.1‑5.10.253 → 5.10.254 이상,
- 5.11‑5.15.203 → 5.15.204 이상,
- 5.16‑6.19.12 → 6.19.13 이상 등 최신 장기 지원(LTS) 커널.
- 구현 난이도: ★★★★★ (패키지 의존성 검증·재부팅 필요)
- 운영 영향: 재부팅에 따른 서비스 중단, 커널 모듈 호환성 검사 필요.
- 검증 방법:
uname -r로 버전 확인 후/usr/src/linux/Documentation/ChangeLog혹은git log -p -S "rtsc_min"에서 패치 포함 여부 확인; 부팅 후 동일 로그가 재발하지 않는지dmesg검사.
- 조치: 취약점이 포함된 커널 버전을 패치된 최신 릴리즈로 업그레이드. 적용 대상 범위는
잔여 리스크: HFSC 비활성화 시 해당 경로는 호출되지 않으므로 본 취약점은 사라진다. 그러나 다른 net/sched 서브시스템 버그가 존재할 수 있으니, 위 탐지 규칙을 지속적으로 운영하고 커널 업데이트 주기를 유지한다.
인시던트 대응 플레이북 (요약)
journalctl -k | grep -E "rtsc_min.*divide error"로 Oops 발생 여부 확인.- 발생 시
dmesg -T -n 20로 전체 콜스택 확보, PID/프로세스 식별 (ps -p <pid>). - 즉시
sysctl -w net_sched_hfsc_enable=0적용 후 필요 시 호스트 재부팅. - 해당 프로세스가 실행된 컨테이너·VM 의 권한 설정을 검토하고, 위 단기 완화 조치를 적용.
- 패치되지 않은 커널을 사용 중인 시스템 목록을 작성하고, 차례대로 업그레이드 수행.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.0012 · exploit=hard · in_scope=None