[방어] 분석 — CVE-2024-50063
A BPF verifier bypass in the Linux kernel allows tail calls between programs attached to different hooks, potentially leading to privilege escalation; disable unprivileged BPF or update the kernel immediately.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00232 · 악용난이도 hard
🔍 공격 기법
(1) 트리거 조건: 서로 다른 커널 훅(Hook)에 부착된 두 개의 BPF 프로그램 간에 tail call을 수행할 때 발생합니다. BPF 검증기(Verifier)가 대상 프로그램의 컨텍스트(ctx) 구조와 반환 값 규칙을 호출자 프로그램의 컨텍스트와 대조하지 않고, 대상 프로그램이 원래 부착되었어야 할 훅의 프로토타입을 기준으로 검증하는 결함을 이용합니다.
(2) 공격 단계:
- 정찰/초기접근: 로컬 사용자 권한으로 시스템에 접속 (전제조건:
CAP_BPF또는 unprivileged BPF 허용 설정). - 실행 및 권한 획득:
- 서로 다른 파라미터/반환 값을 가진 두 개의 훅(예:
func1과func2)을 식별합니다. func1에 부착된prog1이func2에 부착된prog2를tail call하도록 구성합니다.prog2는 검증기를 속여func1의 컨텍스트에서는 접근 불가능한 메모리 영역(추정:func2전용 파라미터 영역)에 접근하거나, 잘못된 반환 값을 통해 커널 로직을 왜곡합니다.- 이를 통해 임의 메모리 읽기/쓰기를 수행하여 권한 상승(Privilege Escalation)을 시도합니다.
- 서로 다른 파라미터/반환 값을 가진 두 개의 훅(예:
(3) 공격 표면: Linux Kernel BPF subsystem (bpf() system call).
(4) CVSS 벡터 연결: AV:L (로컬 접근 필요), AC:L (공격 복잡도 낮음), PR:L (낮은 수준의 사용자 권한 필요), UI:N (사용자 상호작용 불필요). 즉, 시스템에 계정을 가진 일반 사용자가 커널 권한을 획득하려는 시나리오입니다.
악용 가능성: 본 취약점의 공격 난이도는 Hard로 판정되며, 이는 AV:L 벡터가 시사하듯 공격자가 이미 시스템에 로컬 접근 권한을 가진 상태에서만 트리거 가능하기 때문입니다. 공격 표면은 Linux 커널의 BPF(Berkeley Packet Filter) 서브시스템으로, 서로 다른 훅(Hook)에 연결된 BPF 프로그램 간의 tail call을 통해 발생합니다. 구체적으로는 파라미터 구성이 다른 두 함수(func1, func2) 사이에서 검증기(Verifier)가 컨텍스트(ctx) 접근 제어를 우회하게 만드는 메커니즘을 이용합니다. 다만, PR:L 조건으로 인해 일반 사용자가 아닌 특정 권한을 가진 계정의 탈취나 내부자 위협이 전제되어야 합니다. EPSS 수치가 0.00232로 매우 낮고 KEV에 등재되지 않은 점은 현재 외부에서 자동화된 공격 도구(Exploit Kit)가 보급되지 않았음을 의미하며, 이론적 심각도 대비 실제 악용 가능성은 낮은 상태입니다. 결과적으로 본 취약점은 로컬 권한 상승을 노리는 정교한 타겟형 공격에 제한적으로 이용될 가능성이 큽니다.
💥 영향 분석
(1) 기술적 위험: BPF 검증기 우회를 통한 임의 커널 메모리 접근 및 변조가 가능합니다. 이는 최종적으로 로컬 권한 상승(LPE)으로 이어져 루트(root) 권한을 획득하거나, 시스템 전체의 무결성을 파괴할 수 있습니다.
(2) 비즈니스 영향: 서버 내 데이터 유출, 악성코드 설치 및 지속성 확보가 가능하며, 멀티테넌트 환경(컨테이너 등)에서 호스트 커널 장악 시 다른 테넌트로의 횡적 이동 위험이 발생합니다.
🔗 관련 취약점·체이닝
- 추정:
정보 노출 (KASLR 우회)$\rightarrow$BPF Verifier Bypass$\rightarrow$임의 메모리 쓰기$\rightarrow$권한 상승 (Privilege Escalation)순으로 체이닝될 가능성이 높습니다. BPF 취약점은 일반적으로 커널 주소 공간을 먼저 파악해야 효과적으로 공격할 수 있기 때문입니다.
🔎 탐지
(1) 로그 지표:
/var/log/syslog또는dmesg: BPF 관련 세그멘테이션 폴트나 커널 패닉(Kernel Panic), 혹은 비정상적인 BPF 프로그램 로드 시도 로그.- Auditd:
syscall=bpf호출 기록 및 실행 사용자 ID.
(2) 탐지 규칙 예시:
- SIEM 쿼리 (의사코드):
SELECT timestamp, user_id, pid FROM audit_logs WHERE syscall == 'bpf' AND (cmd_args CONTAINS 'BPF_PROG_LOAD' OR cmd_args CONTAINS 'BPF_OBJ_GET') AND user_id NOT IN ('root', 'system_admin') - 탐지 로직: 일반 사용자 계정이 짧은 시간 내에 다수의 BPF 프로그램을 생성하고 로드하는 패턴을 모니터링합니다. (임계값: 1분 내 5회 이상
bpf()시스템 콜 호출 시 경고)
(3) 오탐 시나리오 및 튜닝:
- 오탐:
systemd,bpftrace,cilium등 정당한 모니터링/네트워킹 도구가 BPF를 사용하는 경우. - 튜닝: 화이트리스트 기반으로 신뢰할 수 있는 바이너리 경로 및 실행 사용자를 제외 처리합니다.
🛡️ 완화 방안
본 리포트는 다중 소스 교차검증을 통해 데이터 일관성을 확인하였으며, EPSS 실측값(0.00232)과 KEV 미등재 사실을 근거로 실제 악용 가능성이 낮아 우선순위를 scheduled(이번 주 내)로 결정하였습니다.
-
즉시 (긴급 차단):
- 조치:
unprivileged_bpf_disabled설정 활성화. - 방법:
sysctl -w kernel.unprivileged_bpf_disabled=1실행 및/etc/sysctl.conf에 반영. - 난이도: 매우 낮음 / 운영 영향: 일반 사용자의 BPF 도구 사용 불가 / 검증:
sysctl kernel.unprivileged_bpf_disabled값 확인. (최우선 권장)
- 조치:
-
단기 (완화):
- 조치:
CAP_BPF,CAP_SYS_ADMIN권한을 가진 계정 및 프로세스 최소화. - 난이도: 보통 / 운영 영향: 일부 관리 도구 작동 제한 가능 / 검증:
getcap명령어로 불필요한 권한 부여 여부 확인.
- 조치:
-
근본 (해결):
- 조치: 영향받는 커널 버전(5.5~6.11.4 범위 내 해당 버전)을 패치된 최신 버전으로 업데이트.
- 난이도: 보통 / 운영 영향: 시스템 재부팅 필요로 인한 가용성 일시 중단 / 검증:
uname -r로 커널 버전 확인 및 벤더 제공 보안 패치 적용 여부 대조.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00232 · exploit=hard · in_scope=None