Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-38502-Linux-LPE — CVE-2025-38502 연구 저장소로, tail call을 통한 Linux 커널 BPF cgroup 로컬 스토리지의 out-of-bounds 접근으로 로컬 권한 상승이 가능한 취약점입니다. | Kitploit
도구/GitHubGitHub/abraxas/cve-2025-38502-linux-lpe
Privilege EscalationMemory ForensicsVulnerability AnalysisExploitationReverse EngineeringPapers & ResearchLearning & EducationBinary Exploitation
GitHubabraxas/cve-2025-38502-linux-lpe

CVE-2025-38502-Linux-LPE

CVE-2025-38502 연구 저장소로, tail call을 통한 Linux 커널 BPF cgroup 로컬 스토리지의 out-of-bounds 접근으로 로컬 권한 상승이 가능한 취약점입니다.

저장소 보기
9시간 35분 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

ABRAXAS LABS — CVE-2025-38502

Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null

CVE-2025-38502

Linux 커널 BPF cgroup 로컬 스토리지의 tail call을 통한 범위 초과 접근

CVECVE-2025-38502
CWECWE-125 — 범위 초과 읽기
VendorLinux kernel
Componentkernel/bpf/core.c, include/linux/bpf.h (cgroup 로컬 스토리지 + tail call)
Impact로컬 커널 메모리 손상; 패치되지 않은 커널에서는 권한 상승이 범위에 포함됨
Attack vector로컬 (AV:L)
Privileges낮음 (PR:L) — CGROUP_SKB 유형의 BPF 프로그램(또는 이에 준하는 cgroup 연결 프로그램)을 로드할 수 있는 프로세스
User interaction없음
CVSS 3.1 (kernel.org CNA)7.8 HIGH — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS 3.1 (NVD)7.1 HIGH — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
Public2025년 8월 16일
Upstream fix6.17-rc1의 abad3d0; 6.16.1, 6.12.46, 6.6.105, 6.1.151, 5.15.192로 백포트됨

연구 / 교육 목적으로만 사용하십시오. 이 저장소를 호스팅하는 주체와 대상 시스템의 소유자 모두로부터 명시적인 서면 허가를 받지 않은 한, 이 저장소의 자료를 어떤 호스트에 대해서도 실행, 배포 또는 사용하지 마십시오. 실제 환경에서 발견되었습니다.

소스 파일 이름 CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c는 식별자를 잘라서 표기합니다. 공개된 레코드는 CVE-2025-38502입니다. Linux CVE CVE-2025-3850은 존재하지 않습니다.


목차

  • 요약
  • 영향
  • 근본 원인
  • 영향받는 커널 버전
  • 배포판 상태
  • 전제 조건
  • 수정 사항
  • 실행 중인 시스템 확인
  • 완화 조치
  • 저장소 구조
  • 참고 자료
  • 연락처
  • 면책 조항

요약

Lonial은 cgroup BPF 로컬 스토리지가 tail call을 넘어 범위를 벗어나 접근될 수 있음을 보고했습니다.

eBPF 검증기는 각 프로그램을 개별적으로 타입 검사합니다. 런타임에서 bpf_get_local_storage()는 현재 실행 중인 프로그램의 맵을 조회하지 않습니다. 대신 current->bpf_ctx → bpf_cg_run_ctx → prog_item->cgroup_storage[]에서 cgroup 스토리지 포인터를 읽습니다. 이 슬롯은 tail call로 진입한 프로그램이 아니라 원래 연결된 프로그램에 의해 채워집니다.

프로그램 A(작은 BPF_MAP_TYPE_CGROUP_STORAGE 값 크기)가 프로그램 B(큰 값 크기)를 tail call하면, B의 bpf_get_local_storage()는 여전히 A의 더 작은 버퍼를 반환합니다. 검증기가 B의 맵에 대해 허용한 접근은 A의 할당 끝을 넘어서게 됩니다.

이 결함은 Linux 5.9에서 7d9c342 (bpf: Make cgroup storages shared between programs on the same cgroup)에 의해 도입되었습니다. 이는 bpf_map_owner에 storage_cookie[]를 추가하여 수정되었으며, 이로써 tail call 조합은 피호출자가 호출자와 동일한 cgroup 스토리지 맵을 사용하거나 아무것도 사용하지 않을 때만 허용됩니다.


