[단독방어] 분석 — CVE-2025-71079
A deadlock between
nfc_unregister_device()andrfkill_fop_write()can freeze NFC functionality on affected Linux kernels, and the immediate mitigation is to disable the NFC kernel module until a patched kernel is deployed.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00089 · 악용난이도 hard
🔍 공격 기법
rfkill_fop_write() (예: /dev/rfkill을 통해 비행기 모드 토글)와 nfc_unregister_device() (예: NFC 드라이버 언로드 또는 sysfs /sys/class/nfc/.../remove)가 동시에 실행되면,
- Thread A는
rfkill_global_mutex를 잡고device_lock(&dev->dev)을 기다리고, - Thread B는
device_lock(&dev->dev)를 잡은 뒤rfkill_global_mutex를 기다리는 ABBA 형태의 교착 상태가 발생한다.
공격자는 사용자 권한으로도 NFC 드라이버를 언로드하거나 rfkill 인터페이스에 반복적인 쓰기를 수행함으로써 이 경쟁 상황을 유발해 시스템 전체를 정지(DoS)시킬 수 있다.
악용 가능성: 이 취약점은 AV:L (로컬 접근)으로, 공격자는 해당 시스템에 직접 코드를 실행할 수 있어야 합니다. AC:L (낮은 난이도)인 이유는 nfc_unregister_device 와 rfkill_fop_write 함수를 순서대로 호출하기만 하면 잠금 순서 역전으로 인한 ABBA 데드락을 쉽게 유발할 수 있기 때문이며, 두 함수 모두 커널 모듈 인터페이스(예: /dev/rfkill 또는 NFC sysfs 경로)를 통해 로컬 프로세스가 접근 가능합니다. PR:L (낮은 권한)으로 평가된 것은 해당 호출이 루트 권한 없이도 가능한 경우가 존재한다는 점을 반영합니다(특히, NFC 장치를 관리하는 일반 사용자 그룹에 포함된 경우). UI:N 은 사용자의 별도 조작이 필요 없으며, 악성 로컬 프로그램만 실행하면 자동으로 트리거됩니다. EPSS 값 0.
💥 영향 분석
- 서비스 가용성: 교착 상태 발생 시 커널이 멈추어 모든 프로세스가 응답하지 않으며, 재부팅이 필요하다.
- 보안 속성: CVSS 벡터(C:N/I:N/A:H)와 일치하게 기밀성·무결성은 영향을 받지 않는다.
🔗 관련 취약점·체이닝
추정: 이 유형은 Lock Order Inversion (CWE‑??) 과 ABBA deadlock 패턴에 해당한다. 동일한 잠금 순서 역전 문제는 다른 드라이버(예: Bluetooth, Wi‑Fi)에서도 보고된 바 있어, 공격자가 여러 서브시스템을 연쇄적으로 언로드/제어하면 시스템 전체가 교착 상태에 빠질 위험이 있다.
🔎 탐지
-
로그 소스
dmesg/kernel.log: “deadlock detected” 혹은 “blocked for too long” 메시지.auditd:syscall=write로/dev/rfkill접근 기록과 동시에rmmod nfc(또는unlink/sys/class/nfc/*) 이벤트.tracepoint: lock_contention_start/end(kernel‑lockdep) – 동일한 스레드가rfkill_global_mutex와device_lock을 교차 대기하는 경우.
-
SIEM 쿼리 예시 (ELK/Kibana DSL)
1filter { 2 and 3 .message =~ "rfkill_fop_write" 4 .process.name == "rfkill" 5 .thread.id in ( 6 // 같은 타임윈도우(5s) 내에 device_lock 대기 로그와 매칭 7 select thread.id from logs where message =~ "device_lock.*nfc" and @timestamp > now()-5s 8 ) 9}-
정규식 탐지
rfkill_fop_write\(\).*mutex_lock\(.*&rfkill_global_mutexnfc_unregister_device\(\).*device_lock\(.*&dev->dev
-
오탐 튜닝
- 정상적인 NFC 모듈 로드/언로드 시점에만 발생할 수 있으므로, 위 쿼리에
@timestamp조건을 “짧은 연속 호출(≤2 s)”으로 제한한다. - 시스템 부팅 초기 단계에서의 대량 모듈 초기화는 제외(
process.name == "systemd"필터 추가).
- 정상적인 NFC 모듈 로드/언로드 시점에만 발생할 수 있으므로, 위 쿼리에
🛡️ 완화 방안
-
즉시(긴급 차단)
/etc/modprobe.d/blacklist-nfc.conf에blacklist nfc를 추가하고modprobe -r nfc로 현재 로드된 NFC 모듈을 언로드한다. 이는 NFC 기능을 완전히 비활성화해 교착 상태 발생 경로를 차단한다.- 구현 난이도: 낮음 / 운영 영향: NFC 사용 불가 (대부분 서버에서는 영향을 받지 않음) / 검증:
lsmod | grep nfc에 결과 없고,rfkill토글 시 커널 로그에 deadlock 메시지가 나타나지 않는지 확인.
-
단기(완화)
/dev/rfkill접근 권한을 제한한다:chmod 600 /dev/rfkill && chown root:root /dev/rfkill. 비루트 사용자는 rfkill 상태를 변경할 수 없어 경쟁 상황이 발생하지 않는다.
구현 난이도: 중간 / 운영 영향: 관리자가 아닌 일반 사용자에게 RF‑Kill 토글 기능 제한 / 검증:stat -c %a /dev/rfkill가 600인지 확인하고, 비루트 계정으로의 write 시도가 audit 로그에 기록되는지 점검.- 커널 lockdep 디버깅을 활성화(
CONFIG_LOCKDEP=y)하고,sysctl kernel.lock_stat=1로 잠금 대기 통계를 수집한다. 운영자는 주기적으로/proc/lock_stat를 확인해 비정상적인 대기 시간을 모니터링한다.
구현 난이도: 중간 / 운영 영향: 약간의 성능 오버헤드 (잠금 추적) / 검증:cat /proc/lock_stat | grep rfkill_global_mutex에 비정상적인 대기 횟수가 없음을 확인.
-
근본(해결)
- 공식 패치를 포함한 커널 버전으로 업그레이드한다. 영향을 받는 릴리즈는 4.4.293‑4.5, 4.9.291‑4.10, 4.14.256‑4.15, 4.19.218‑4.20, 5.4.162‑5.5,
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00089 · exploit=hard · in_scope=None