🇰🇷 한글 설명
Linux 커널 netfilter의 IDLETIMER 모듈에서 교착 상태(ABBA deadlock) 가능성이 발견되었습니다. 마지막 IDLETIMER 규칙 삭제와 sysfs 파일 읽기가 동시에 일어날 때 list_mutex와 kernfs 잠금이 서로 순환 대기하여 시스템이 멈출 수 있습니다. 수정은 리스트에서 요소를 제거한 직후 list_mutex를 해제하도록 변경하는 것입니다.
💡 쉬운 설명
방화벽 규칙을 지우는 작업과 타이머 상태를 읽는 작업이 동시에 일어나면 두 작업이 서로의 자원을 기다리며 멈출 수 있습니다. 이로 인해 네트워크 관련 처리가 정지되어 서비스 장애가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: IDLETIMER: Fix for possible ABBA deadlock
Deletion of the last rule referencing a given idletimer may happen at
the same time as a read of its file in sysfs:
| ======================================================
| WARNING: possible circular locking dependency detected
| 6.12.0-rc7-01692-g5e9a28f41134-dirty #594 Not tainted
| ------------------------------------------------------
| iptables/3303 is trying to acquire lock:
| ffff8881057e04b8 (kn->active#48){++++}-{0:0}, at: __kernfs_remove+0x20
|
| but task is already holding lock:
| ffffffffa0249068 (list_mutex){+.+.}-{3:3}, at: idletimer_tg_destroy_v]
|
| which lock already depends on the new lock.
A simple reproducer is:
| #!/bin/bash
|
| while true; do
| iptables -A INPUT -i foo -j IDLETIMER --timeout 10 --label "testme"
| iptables -D INPUT -i foo -j IDLETIMER --timeout 10 --label "testme"
| done &
| while true; do
| cat /sys/class/xt_idletimer/timers/testme >/dev/null
| done
Avoid this by freeing list_mutex right after deleting the element from
the list, then continuing with the teardown.
📍 영향받는 시스템
IDLETIMER 타겟을 사용하는 iptables/netfilter 구성의 Linux 커널 (수정 커밋 이전 버전)
⚔️ 공격 벡터
권한이 있는 로컬 사용자가 IDLETIMER 규칙을 반복 추가/삭제하면서 동시에 해당 sysfs 파일을 반복 읽어 교착 상태를 유발
🛡️ 대응 방법
커널을 CVE-2024-54683 수정이 포함된 최신 안정 버전으로 업데이트하고 재부팅
🔧 검증 코드
커널 버전이 패치된 배포판 최신 버전인지 확인하고, 출력된 버전이 벤더 보안 공지의 수정 버전 이상이면 패치가 적용된 것으로 판단합니다.
uname -r; grep -rl idletimer /lib/modules/$(uname -r) 2>/dev/null | head -1