[공격] 분석 — CVE-2025-21846
A local NULL pointer dereference in the Linux kernel's acct(2) system call can be triggered by pointing it to specific /sys paths, leading to a system crash (DoS); update the kernel to the patched version.
📋 요약
- 심각도 medium · CVSS 5.5 · EPSS 0.00222 · 악용난이도 hard
🔍 공격 기법
(1) 트리거 조건: acct(2) 시스템 콜을 사용하여 프로세스 회계 정보를 특정 파일에 기록하도록 설정할 때, 내부 lookup을 유발하는 특수 경로(예: /sys/power/resume)를 지정하면 발생함. 호출 태스크가 종료되어 exit_fs()가 실행된 후, workqueue에서 마지막 쓰기 작업이 수행될 때 current->fs 접근 시 NULL dereference가 발생하여 커널 패닉으로 이어짐.
(2) 공격 단계:
- 정찰: 대상 시스템의 커널 버전 확인 및
/sys/power/resume등 특수 파일 접근 권한 확인. - 초기접근: 로컬 쉘 계정 확보 (Low privilege user).
- 실행:
acct()시스템 콜에 취약한 경로를 인자로 전달하여 설정 $\rightarrow$ 프로세스 종료 유도 $\rightarrow$ 커널 내 workqueue의 비동기 쓰기 트리거. - 영향: NULL pointer dereference 발생 $\rightarrow$ Kernel Panic $\rightarrow$ 전체 시스템 중단(DoS).
(3) 공격 표면:
- 엔드포인트/함수:
acct(2)system call, kernel internal workqueue. - 파라미터:
acct()에 전달되는 파일 경로 문자열.
(4) CVSS 벡터 분석:
- AV:L (Local): 로컬 시스템 접근 권한이 필요함.
- AC:L (Low): 특정 경로 지정만으로 트리거 가능하여 복잡도가 낮음.
- PR:L (Low): 일반 사용자 권한으로
acct()호출 가능. - UI:N (None): 사용자 상호작용 불필요.
악용 가능성: 본 취약점은 AV:L 및 PR:L 벡터가 시사하듯, 공격자가 이미 시스템에 낮은 권한의 계정으로 로그인하여 쉘 접근 권한을 확보한 상태여야 하는 Local Privilege Escalation(LPE) 경로를 가집니다. 공격 표면은 Linux 커널의 acct(2) 시스템 콜이며, 특히 /sys/power/resume과 같이 내부 Lookup을 유발하는 특정 파일 엔드포인트로 프로세스 어카운팅 출력을 설정할 때 트리거됩니다. 실행 흐름상 호출 프로세스가 종료되어 exit_fs()가 수행된 후 Workqueue에서 최종 쓰기 작업이 발생할 때 current->fs에 접근하며 NULL dereference가 유발되는 구조입니다. EPSS 수치가 0.00222로 매우 낮고 KEV에 등재되지 않은 점은, 일반적인 외부 공격자가 즉각적으로 활용하기에는 트리거 조건이 까다롭고 실전 무기화 사례가 드물다는 것을 의미합니다. 하지만 커널 메모리 구조상 NULL 포인터 역참조를 통해 제어 흐름을 조작할 수 있는 다른 커널 결함과 체이닝될 경우, 권한 상승으로 이어질 가능성이 존재하므로 주의가 필요합니다. 결과적으로 공격 난이도는 hard 수준이나, 로컬 환경에서 커널 패닉(DoS) 유발 또는 정교한 메모리 레이아웃 조작을 통한 권한 획득 시도로 악용될 수 있습니다.
💥 영향 분석
(1) 기술적 위험: 서비스 거부(DoS). 커널 메모리 영역의 NULL 포인터 참조로 인해 시스템이 즉시 크래시되며, 재부팅 전까지 모든 서비스가 중단됨. 권한 상승이나 데이터 유출 가능성은 낮음.
(2) 비즈니스 영향: 가용성 상실. 서버 인프라의 예기치 못한 다운타임으로 인한 서비스 중단 및 이에 따른 SLA 위반 위험이 있음.
🔗 관련 취약점·체이닝
- 체이닝 경로: 추정: [로컬 권한 획득] $\rightarrow$ [CVE-2025-21846 (DoS)] $\rightarrow$ [시스템 재부팅 과정에서의 Race Condition 또는 부트로더 취약점 활용].
- 유형 수준 분석: 단순 DoS 취약점이나, 특정 고가용성(HA) 환경에서 한 노드를 강제로 다운시켜 트래픽을 다른 노드로 몰아넣는 '리소스 소진' 또는 '타겟 변경' 공격의 전 단계로 활용될 수 있음. 추정: 커널 내 다른 Use-After-Free(UAF)나 Race Condition과 결합하여 패닉 직전의 메모리 상태를 조작하려 시도할 가능성이 있으나, 본 취약점은 단순 NULL deref이므로 실행 흐름 제어(Control Flow Hijack)로 이어지기는 매우 어려움.
🔎 탐지
(1) 로그 지표: 커널 링 버퍼(dmesg) 또는 /var/log/syslog 내 NULL pointer dereference, kernel panic, acct 관련 stack trace 확인.
(2) 탐지 규칙 예시:
- 로직:
strace또는 eBPF를 통해acct()시스템 콜의 인자 중/sys/경로가 포함되었는지 모니터링. - 의사코드:
if (syscall == SYS_acct && contains(arg0, "/sys/")) { alert("Potential CVE-2025-21846 trigger"); } - SIEM 쿼리 패턴:
process.name == "unknown" AND syscall.name == "acct" AND args.path == "/sys/power/resume"(추정)
(3) 오탐 시나리오: 특수 시스템 관리 도구가 회계 기능을 위해/sys경로를 사용하는 경우. 튜닝 방법: 정상적인 관리자 계정 및 화이트리스트 프로세스 제외 처리.
🛡️ 완화 방안
- 즉시(긴급 차단):
acct()시스템 콜 사용을 제한하거나,/sys/power/resume등 취약점이 확인된 경로에 대한 쓰기 권한을 엄격히 제한함. (난이도: 하 / 영향: 낮음 / 검증:ls -l로 권한 확인) - 단기(완화): 커널 파라미터 또는 보안 모듈(SELinux/AppArmor)을 통해 일반 사용자의 특수 파일 접근 및 특정 시스템 콜 호출을 차단하는 정책 적용. (난이도: 중 / 영향: 중간 / 검증:
auditctl로그 확인) - 근본(해결): 패치된 커널 버전으로 업그레이드.
- 대상 버전: Linux kernel 6.1.131+, 6.6.81+, 6.12.18+, 6.13.6+ 등 (사실 근거 영향 제품의 상위 버전).
- 절차: 커널 업데이트 $\rightarrow$ 리부팅 $\rightarrow$
uname -r로 버전 확인. (난이도: 중 / 영향: 높음(재부팅 필요) / 검증: 버전 확인)
[파이프라인 근거] 본 분석은 다중 소스 데이터의 일관성이 확인된 [교차검증] 결과와 실측 EPSS 값(0.00222, 백분위 0.12966)을 근거로 작성되었습니다. EPSS 수치가 매우 낮고 KEV에 등재되지 않았으며 악용 난이도가 'hard'인 점을 반영하여 우선순위를 'monitor'로 결정하였습니다.
⚖️ 위험도 / 우선순위
- 조치: monitor (모니터링)
- 근거: CVSS=5.5 · non-KEV · EPSS=0.00222 · exploit=hard · in_scope=None