🇰🇷 한글 설명
Linux 커널 bridge mrp 모듈에서 사용자 입력 interval 값의 검증 부재로 인한 취약점입니다. interval을 0으로 설정하면 지연된 작업이 0 지연으로 계속 재스케줄되어 MRP 테스트 프레임을 최대 속도로 생성하는 tight loop이 발생합니다. 이로 인해 시스템 메모리가 고갈되어 OOM 데드락 및 커널 panic이 발생합니다.
💡 쉬운 설명
Linux 시스템의 네트워크 설정 중 특정 옵션에 0을 입력하면 시스템이 무한 루프에 빠져 메모리를 모두 소비해서 다운됩니다. 일반 사용자나 공격자가 이 옵션을 0으로 설정하면 서버를 마비시킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bridge: mrp: reject zero test interval to avoid OOM panic
br_mrp_start_test() and br_mrp_start_in_test() accept the user-supplied
interval value from netlink without validation. When interval is 0,
usecs_to_jiffies(0) yields 0, causing the delayed work
(br_mrp_test_work_expired / br_mrp_in_test_work_expired) to reschedule
itself with zero delay. This creates a tight loop on system_percpu_wq
that allocates and transmits MRP test frames at maximum rate, exhausting
all system memory and causing a kernel panic via OOM deadlock.
The same zero-interval issue applies to br_mrp_start_in_test_parse()
for interconnect test frames.
Use NLA_POLICY_MIN(NLA_U32, 1) in the nla_policy tables for both
IFLA_BRIDGE_MRP_START_TEST_INTERVAL and
IFLA_BRIDGE_MRP_START_IN_TEST_INTERVAL, so zero is rejected at the
netlink attribute parsing layer before the value ever reaches the
workqueue scheduling code. This is consistent with how other bridge
subsystems (br_fdb, br_mst) enforce range constraints on netlink
attributes.
📍 영향받는 시스템
Linux kernel (bridge MRP 기능이 활성화된 커널, 특정 버전 범위)
⚔️ 공격 벡터
netlink 인터페이스를 통해 IFLA_BRIDGE_MRP_START_TEST_INTERVAL 또는 IFLA_BRIDGE_MRP_START_IN_TEST_INTERVAL에 0 값을 전송
🛡️ 대응 방법
Linux 커널을 패치된 최신 버전으로 업그레이드하여 netlink 속성 레이어에서 0 값 거부 로직 적용
🔧 검증 코드
출력된 커널 버전이 패치된 버전보다 크거나 같으면 취약점이 해결된 상태입니다.