🇰🇷 한글 설명
Linux 커널의 트레이싱 히스토그램 모듈에서 합성(synthetic) 이벤트 필드 검증이 누락된 문제입니다. 스택트레이스가 아닌 8바이트 부호 있는 스칼라 히스토그램 필드가 검증을 통과하여 커널 스택 포인터로 역참조될 수 있습니다. 이를 수정하기 위해 스택트레이스 플래그를 변수 참조와 필드 변수까지 전파하고, 플래그와 필드 속성이 일치하지 않으면 거부하도록 합니다.
💡 쉬운 설명
리눅스 커널의 성능 추적 기능에서 숫자 값을 메모리 주소로 잘못 해석하는 결함이 있습니다. 공격자가 이를 악용하면 커널 메모리를 잘못 읽어 시스템 권한을 얻거나 시스템이 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields
In check_synth_field(), when a synthetic event field is a stacktrace
(field->is_stack) and the histogram field is not a "long[" stacktrace
array, validation falls through to the generic size and signedness
comparison.
Because parse_synth_field() sets a stacktrace field's type to
"__data_loc unsigned long[]", its size is sizeof(u64) and
synth_field_signed() marks it as signed. Consequently, any 8-byte
signed scalar histogram field passes the fallback check, and its scalar
value is subsequently dereferenced as a kernel stacktrace pointer in
get_field_size() and trace_stack().
Furthermore, checking strstr(hist_field->type, "long[") is insufficient
because tracepoint fields defined with __bitmask() or __rel_bitmask()
also have type "__data_loc unsigned long[]" or "__rel_loc unsigned
long[]", whilst create_hist_field() treats them as 4-byte scalar values
without HIST_FIELD_FL_STACKTRACE.
Propagate HIST_FIELD_FL_STACKTRACE to variable references and field
variables (whilst excluding variable aliases from per-element
stacktrace capture), and reject any mismatch between
HIST_FIELD_FL_STACKTRACE and field->is_stack in check_synth_field().
📍 영향받는 시스템
패치되지 않은 Linux 커널 (트레이싱 히스토그램 기능을 사용하는 버전, 정확한 영향 버전은 커널 패치 로그 확인 필요)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 트레이싱 히스토그램의 합성 이벤트 필드를 조작하여 스칼라 값을 커널 스택 주소로 역참조하게 만듦
🛡️ 대응 방법
커널을 해당 CVE가 수정된 최신 안정 버전으로 업데이트하고 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 커널 패치 목록과 비교하여 CVE-2026-99163 수정 버전 이상인지 확인합니다. 수정 버전 이전이면 취약할 수 있습니다.