영향

이것은 로컬 커널 힙 범위 초과 접근입니다. 심각도 점수는 이 프리미티브가 "읽기 전용 DoS"인지 완전한 메모리 손상인지에 대한 의견 차이로 인해 벤더마다 다릅니다:

실제로 이것이 의미하는 바:

  • 기밀성. 인접한 kmalloc 객체에 대한 OOB 읽기는 커널 포인터(KASLR 슬라이드), 힙 쿠키, 인접 구조체 내용을 유출할 수 있습니다.
  • 무결성. 동일한 불일치는 피호출자의 맵을 기준으로 한 크기 지정 쓰기이며, 호출자의 더 작은 버퍼에 대해 수행됩니다. 인접한 힙 객체(예: 동일한 slab/order에 스프레이된 struct bpf_array)가 손상될 수 있습니다.
  • 가용성. 잘못된 대상에 대한 쓰기는 곧바로 커널 oops / panic을 유발합니다.
  • 권한. BPF cgroup 프로그램을 로드할 수 있는 패치되지 않은 커널에서, 이 부류의 힙 OOB는 로컬 권한 상승 프리미티브로 사용되어 왔습니다(map->ops 덮어쓰기, 헬퍼 하이재킹, commit_creds / 네임스페이스 전환). 이것이 이 트리가 해당 이슈를 LPE로 표기하는 이유입니다. Red Hat의 낮은 점수는 버그의 부재가 아니라 제품별 평가를 반영합니다.

이 버그는 네트워크에 노출된 서비스를 필요로 하지 않습니다. 로컬입니다. TTY, setuid 헬퍼, 사용자 상호작용을 필요로 하지 않습니다.


근본 원인

검증기 vs 런타임

각자 고유한 BPF_MAP_TYPE_CGROUP_STORAGE(공유 플레이버, BPF_CGROUP_STORAGE_SHARED)를 가진 두 개의 cgroup BPF 프로그램:

프로그램역할스토리지 값 크기
A연결됨 / tail call 호출자작음 (예: 주어진 kmalloc order에 맞음)
Btail call 대상큼 (검증기가 이 크기까지 접근을 허용)

검증기는 A를 A의 맵에 대해, B를 B의 맵에 대해 검사합니다. 둘 다 통과합니다.

런타임에서 헬퍼는 다음을 수행합니다:

root@kitploit:~
ctx = container_of(current->bpf_ctx, struct bpf_cg_run_ctx, run_ctx);
storage = ctx->prog_item->cgroup_storage[stype];
if (stype == BPF_CGROUP_STORAGE_SHARED)
    ptr = &READ_ONCE(storage->buf)->data[0];
else
    ptr = this_cpu_ptr(storage->percpu_buf);

prog_item은 bpf_tail_call 이후 현재 실행 중인 프로그램이 아니라 cgroup 실행을 시작한 프로그램의 배열 항목입니다. 따라서 B는 A의 스토리지 객체에서 동작합니다.

크기가 중요한 이유

bpf_cgroup_storage_alloc()은 맵의 value_size로 백킹 버퍼의 크기를 결정합니다. A의 버퍼는 B의 검증된 접근에 비해 너무 작습니다. 그 결과는 전형적인 제어 전환을 넘어선 맵 정체성의 타입 혼동입니다 — 다른 BPF "헬퍼가 검증기가 본 것과 다른 맵을 보는" 문제들과 같은 계열입니다.

cgroup의 공유 스토리지

커밋 7d9c342는 cgroup 스토리지를 동일한 cgroup에 연결된 프로그램 간에 공유되도록 만들었습니다. 이 공유가 바로 런 컨텍스트 슬롯을 프로그램별 조회가 아닌 단일 포인터로 만드는 원인이며, 5.9 이전 커널이 영향을 받지 않는 이유입니다.

인접 객체

