🇰🇷 한글 설명
Linux 커널의 x86 FPU 처리 과정에서 XRSTOR 명령이 실패하더라도 레지스터 상태가 변경될 수 있는 취약점입니다. 이로 인해 이전 작업의 FPU 상태가 다음 실행되는 프로세스의 레지스터에 남게 되어 데이터가 유출될 수 있습니다.
💡 쉬운 설명
컴퓨터가 계산을 위해 사용하는 임시 저장 공간(FPU)을 정리하는 과정에서 오류가 발생할 때, 이전 사용자의 데이터가 지워지지 않고 남을 수 있는 문제입니다. 이로 인해 다른 프로그램이 이전 사용자의 민감한 정보를 엿볼 수 있는 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
x86/fpu: Invalidate FPU state after a failed XRSTOR from a user buffer
Both Intel and AMD consider it to be architecturally valid for XRSTOR to
fail with #PF but nonetheless change the register state. The actual
conditions under which this might occur are unclear [1], but it seems
plausible that this might be triggered if one sibling thread unmaps a page
and invalidates the shared TLB while another sibling thread is executing
XRSTOR on the page in question.
__fpu__restore_sig() can execute XRSTOR while the hardware registers
are preserved on behalf of a different victim task (using the
fpu_fpregs_owner_ctx mechanism), and, in theory, XRSTOR could fail but
modify the registers.
If this happens, then there is a window in which __fpu__restore_sig()
could schedule out and the victim task could schedule back in without
reloading its own FPU registers. This would result in part of the FPU
state that __fpu__restore_sig() was attempting to load leaking into the
victim task's user-visible state.
Invalidate preserved FPU registers on XRSTOR failure to prevent this
situation from corrupting any state.
[1] Frequent readers of the errata lists might imagine "complex
microarchitectural conditions".
📍 영향받는 시스템
Linux kernel (x86 architecture)
⚔️ 공격 벡터
멀티스레드 환경에서 특정 메모리 매핑 조건(TLB 무효화 등)을 이용해 XRSTOR 실패를 유도하여 레지스터 상태를 오염시킴
🛡️ 대응 방법
XRSTOR 실패 시 FPU 레지스터를 강제로 무효화하도록 커널을 최신 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 이후의 버전인지 확인