🇰🇷 한글 설명
Linux 커널의 tracing_err_log_open() 함수에서 파일을 쓰기 권한으로만 열 경우 seq_open이 호출되지 않아 file->private_data가 NULL로 남는 문제가 수정되었습니다. 이후 lseek 호출 시 NULL 포인터 역참조로 커널 패닉이 발생할 수 있었습니다. 해당 노드 쓰기는 root 권한이 필요하므로 보안 영향은 제한적입니다.
💡 쉬운 설명
리눅스 커널의 오류 로그 기능에서 특정 방식으로 파일을 열면 시스템이 갑자기 멈출 수 있는 버그가 있었습니다. 이 기능은 관리자(root) 권한이 있어야 사용할 수 있어 외부 공격 위험은 낮습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing: Fix null pointer dereference in tracing_err_log_open()
Fix an issue in function 'tracing_err_log_open'.
The function doesn't call 'seq_open' if the file is opened only with
write permissions, which results in 'file->private_data' being left as null.
If we then use 'lseek' on that opened file, 'seq_lseek' dereferences
'file->private_data' in 'mutex_lock(&m->lock)', resulting in a kernel panic.
Writing to this node requires root privileges, therefore this bug
has very little security impact.
Tracefs node: /sys/kernel/tracing/error_log
Example Kernel panic:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000038
Call trace:
mutex_lock+0x30/0x110
seq_lseek+0x34/0xb8
__arm64_sys_lseek+0x6c/0xb8
invoke_syscall+0x58/0x13c
el0_svc_common+0xc4/0x10c
do_el0_svc+0x24/0x98
el0_svc+0x24/0x88
el0t_64_sync_handler+0x84/0xe4
el0t_64_sync+0x1b4/0x1b8
Code: d503201f aa0803e0 aa1f03e1 aa0103e9 (c8e97d02)
---[ end trace 561d1b49c12cf8a5 ]---
Kernel panic - not syncing: Oops: Fatal exception
📍 영향받는 시스템
패치 이전의 Linux 커널 (tracing 기능 포함 버전, 구체적 범위는 커널 배포판 및 버전별 확인 필요)
⚔️ 공격 벡터
root 권한을 가진 사용자가 /sys/kernel/tracing/error_log를 쓰기 전용으로 열고 lseek를 호출하면 커널 패닉 유발 가능 (권한 상승 공격이 아닌 서비스 중단 수준)
🛡️ 대응 방법
배포판 제공 최신 커널 업데이트를 설치하고 재부팅하여 패치된 커널로 전환
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 권고문과 대조해 패치 포함 여부를 확인하고, error_log 노드가 없으면 해당 기능이 노출되지 않은 상태입니다.
uname -r && (ls /sys/kernel/tracing/error_log 2>/dev/null && echo 'tracefs error_log 존재' || echo 'tracefs error_log 없음')