🇰🇷 한글 설명
Linux 커널의 tracing 기능에서 set_ftrace_filter를 통해 입력되는 문자열의 길이가 FTRACE_BUFF_MAX를 초과할 경우, trace_get_user 함수가 실패하더라도 parser->buffer의 끝을 0으로 설정하지 않아 발생합니다. 이로 인해 ftrace_regex_release 과정에서 slab-out-of-bounds(OOB) 메모리 접근 오류가 발생하여 시스템 불안정이나 KASAN 알람을 유발할 수 있습니다.
💡 쉬운 설명
리눅스 시스템의 추적 기능에 너무 긴 문자열을 입력하면, 컴퓨터가 메모리의 허용된 범위를 벗어나 잘못된 곳을 읽으려고 시도하는 오류입니다. 이로 인해 시스템이 멈추거나 오류 메시지가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing: Limit access to parser->buffer when trace_get_user failed
When the length of the string written to set_ftrace_filter exceeds
FTRACE_BUFF_MAX, the following KASAN alarm will be triggered:
BUG: KASAN: slab-out-of-bounds in strsep+0x18c/0x1b0
Read of size 1 at addr ffff0000d00bd5ba by task ash/165
CPU: 1 UID: 0 PID: 165 Comm: ash Not tainted 6.16.0-g6bcdbd62bd56-dirty
Hardware name: linux,dummy-virt (DT)
Call trace:
show_stack+0x34/0x50 (C)
dump_stack_lvl+0xa0/0x158
print_address_description.constprop.0+0x88/0x398
print_report+0xb0/0x280
kasan_report+0xa4/0xf0
__asan_report_load1_noabort+0x20/0x30
strsep+0x18c/0x1b0
ftrace_process_regex.isra.0+0x100/0x2d8
ftrace_regex_release+0x484/0x618
__fput+0x364/0xa58
____fput+0x28/0x40
task_work_run+0x154/0x278
do_notify_resume+0x1f0/0x220
el0_svc+0xec/0xf0
el0t_64_sync_handler+0xa0/0xe8
el0t_64_sync+0x1ac/0x1b0
The reason is that trace_get_user will fail when processing a string
longer than FTRACE_BUFF_MAX, but not set the end of parser->buffer to 0.
Then an OOB access will be triggered in ftrace_regex_release->
ftrace_process_regex->strsep->strpbrk. We can solve this problem by
limiting access to parser->buffer when trace_get_user failed.
📍 영향받는 시스템
Linux kernel (FTRACE 기능이 활성화된 버전)
⚔️ 공격 벡터
로컬 사용자가 매우 긴 문자열을 set_ftrace_filter를 통해 전달하여 메모리 경계 초과 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 trace_get_user 실패 시 버퍼 접근을 제한해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.