🇰🇷 한글 설명
리눅스 커널의 tracing/probes 구성 요소에서 MAX_TRACE_ARGS 제한 처리 오류로 인해 발생하는 취약점입니다. 128개 이상의 인자를 가진 trace_probe를 생성할 때 잘못된 메모리 접근이 발생하여 커널 NULL 포인터 역참조 및 시스템 오류를 유발할 수 있습니다.
💡 쉬운 설명
리눅스 시스템의 기록 기능을 사용할 때 너무 많은 정보를 한꺼번에 요청하면 컴퓨터의 핵심 부분인 커널이 길을 잃고 멈춰버릴 수 있는 문제입니다. 이는 시스템을 강제로 종료시키거나 오류를 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing/probes: Fix MAX_TRACE_ARGS limit handling
When creating a trace_probe we would set nr_args prior to truncating the
arguments to MAX_TRACE_ARGS. However, we would only initialize arguments
up to the limit.
This caused invalid memory access when attempting to set up probes with
more than 128 fetchargs.
BUG: kernel NULL pointer dereference, address: 0000000000000020
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
PGD 0 P4D 0
Oops: Oops: 0000 [#1] PREEMPT SMP PTI
CPU: 0 UID: 0 PID: 1769 Comm: cat Not tainted 6.11.0-rc7+ #8
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-1.fc39 04/01/2014
RIP: 0010:__set_print_fmt+0x134/0x330
Resolve the issue by applying the MAX_TRACE_ARGS limit earlier. Return
an error when there are too many arguments instead of silently
truncating.
📍 영향받는 시스템
Linux kernel (tracing/probes 관련 기능이 활성화된 버전)
⚔️ 공격 벡터
로컬 사용자가 과도한 인자를 포함한 trace_probe를 생성하여 커널 메모리 오류 유도
🛡️ 대응 방법
MAX_TRACE_ARGS 제한을 조기에 적용하고, 인자가 초과될 경우 오류를 반환하도록 커널 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전인지 배포판 보안 공지를 통해 확인