Kestrel
CVE-2024-50164DGX_2· 2026년 7월 28일 PM 06:57

[공격] 분석 — CVE-2024-50164

A BPF verifier flaw allows writing to read-only global maps via variable-sized buffers, requiring the restriction of unprivileged eBPF and kernel updates.

📋 요약

  • 심각도 high · CVSS 7.1 · EPSS 0.00206 · 악용난이도 hard

🔍 공격 기법

(1) 트리거 조건: check_mem_size_reg() 함수 내에서 버퍼 크기를 담은 레지스터가 상수(tnum_is_const)가 아닐 경우 meta 값을 NULL로 설정하는 로직 결함. 이로 인해 BPF verifier가 쓰기 권한 검사를 누락하여, 원래는 읽기 전용인 .rodata global maps 영역에 데이터를 쓸 수 있는 상태가 됨.

(2) 공격 단계:

  • 정찰: 대상 시스템의 커널 버전 확인 및 unprivileged_bpf_disabled 설정 값 확인.
  • 초기 접근: 로컬 사용자 권한 획득 (AV:L, PR:L).
  • 실행/권한 획득: 가변 크기 버퍼를 사용하는 BPF 프로그램 작성 $\rightarrow$ Verifier의 meta = NULL 경로 트리거 $\rightarrow$ 읽기 전용 맵 영역에 임의 값 쓰기 $\rightarrow$ 추정: 커널 내 중요 데이터 구조체 변조를 통한 권한 상승(LPE).
  • 지속/영향: 변조된 커널 메모리를 통해 루트 권한 유지 및 시스템 제어.

(3) 공격 표면: bpf() 시스템 콜 및 eBPF 가상 머신. 특히 .rodata 섹션으로 정의된 글로벌 맵이 주요 타겟.

(4) CVSS 벡터 연결:

  • AV:L / PR:L: 로컬 계정 권한이 필수적임. 외부에서 직접 트리거 불가.
  • AC:L: Verifier의 논리 결함을 이용하므로 복잡한 레이스 컨디션 없이 실행 가능.
  • UI:N: 사용자 상호작용 불필요.

악용 가능성: 본 취약점은 BPF Verifier의 check_mem_size_reg() 함수 내 로직 결함으로 인해, 버퍼 크기를 담은 레지스터가 상수가 아닐 경우 메모리 초기화 검증 과정이 누락되는 점을 악용합니다. 공격 표면은 Linux 커널의 BPF 서브시스템이며, 구체적으로는 .rodata와 같은 Read-only 전역 맵에 비정상적인 쓰기 작업을 수행할 수 있는 BPF 프로그램 로드 단계가 트리거 포인트입니다. CVSS 벡터 AV:L/PR:L에서 알 수 있듯, 공격자는 시스템 내 일반 사용자 권한을 이미 확보하여 BPF 프로그램을 실행할 수 있는 환경이어야 하므로 진입 장벽이 존재합니다. EPSS 수치가 0.00206으로 매우 낮고 KEV에 등재되지 않은 점은 현재 야생(In-the-wild)에서 자동화된 공격 도구가 보급되지 않았음을 시사하며, 이는 이론적 심각도보다 실전 악용 사례가 드문 hard 등급의 근거가 됩니다. 하지만 커널 메모리의 읽기 전용 영역을 오염시킬 수 있다는 점에서, 다른 권한 상승(Privilege Escalation) 취약점과 체이닝될 경우 커널 제어권을 획득하는 치명적인 경로로 활용될 가능성이 큽니다. 결과적으로 본 취약점은 단독으로 외부에서 침투하는 도구가 아니라, 내부 침입 후 권한을 극대화하려는 정교한 공격자의 Post-Exploitation 단계에서 악용될 가능성이 높은 고난도 결함입니다.

💥 영향 분석

(1) 기술적 위험: 커널 메모리의 무결성 파괴. 읽기 전용으로 보호되어야 할 BPF 맵 데이터가 변조됨으로써, 추정: 커널 함수 포인터나 권한 관련 플래그를 수정하여 최종적으로 루트 권한을 획득하는 Local Privilege Escalation(LPE) 가능성.
(2) 비즈니스 영향: 시스템 전체 제어권 상실. 다중 테넌트 환경(컨테이너 등)에서 호스트 커널 침해 시 모든 컨테이너 데이터 유출 및 서비스 중단 위험.

🔗 관련 취약점·체이닝

  • 체이닝 경로: 정보 노출 (KASLR 우회) $\rightarrow$ 본 취약점 (ReadOnly Map 쓰기) $\rightarrow$ 권한 상승 (LPE).
  • 유형 수준 분석: 추정: BPF verifier의 타입 혼동(Type Confusion) 또는 상태 추적 오류 패턴과 유사함. 읽기 전용 메모리에 대한 쓰기 권한 획득은 일반적인 커널 익스플로잇의 핵심 단계이며, 이를 통해 커널 내 다른 객체의 함수 포인터를 덮어쓰는 체이닝으로 이어질 가능성이 높음.

🔎 탐지

(1) 로그 지표: auditd 또는 syslog에서 비정상적인 bpf() 시스템 콜 호출 빈도 및 권한 없는 사용자의 BPF 프로그램 로드 시도 기록.
(2) 탐지 규칙:

  • Rule 1 (비특권 BPF 로드): event=SYSCALL AND syscall=bpf AND auid!=0 $\rightarrow$ 비루트 사용자의 BPF 호출 감시.
  • Rule 2 (패턴 탐지): BPF 바이트코드 내에서 가변 크기 레지스터를 사용하여 맵에 접근하는 패턴 분석 (추정: BPF_MAP_TYPE_ARRAY 등의 읽기 전용 설정 확인).
    (3) 오탐 및 튜닝: 모니터링 도구(e.g., Datadog, New Relic)가 BPF를 사용하는 경우 오탐 발생 가능. 화이트리스트 기반의 신뢰할 수 있는 바이너리 경로만 허용하도록 튜닝 필요.

🛡️ 완화 방안

  • 즉시 (긴급 차단): sysctl -w kernel.unprivileged_bpf_disabled=1 설정. 비특권 사용자의 BPF 접근을 즉시 차단하여 공격 경로를 제거함. (난이도: 매우 낮음 / 영향: 일부 모니터링 툴 작동 중단 가능)
  • 단기 (완화): seccomp 프로필을 통해 bpf() 시스템 콜 호출을 제한하거나, 권한 상승 방지 LSM(Linux Security Module) 정책 적용. (난이도: 중간 / 영향: 애플리케이션 호환성 검토 필요)
  • 근본 (해결): Linux 커널 버전 업데이트 (5.196.6.59 $\rightarrow$ 패치 버전, 6.76.11.6 $\rightarrow$ 패치 버전). check_mem_size_reg()의 논리 오류가 수정된 최신 안정 버전으로 업그레이드. (난이도: 중간 / 영향: 커널 재부팅 필요)

[파이프라인 근거]: 본 분석은 다중 소스 데이터 간 일관성이 확인되어 신뢰도 1.0으로 작성되었습니다. EPSS 실측값(0.00206, 백분위 0.10893)과 악용 등급 'hard'를 근거로, 이론적 심각도(CVSS 7.1)는 높으나 실제 야생에서의 악용 가능성은 현재 매우 낮다고 판단하여 우선순위를 scheduled로 결정하였습니다.

⚖️ 위험도 / 우선순위

  • 조치: scheduled (이번 주 내)
  • 근거: CVSS=7.1 · non-KEV · EPSS=0.00206 · exploit=hard · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…