🇰🇷 한글 설명
Linux 커널의 ARM 아키텍처에서 처리되지 않은 사용자 결함(unhandled user faults)이 발생할 때 인터럽트가 비활성화된 상태로 유지되는 취약점입니다. PREEMPT_RT 환경에서 신호를 보낼 때 인터럽트가 활성화되어 있어야 함에도 불구하고, 특정 조건에서 인터럽트가 차단되어 시스템 안정성에 문제를 일으킬 수 있습니다.
💡 쉬운 설명
컴퓨터의 핵심 운영체제인 리눅스에서 특정 상황이 발생했을 때 시스템의 긴급 신호(인터럽트)를 처리하지 못하게 막는 버그가 발견되었습니다. 이로 인해 시스템이 응답하지 않거나 멈추는 현상이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ARM: 9484/1: enable interrupts when unhandled user faults are triggered
PREEMPT_RT requires interrupts to be enabled when sending signals.
When do_DataAbort()/do_PrefetchAbort() triggers unhandled user faults,
that is `inf->fn()` return a non-zero value, and the interrupts are not
enabled within the hook function, force_sig_fault() will be called
with interrupts disabled.
This can be triggered by user programs executing the bkpt instruction,
with kernel config CONFIG_PERF_EVENTS=n.
Enable interrupts in do_DataAbort()/do_PrefetchAbort() when unhandled
user faults are triggered to fix the issue.
📍 영향받는 시스템
ARM 아키텍처 기반 Linux 커널 (CONFIG_PERF_EVENTS=n 설정 및 PREEMPT_RT 사용 시)
⚔️ 공격 벡터
사용자 프로그램이 bkpt 명령어를 실행하여 의도적으로 처리되지 않는 사용자 결함을 유도함으로써 발생 가능
🛡️ 대응 방법
커널 패치를 적용하여 do_DataAbort() 및 do_PrefetchAbort() 함수 내에서 사용자 결함 발생 시 인터럽트가 활성화되도록 업데이트
🔧 검증 코드
출력 결과에서 PREEMPT_RT가 활성화되어 있고 CONFIG_PERF_EVENTS가 n으로 설정되어 있다면 해당 취약점에 노출될 가능성이 있습니다.
uname -a && grep -E 'CONFIG_PREEMPT_RT|CONFIG_PERF_EVENTS' /boot/config-$(uname -r) 2>/dev/null