[공격] 분석 — CVE-2024-50063
Local low‑privilege eBPF tail‑call bypass allows arbitrary kernel memory access; patch immediately or disable unprivileged BPF.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00232 · 악용난이도 hard
🔍 공격 기법
- 트리거 조건
- 로컬 시스템에서
bpf()시스템 콜을 이용해 두 개 이상의 eBPF 프로그램을 각각 다른 커널 훅(예:func1,func2)에 attach 할 수 있어야 함. - 해당 커널 버전(5.5‑6.11.4)에서는 제한된 권한(Low privilege, PR:L)으로도 일부 BPF 프로그램 로드가 허용됨[교차검증].
- 로컬 시스템에서
- 공격 흐름
- 정찰 –
/sys/kernel/debug/tracing/available_filter_functions등에서 현재 커널에 존재하는 훅 목록과 각 훅의 프로토타입을 파악. - 초기 접근 –
bpf()를 이용해prog1을func1(파라미터 1개) 에 attach. 이 단계는 로컬 계정만 있으면 가능하므로 AV:L, AC:L, PR:L, UI:N에 부합. - 실행·권한 획득 –
prog1내부에서bpf_tail_call()을 호출해 미리 로드된prog2(func2에 attach, 파라미터 2개) 로 전환. 검증기는prog2가func2의 ctx를 받는다고 가정하지만 실제로는func1기반 ctx가 전달돼 두 번째 파라미터 접근이 허용됨. - 지속 –
prog2를 이용해 커널 메모리(예:task_struct->cred)를 읽거나 수정하고, 루트 권한을 획득한 뒤 시스템 콜 인터페이스(bpf()혹은/proc/self/mem)에 백도어를 심음. - 영향 – 루트 권한 상승 및 임의 코드 실행(Privilege Escalation, Remote Code Execution 가능성).
- 정찰 –
- 공격 표면
bpf()시스템 콜,/proc/sys/kernel/unprivileged_bpf_disabled설정, eBPF 맵(prog_array) 업데이트.- 검증 우회는 동일 프로세스 내 tail‑call 연결에 한정되지만, LSM 훅(예:
file_alloc_security)과 일반 BPF 훅을 교차 사용하면 권한 체크를 완전히 회피할 수 있음.
악용 가능성: 이 취약점은 AV:L / AC:L / PR:L / UI:N 로 평가되었으며, 이는 공격자가 로컬에서 특권 없이도(예: 일반 사용자 계정) BPF 프로그램을 커널에 로드하고 실행할 수 있을 경우 추가적인 상호작용 없이 바로 이용이 가능함을 의미합니다. 그러나 실제로 BPF 프로그램을 삽입하려면 CAP_BPF 혹은 unprivileged_userns 설정과 같이 특수한 커널 구성이나 네임스페이스 권한이 필요하므로, 일반적인 배포 환경에서는 이러한 전제조건을 충족시키기가 어렵습니다. EPSS = 0.00232 로 매우 낮게 측정된 점은 과거에 보고된 실전 악용 사례가 거의 없으며, 공격자가 실제로 이 경로를 찾아내어 성공시킨 빈도가 희박함을 보여줍니다. 또한 KEV 리스트에 포함되지 않은 것은 현재까지 주요 공급망이나 대규모 공격에서 활용된 적이 없다는 추가적인 증거입니다. 노출되는 공격 표면은 BPF 프로그램이 붙는 커널 훅(예: kprobe, tracepoint)과 해당 훅에 전달되는 컨텍스트 구조이며, 서로 다른 프로토타입을 가진 두 훅 사이에서 tail‑call을 수행할 경우 검증 로직을 우회해 잘못된 파라미터나 반환값에 접근할 수 있습니다. 따라서 공격자는 (1) BPF 프로그램 로드 권한 확보 → (2) 서로 다른 훅에 프로그램 배치 → (3) 의도적인 tail‑call 연결을 통해 verifier가 기대하는 ctx 레이아웃을 깨뜨리는 순서로 체인을 구성해야 하며, 이 전체 과정이 실제 환경에서 재현되기 위해서는 위와 같은 권한·구성 전제가 모두 충족되어야 합니다.
💥 영향 분석
- 성공 시 공격자는 커널 메모리를 자유롭게 읽고 쓸 수 있어 루트 권한 획득 및 임의 코드 실행이 가능함.
- LSM(보안 모듈) 훅에 대한 검증 우회가 포함돼 보안 정책(bpf_lsm_audit_rule_known 등)이 무력화될 위험이 있음.
🔗 관련 취약점·체이닝
- 현재 공개된 CVE 번호 외에 직접적인 연관 CVE는 확인되지 않음[추정].
- 유형: BPF verifier bypass → 권한 상승(Privilege Escalation) → 커널 메모리 조작.
- 유사 패턴으로는
CVE‑2022‑0847 (Dirty Pipe)와 같은 로컬 권한 상승 체인에서 “권한 검증 우회 → 임의 메모리 쓰기” 단계가 공통됨.
🔎 탐지
- 시스템 콜 감시:
auditd에서bpf()호출과bpf_prog_load,bpf_map_update_elem이벤트를 로깅. - eBPF 프로그램 변화:
/sys/kernel/debug/tracing/trace_pipe에 BPF 프로그램 attach/detach 로그가 남으며, 특히 동일 프로세스에서prog_array업데이트 후 다른 훅으로의 tail‑call 시도가 보이면 경고. - LSM 이벤트:
bpf_lsm_audit_rule_known등 LSM 훅이 비정상적으로 호출되는 경우 SELinux/AppArmor 로그에 기록.
🛡️ 완화 방안
- 패치 적용: 5.5‑6.11.4 버전의 커널을 최신 보안 업데이트(해당 취약점 패치 포함)로 즉시 교체.
- 설정 제한:
sysctl -w kernel.unprivileged_bpf_disabled=1로 비특권 사용자에 대한 BPF 로드를 차단. - Seccomp 프로필:
bpf()시스템 콜을 허용하지 않도록 컨테이너/서비스 별 Seccomp 정책 적용. - 감시 강화: 위 탐지 항목을 모니터링하고, 의심스러운 BPF 프로그램 로드가 감지되면 자동 차단·알림 워크플로를 구축.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00232 · exploit=hard · in_scope=None