🇰🇷 한글 설명
Linux 커널의 RISC-V ptrace 구현에서 PTRACE_SETREGSET 요청 시 iov_len이 짧으면 레지스터셋 버퍼의 나머지 부분이 초기화되지 않은 채 남는 문제가 수정되었습니다. 이로 인해 스택의 쓰레기 값이 벡터 상태나 shadow stack 포인터로 복사될 수 있었습니다. 수정은 복사 전에 버퍼를 0으로 초기화하는 방식입니다.
💡 쉬운 설명
프로세스의 레지스터 값을 설정할 때 일부 메모리가 비어 있지 않아 이전 데이터가 섞일 수 있었습니다. 이 문제는 버퍼를 미리 0으로 채우도록 고쳐졌습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
riscv: ptrace: Zero-initialize regset buffers before copyin
user_regset_copyin() only copies `count` bytes, so a PTRACE_SETREGSET
request with a short iov_len leaves the rest of the stack buffer
uninitialized. In riscv_vr_set() that garbage is validated and copied
into the target's vstate, and in riscv_cfi_set() it can be stored as
the target's shadow stack pointer. Zero both buffers, as the get path
already does.
📍 영향받는 시스템
패치 이전의 RISC-V 아키텍처용 Linux 커널 (정확한 버전 범위는 커널 변경 이력 확인 필요)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 ptrace로 대상 프로세스의 레지스터셋을 짧은 길이로 설정해 초기화되지 않은 스택 데이터를 유도하는 방식
🛡️ 대응 방법
배포판 제공 최신 커널로 업데이트하거나 해당 upstream 수정 커밋이 포함된 커널로 재빌드하여 재부팅
🔧 검증 코드
출력된 커널 버전이 배포판의 수정된 패키지 버전 이상인지와 아키텍처가 riscv64인지 확인하며, 해당하지 않으면 영향 대상이 아닐 가능성이 높습니다