🇰🇷 한글 설명
리눅스 커널의 BPF 서브시스템에서 pid=1(init/systemd) 프로세스가 bpf_send_signal_common() 함수를 통해 자기 자신에게 종료 시그널을 보낼 수 있는 문제가 있었습니다. 이로 인해 커널 패닉(Attempted to kill init!)이 발생할 수 있어, pid=1 태스크를 건너뛰도록 수정되었습니다.
💡 쉬운 설명
리눅스 시스템의 가장 핵심 프로세스(init)가 특정 eBPF 프로그램에 의해 스스로 종료 신호를 받으면 시스템 전체가 멈출 수 있는 문제입니다. 해당 보안 패치가 적용되어 이 동작이 차단되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
bpf: Skip task with pid=1 in send_signal_common()
The following kernel panic can be triggered when a task with pid=1 attaches
a prog that attempts to send killing signal to itself, also see [1] for more
details:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
CPU: 3 PID: 1 Comm: systemd Not tainted 6.1.0-09652-g59fe41b5255f #148
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x100/0x178 lib/dump_stack.c:106
panic+0x2c4/0x60f kernel/panic.c:275
do_exit.cold+0x63/0xe4 kernel/exit.c:789
do_group_exit+0xd4/0x2a0 kernel/exit.c:950
get_signal+0x2460/0x2600 kernel/signal.c:2858
arch_do_signal_or_restart+0x78/0x5d0 arch/x86/kernel/signal.c:306
exit_to_user_mode_loop kernel/entry/common.c:168 [inline]
exit_to_user_mode_prepare+0x15f/0x250 kernel/entry/common.c:203
__syscall_exit_to_user_mode_work kernel/entry/common.c:285 [inline]
syscall_exit_to_user_mode+0x1d/0x50 kernel/entry/common.c:296
do_syscall_64+0x44/0xb0 arch/x86/entry/common.c:86
entry_SYSCALL_64_after_hwframe+0x63/0xcd
So skip task with pid=1 in bpf_send_signal_common() to avoid the panic.
[1] https://lore.kernel.org/bpf/
[email protected]
📍 영향받는 시스템
패치 이전의 Linux 커널 (BPF 신호 전송 기능이 포함된 버전, 6.1 계열 등)
⚔️ 공격 벡터
권한이 있는 로컬 사용자가 pid=1 프로세스에서 실행되는 BPF 프로그램으로 자기 자신에게 종료 시그널을 보내 커널 패닉을 유발
🛡️ 대응 방법
배포판에서 제공하는 최신 커널 패키지로 업데이트 후 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 공지에서 CVE-2023-52992 수정이 포함된 패치 버전과 비교하여, 같거나 이후 버전이면 패치된 것입니다.