🇰🇷 한글 설명
리눅스 커널의 초기 부팅 과정에서 스택 보호 기능(stack protector) 설정 불일치로 인해 시스템 패닉이 발생할 수 있는 취약점입니다. GCC 11 이상에서 지원하는 __no_stack_protector 속성을 사용하여 boot_init_stack_canary 호출 시 스택 카나리 값이 충돌하는 문제를 해결했습니다.
💡 쉬운 설명
컴퓨터가 처음 켜질 때 보안을 위해 사용하는 '방어막' 설정이 서로 맞지 않아 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 최신 컴파일러 기능을 사용하여 이 방어막 설정이 어긋나지 않도록 수정되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
start_kernel: Add __no_stack_protector function attribute
Back during the discussion of
commit a9a3ed1eff36 ("x86: Fix early boot crash on gcc-10, third try")
we discussed the need for a function attribute to control the omission
of stack protectors on a per-function basis; at the time Clang had
support for no_stack_protector but GCC did not. This was fixed in
gcc-11. Now that the function attribute is available, let's start using
it.
Callers of boot_init_stack_canary need to use this function attribute
unless they're compiled with -fno-stack-protector, otherwise the canary
stored in the stack slot of the caller will differ upon the call to
boot_init_stack_canary. This will lead to a call to __stack_chk_fail()
then panic.
📍 영향받는 시스템
GCC 11 미만 버전을 사용하여 컴파일된 특정 리눅스 커널 버전
⚔️ 공격 벡터
직접적인 원격 공격보다는 특정 컴파일 환경에서 빌드된 커널을 사용하는 시스템의 부팅 시 시스템 패닉 유발
🛡️ 대응 방법
해당 패치가 적용된 최신 리눅스 커널로 업데이트하거나 GCC 11 이상의 환경에서 재빌드된 커널 사용
🔧 검증 코드
출력된 커널 버전과 GCC 버전이 보안 패치가 적용된 최신 버전인지 확인합니다.
uname -r && gcc --version