🇰🇷 한글 설명
Linux 커널의 tracing 하위 시스템에서 create_field_var_hist()가 변수 참조용 히스토그램을 생성할 때, 이미 존재하는 호환 히스토그램의 포인터를 저장하여 사용자가 해당 히스토그램을 제거하면 해제된 메모리를 참조하는 use-after-free 취약점이 발생합니다. 수정된 코드는 히스토그램 대신 이벤트 파일을 저장하도록 변경되었습니다.
💡 쉬운 설명
리눅스 커널의 추적(tracing) 기능에서 이미 삭제된 메모리를 다시 읽는 오류가 있습니다. 이로 인해 시스템이 불안정해지거나 공격자가 이를 악용할 가능성이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing: Save the event file instead of the compatible histogram
create_field_var_hist() creates a histogram on the matched event to
supply a field variable, and records it on the target so it can be torn
down later:
hist_data = find_compatible_hist(target_hist_data, file);
...
/* Save the compatible histogram information */
var_hist->hist_data = hist_data;
hist_data is not the histogram it creates. It is one that was already
there, whose keys the new one copies. The saved pointer has a single
user, unregister_field_var_hists(), which runs when the target is
removed:
file = hist_data->field_var_hists[i]->hist_data->event_file;
find_compatible_hist() matches on keys alone, so it can pick one with no
variables of its own. check_var_refs() then returns false and the user
can remove it while the target still points at it:
BUG: KASAN: slab-use-after-free in event_hist_trigger_free+0x2b2/0x320
Read of size 8 at addr ffff8880093b90e0 by task init/1
Freed by task 1:
kfree+0x154/0x420
event_hist_trigger_free+0x1d5/0x320
event_hist_trigger_parse+0x35f3/0x69e0
trigger_process_regex+0x1a6/0x250
Save the event file instead. It is all the dereference ever wanted, and
it does not go away when the user removes a trigger.
📍 영향받는 시스템
패치 이전의 Linux 커널 (tracing/histogram 기능이 활성화된 버전)
⚔️ 공격 벡터
로컬 사용자가 tracing 트리거를 생성·제거하여 해제된 메모리를 참조하게 만들어 커널 메모리 손상 또는 권한 상승을 시도
🛡️ 대응 방법
배포판 제공 최신 커널 업데이트를 적용하고 재부팅
🔧 검증 코드
출력된 커널 버전이 배포판에서 제공하는 보안 패치 적용 버전 이상인지 확인 (패치 버전은 배포판 보안 공지에서 확인)