🇰🇷 한글 설명
Linux 커널 parisc 아키텍처에서 __get_user() 함수가 읽기 접근 권한을 제대로 검증하지 않아, 사용자 코드가 읽기 보호된 메모리 영역에 접근할 수 있는 취약점입니다. 커널이 권한 레벨 0에서 실행되므로 권한 레벨 3(PRIV_USER)에서의 접근 제어가 우회됩니다.
💡 쉬운 설명
Linux 커널의 특정 프로세서 아키텍처(parisc)에서 보안 검사가 제대로 되지 않아 일반 사용자가 금지된 메모리에 접근할 수 있습니다. 시스템 호출을 통해 보호된 영역을 읽을 수 있게 됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
parisc: Revise __get_user() to probe user read access
Because of the way read access support is implemented, read access
interruptions are only triggered at privilege levels 2 and 3. The
kernel executes at privilege level 0, so __get_user() never triggers
a read access interruption (code 26). Thus, it is currently possible
for user code to access a read protected address via a system call.
Fix this by probing read access rights at privilege level 3 (PRIV_USER)
and setting __gu_err to -EFAULT (-14) if access isn't allowed.
Note the cmpiclr instruction does a 32-bit compare because COND macro
doesn't work inside asm.
📍 영향받는 시스템
parisc 아키텍처 기반 Linux 커널 (패치 이전의 모든 버전)
⚔️ 공격 벡터
시스템 콜(__get_user())을 통해 읽기 보호된 메모리 주소에 접근
🛡️ 대응 방법
Linux 커널 parisc 아키텍처용 패치 적용 (읽기 접근 권한 검증 기능 추가)
🔧 검증 코드
parisc 아키텍처면 해당 커널 버전의 패치 적용 상태를 확인해야 하며, 다른 아키텍처면 이 취약점의 영향을 받지 않습니다.
uname -m | grep -q parisc && echo 'vulnerable architecture' || echo 'not parisc'