[단독공격] 분석 — CVE-2025-21718
The Linux kernel ROSE timer use‑after‑free (CVE-2025-21718) allows a local low‑privilege attacker to achieve kernel code execution, and the priority mitigation is immediate kernel update or disabling the ROSE module.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00163 · 악용난이도 hard
🔍 공격 기법
- 공격 표면:
net/rose/rose_timer.c의 타이머 콜백rose_timer_expiry()가 호출되는 시점에 ROSE 소켓(AF_ROSE)을 생성·해제할 수 있는 로컬 프로세스. - 트리거 조건:
- 커널 버전이 취약 범위(2.6.12‑6.13.2) 내이고
rose모듈이 로드된 상태. - 공격자는 ROSE 소켓을 열고, 타이머를 시작한 뒤 동시에 해당 소켓을 닫거나 다른 스레드에서 사용 중인 소켓을 해제한다(타이머와 사용자 스레드 간 레이스).
- 커널 버전이 취약 범위(2.6.12‑6.13.2) 내이고
- 단계별 흐름
- 정찰:
uname -r·lsmod | grep rose로 취약 커널 및 모듈 존재 여부 확인. - 초기 접근: 일반 사용자 권한으로
socket(AF_ROSE, SOCK_DGRAM, ...)호출하여 ROSE 소켓을 만든다. - 실행·권한 획득: 타이머가 만료될 때 스핀락만 잡고 소켓 소유 여부를 확인하지 않아 이미 해제된 구조체에 접근 → use‑after‑free 발생. 메모리 할당 패턴을 조작해 자유 객체를 공격자가 제어 가능한 데이터(예: 커널 ROP 체인)로 채우면, 타이머 콜백에서 해당 데이터를 실행하게 된다.
- 지속: 성공적인 커널 권한 상승 후
root쉘 획득 → 루트킷·모듈 로드 등 영구화 가능.
- 정찰:
- CVSS 벡터와 실제 조건 매핑: AV:L(로컬), AC:L(레이스 타이밍만 맞추면 됨), PR:L(일반 사용자), UI:N(자동 실행). 즉, 별도의 네트워크 입력 없이 로컬 프로세스만으로 공격이 완성된다.
- 핵심 원리: 타이머 콜백에서 소켓 스핀락을 잡고도
sock_owned_by_user()검사를 누락 → 해제된struct sock에 대한 접근 → 메모리 손상·코드 실행.
악용 가능성: AV:L 은 로컬 공격자를 전제로 하며, 실제로는 해당 시스템에 쉘을 얻은 사용자(일반 계정)만 있으면 됩니다. PR:L 과 AC:L 가 모두 낮게 설정돼 있어, 일반 권한의 사용자가 net/rose 소켓을 생성하고 타이머 옵션을 조작(set/getsockopt)하기만 하면 공격이 가능하므로 복잡도는 매우 낮습니다. UI:N 은 공격 수행 후 별도의 사용자 상호작용이 필요 없음을 의미하므로, 일단 로컬 접근 권한을 확보하면 자동으로 레이스를 유발할 수 있습니다. EPSS = 0.00163 은 실제 환경에서 이 취약점이 0.163 % 정도의 확률로 악용된 사례가 존재함을 보여주며, KEV에 등재되지 않았더라도 실전
💥 영향 분석
- 성공 시 공격자는 커널 수준 코드 실행을 얻어 전 시스템을 장악할 수 있다.
- 권한 상승 후 루트 파일시스템 마운트, 보안 모듈 우회, 네트워크 트래픽 가로채기 등 모든 시스템 자원에 무제한 접근이 가능해진다.
🔗 관련 취약점·체이닝
- CWE‑416(Use After Free)와 동일한 메모리 관리 결함이며, 다른 커널 타이머/스핀락 결합 버그(CVE‑2024‑xxxx 등)가 존재한다면 타이머 레이스 → 권한 상승 체인이 구성될 수 있다.
- 추정: 이미 알려진
netfilter혹은nf_conntrack의 타이머 레이스와 조합하면, 먼저 네트워크 패킷을 조작해 메모리 할당 상태를 정교히 준비하고 이후 ROSE 타이머를 트리거함으로써 예측 가능한 주소에 ROP 체인을 심는 것이 가능할 수 있다.
🔎 탐지
- 커널 로그에
BUG: KASAN: slab-use-after-free in rose_timer_expiry와 같은 메시지가 기록될 경우 즉시 경보. dmesg혹은 시스템 로그에서rose_timer.c:174라인 주소가 포함된 oops/trace 출력 감지.- eBPF 또는 ftrace 로
rose_timer_expiry호출 빈도·스택 트레이스를 모니터링하고, 비정상적인 짧은 인터벌의 타이머 재설정 패턴을 탐지.
🛡️ 완화 방안
- 패치 적용: 최신 커널(6.13.3 이상) 또는 배포판에서 제공하는 보안 업데이트를 즉시 설치한다.
- 모듈 비활성화: ROSE 프로토콜이 필요 없을 경우
modprobe -r rose로 모듈을 언로드하고,/etc/modprobe.d/disable-rose.conf에blacklist rose를 추가한다. - 임시 방어: SELinux/AppArmor 정책으로
AF_ROSE소켓 생성 권한을 제한하거나, 시스템 콜 필터(seccomp)를 통해 해당 소켓 타입을 차단한다. - 모니터링 강화: 위 탐지 항목을 SIEM에 연동해 실시간 알림을 구성하고, KASAN 활성화가 가능한 환경에서는 지속적인 메모리 오류 검사를 유지한다.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00163 · exploit=hard · in_scope=None