BPF_PROG_TYPE_CGROUP_SKB 프로그램에 대한 BPF_PROG_TEST_RUN은 테스트 기간 동안 cgroup 스토리지를 할당합니다. 이 할당은 동일한 크기 클래스에서 최근에 해제된 다른 것들 옆의 커널 힙에 위치합니다 — 여기에는 value_size가 동일한 kmalloc order에 맞도록 선택된 struct bpf_array 맵도 포함됩니다. 따라서 스토리지 버퍼로부터의 OOB는 인접한 배열 맵의 bpf_map 필드(ops, RCU 리스트, value[])에 도달할 수 있습니다.

이 힙 레이아웃 세부 사항이 바로 "단순한 OOB 읽기" 권고와 LPE 분석이 동일한 CVE를 설명할 수 있는 이유입니다.


영향받는 커널 버전

도입: Linux 5.9 (7d9c3427894fe70d1347b4820476bf37736d2ff0)
영향 없음: 5.9 이전의 모든 커널

한 줄 요약:

root@kitploit:~
/* CVE-2025-38502: affected 5.9–5.15.191, 5.16–6.1.150, 6.2–6.6.104, 6.7–6.12.45, 6.13–6.16.0; fixed in 5.15.192, 6.1.151, 6.6.105, 6.12.46, 6.16.1, 6.17-rc1 */

일부 stable에서 여전히 미해결: Debian의 커널 트래커는 5.10 업스트림-stable / bullseye 5.10을 needed로 표시했습니다. 모든 5.10.y가 패치되었다고 가정하지 마십시오.

배포판 ABI 번호는 거짓말을 합니다. Ubuntu 5.15.0-163은 5.15.0이 업스트림 5.15.192보다 오래되어 보이지만 패치된 5.15입니다. 위 표와 uname -r을 비교하지 말고 패키지 체인지로그 / USN / DSA / ALAS / RHSA를 비교하십시오.


배포판 상태

위 범위의 커널을 출시한 모든 배포판은 abad3d0(또는 이에 대응하는 stable 커밋)을 백포트할 때까지 범위에 있었습니다. 이것은 배포판별 패치가 아닌 일반적인 BPF 코드입니다.

패치 전까지 일반적으로 영향받음

영향 없음 (5.9보다 오래된 GA 커널)

  • Ubuntu 20.04 GA (5.4), 18.04, 16.04
  • RHEL 8 기본 (4.18)
  • Amazon Linux 1; Amazon Linux 2 core / 5.4 extra

알려진 패치된 패키지 버전 (예시)

Ubuntu 26.04 / 25.10은 영향 없음으로 표시됩니다(수정 이후 분기됨). Ubuntu 25.04는 EOL에 도달했지만 여전히 needed입니다.


전제 조건

호스트가 영향받는 버전과 일치하더라도 여전히 도달 가능하지 않을 수 있습니다. 유용한 확인 사항:

unprivileged_bpf_disabled=1은 완전한 수정이 아닙니다 — BPF 권한을 가진 사용자는 여전히 버그를 트리거할 수 있습니다 — 하지만 비특권 경로를 제거합니다.


수정 사항

업스트림 커밋 abad3d0bad72a52137e0c350c59542d75ae4f513 (bpf: Fix oob access in cgroup local storage, Daniel Borkmann).

struct bpf_map_owner에 storage_cookie[] 배열이 추가됩니다. tail call 대상 업데이트 시, 커널은 이제:

  1. 피호출자가 bpf_get_local_storage()를 사용하는 경우 — 피호출자의 cgroup 스토리지 맵이 호출자의 맵과 정확히 동일(동일한 쿠키)할 것을 요구합니다.
  2. 피호출자가 cgroup 로컬 스토리지를 사용하지 않는 경우 — tail call 조합을 허용합니다.

불일치하는 값 크기는 더 이상 검증기의 뒤에서 조합될 수 없습니다. 각 프로그램은 여전히 개별적으로 검증되며, 새로운 검사는 그들 사이의 경계에 있습니다.

주변 BPF owner/cookie 헬퍼 없이 임의의 트리에 이 커밋을 체리픽하지 마십시오. 해당 시리즈의 stable 백포트를 사용하십시오.


실행 중인 시스템 확인

