🇰🇷 한글 설명
Linux 커널의 tracing 서브시스템에서 trigger_data_alloc() 함수가 실패하여 NULL을 반환할 때, trigger_data_free() 함수에 NULL 포인터 체크가 없어 NULL pointer dereference 발생. trigger_data 구조체의 cmd_ops->set_filter 평가 시 시스템 충돌 유발.
💡 쉬운 설명
Linux 커널이 메모리 할당 실패 시 존재하지 않는 메모리에 접근하려는 버그로, 이를 통해 시스템을 중지시킬 수 있습니다. 로컬 공격자만 이를 악용할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing: Add NULL pointer check to trigger_data_free()
If trigger_data_alloc() fails and returns NULL, event_hist_trigger_parse()
jumps to the out_free error path. While kfree() safely handles a NULL
pointer, trigger_data_free() does not. This causes a NULL pointer
dereference in trigger_data_free() when evaluating
data->cmd_ops->set_filter.
Fix the problem by adding a NULL pointer check to trigger_data_free().
The problem was found by an experimental code review agent based on
gemini-3.1-pro while reviewing backports into v6.18.y.
📍 영향받는 시스템
Linux 커널 v6.18.y 이전 버전, tracing 기능이 활성화된 모든 시스템
⚔️ 공격 벡터
로컬 사용자가 tracing trigger 설정 명령을 통해 trigger_data_alloc() 실패를 의도적으로 유발하여 NULL pointer dereference 트리거
🛡️ 대응 방법
Linux 커널을 v6.18.y 이상으로 업그레이드하거나 trigger_data_free() 함수에 NULL 포인터 체크 패치 적용
🔧 검증 코드
현재 커널 버전이 6.18 이상이면 'Patched', 미만이면 'Vulnerable' 출력. 커널 소스의 kernel/trace/trace_events_trigger.c 파일에서 trigger_data_free() 함수에 NULL 체크 추가 확인.
uname -r | awk -F. '{print ($1>6 || ($1==6 && $2>=18)) ? "Patched" : "Vulnerable"}'