root@kitploit:~
uname -r
# Compare against the table above, then against your distro advisory —
# Ubuntu/Debian ABI numbers are not upstream stable numbers.

grep -E 'CONFIG_BPF_SYSCALL|CONFIG_CGROUP_BPF' \
  /boot/config-$(uname -r) /proc/config.gz 2>/dev/null

sysctl kernel.unprivileged_bpf_disabled
# 0  = unprivileged bpf allowed (widest exposure)
# 1  = disabled after first privileged use, or fully disabled depending on kernel
# 2  = disabled (admin can re-enable)

버전 문자열만이 아니라 패키지를 확인하십시오:

root@kitploit:~
# Debian / Ubuntu
apt changelog linux-image-$(uname -r) 2>/dev/null | grep -i 38502

# RHEL family
rpm -q --changelog kernel | grep -i 38502

≥ 6.17 커널, 또는 "최초 수정" 열에 나열된 stable, 또는 권고 표의 배포판 패키지가 실제 종결입니다.


완화 조치

  1. 패치. abad3d0 / stable 등가물을 포함하는 배포판 커널을 설치하십시오. 이것이 유일한 완전한 수정입니다.
  2. 패치할 수 없을 때까지:
    • kernel.unprivileged_bpf_disabled=1(또는 2)로 설정하여 비특권 로더를 차단하십시오.
    • 신뢰할 수 없는 사용자와 컨테이너에 대해 CAP_BPF, CAP_PERFMON, CAP_SYS_ADMIN을 제한하십시오.
    • 사용자 네임스페이스 / 비특권 컨테이너에서 BPF를 비활성화하십시오(seccomp, LSM, 또는 런타임에서 해당 caps 제거).
  3. "우리는 cgroup SKB 프로그램을 직접 연결하지 않는다"를 안전으로 간주하지 마십시오. BPF_PROG_TEST_RUN만으로도 할당 경로를 실행하기에 충분하며, 로컬 공격자가 프로그램을 제공합니다.

저장소 구조

root@kitploit:~
CVE-2025-38502/
├── README.md
├── banner.png
├── CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c
└── ebpf_lpe.h
파일설명
banner.pngREADME 배너 (Abraxas Labs / CVE-2025-38502)
CVE-2025-3850-Linux-LPE-Abaraxas-Labs.c실제 환경에서 복구된 연구 소스 (파일 이름이 CVE id를 잘라서 표기)
ebpf_lpe.h해당 소스에서 사용하는 공유 BPF 명령어 생성자, 맵 헬퍼, 커널 오프셋 매크로

이 디렉터리는 취약점을 문서화하고 해당 연구 트리를 보관합니다. 이것은 즉시 사용 가능한 익스플로잇 키트가 아닙니다: 커널 가젯 심볼(ARRAY_MAP_OPS_OFF, COMMIT_CREDS, …)은 특정 vmlinux에 대한 컴파일 타임 입력이며, 실제 커널에 대해 프로그램을 실행하는 것은 이 README의 범위를 벗어납니다.


참고 자료

CVE / NVD

  • CVE-2025-38502
  • NVD
  • GitHub Advisory GHSA-x96j-4m6x-jcvx

업스트림

  • 도입: 7d9c342 — bpf: Make cgroup storages shared between programs on the same cgroup
  • 수정: abad3d0 — bpf: Fix oob access in cgroup local storage
  • linux-cve-announce

Stable 백포트

  • 6.16.1 19341d5c
  • 6.12.46 41688d1f
  • 6.6.105 7acfa07c
  • 6.1.151 66da7cee
  • 5.15.192 c1c74584

배포판

  • Ubuntu CVE 페이지
  • Debian 보안 트래커
  • Debian kernel-sec
  • Red Hat
  • Amazon Linux ALAS
  • SUSE

연락처

Abraxas Labs — 연구 / 승인된 테스트 전용

Websitehttps://abraxaslabs.tech
GitHubhttps://github.com/abraxas
X@abraxas_null

면책 조항

이 저장소는 연구와 교육을 위한 것입니다.

이 저장소를 호스팅하는 주체와 대상의 소유자 모두로부터 명시적인 서면 승인을 받지 않은 한, 여기의 코드를 어떤 시스템에 대해서도 컴파일, 실행, 배포 또는 사용하지 마십시오. 컴퓨터 시스템에 대한 무단 접근은 범죄입니다.

저자와 Abraxas Labs는 이 자료를 있는 그대로 제공하며, 완전하거나 정확하거나 실행하기에 안전하다는 어떠한 보증도 하지 않습니다. 커널 익스플로잇 연구는 머신을 패닉시키고, 파일 시스템을 손상시키며, 데이터를 손실할 수 있습니다. 그 위험은 귀하가 부담합니다.

실제 환경에서 발견되었습니다.

도구 다운로드
출처점수무결성비고
kernel.org CNA / cve.org7.8 HIGH높음C:H/I:H/A:H — 버그를 완전한 로컬 영향으로 취급
NVD7.1 HIGH없음C:H/I:N/A:H — 기밀성 + 가용성
UbuntuMedium (7.1)—USN-7909
Red Hat4.0 LOW없음C:N/I:N/A:L — 제한적 가용성으로 평가
Amazon Linux4.0 Medium없음Red Hat과 동일한 벡터
SUSE6.1 Moderate없음일부 SLE 15 스트림은 WONTFIX로 표시됨
시리즈영향받음최초 수정
5.9 – 5.155.9부터 5.15.191까지5.15.192 (c1c74584…)
5.16 – 6.15.16부터 6.1.150까지6.1.151 (66da7cee…)
6.2 – 6.66.2부터 6.6.104까지6.6.105 (7acfa07c…)
6.7 – 6.126.7부터 6.12.45까지6.12.46 (41688d1f…)
6.13 – 6.166.13부터 6.16.0까지6.16.1 (19341d5c…)
mainline수정이 반영될 때까지6.17-rc1 (abad3d0b…)
배포판범위에 있었던 릴리스 / 커널
Ubuntu22.04 LTS (5.15), 24.04 LTS (6.8), 25.04 (EOL이지만 여전히 needed). 20.04 HWE 5.15.
Debian11 bullseye (5.10), 12 bookworm (6.1), 13 trixie (6.12)
RHEL 9 / 10, Rocky, Alma, FedoraRHEL 9 ≈ 5.14; RHEL 10 ≈ 6.12; Fedora 롤링 5.9–6.16
SUSE / openSUSESLE Micro 5.3/5.4; 일부 SLE 15 스트림 WONTFIX
Amazon Linux 2023기본 커널 및 kernel6.12
Amazon Linux 2 extras5.10 extra (수정 계획 없음) 및 5.15 extra
Arch, Gentoo, Tumbleweed5.9와 6.16.1 / 6.17-rc1 수정 사이의 롤링 커널
배포판수정된 패키지 (참고용)권고
Ubuntu 22.04linux 5.15.0-163.173USN-7909
Ubuntu 24.04linux 6.8.0-106.106동일
Debian 12linux 6.1.153-1DSA-6009-1
Debian 13linux 6.12.48-1DSA-6008-1
Debian 11 (6.1 백포트)linux-6.1 6.1.153-1~deb11u1DLA-4328-1
Amazon Linux 2023kernel / kernel6.12, 2025-09-29ALAS2023-2025-1210 / 1208
Amazon Linux 2 5.15 extra2025-09-29ALAS2KERNEL-5.15-2025-091
조건중요한 이유
CONFIG_BPF_SYSCALL=ybpf(2)가 존재해야 함
CONFIG_CGROUP_BPF=ycgroup 연결 프로그램 및 cgroup 로컬 스토리지
kernel.unprivileged_bpf_disabled0은 비특권 프로그램 로드를 허용; 1/2는 CAP_BPF / CAP_PERFMON / CAP_SYS_ADMIN 필요
Lockdown / LSM / seccompBPF_PROG_LOAD 또는 BPF_PROG_TEST_RUN을 차단할 수 있음
BPF_PROG_TYPE_CGROUP_SKB (또는 로컬 스토리지를 가지는 다른 cgroup 프로그램 유형)cgroup_storage[]를 보유하는 런 컨텍스트