
검증되지 않은 Linux 커널 권한 상승 PoC로, msg_msgseg 교차 캐시 재사용을 통해 skb와 pipe_buffer를 겹치게 하여 pipe 플래그를 변경해 /etc/passwd를 읽습니다.
실험 연구 전용이며, prefetch 및 nperm의 코드(설정이 필요한 메모리 참조 set.gdb)는 첨부되지 않았고, 최적화를 수행하지 않아 히트 확률이 낮습니다.
저자는 이 취약점의 작성자가 해당 취약점 관련 정보를 이미 공개했음을 확인했습니다: https://github.com/google/security-research/pull/414
이용 방식은 전혀 다릅니다. 해당 이용 방식을 완전히 검증하지 못했기 때문에 보수적인 입장을 유지합니다(주로 sock 스핀락이 실제로 레이스 상태를 유발할 수 있는지 저자가 직접 테스트하지 않았으며, 코드의 단편적인 이해에 따르면 timerfd 하드 인터럽트를 통해 레이스 상태를 유발할 수 있습니다).
선행 분석: https://xz.aliyun.com/news/92649
이용 방식: msg_msgseg는 cross_cache를 통해 tipc_sock을 재사용하고, 일부 필드를 위조하여 모든 check를 통과시킨 뒤 최종적으로 해제합니다. 그런 다음 skb와 pipe_buffer의 overlap을 구성하고 pipe_buffer의 flags를 변조합니다(splice로 읽기 전용 파일 /etc/passwd를 읽은 후 flags를 변조하는 dirtypipe 확장 이용 방식). 커널 힙 주소를 유출하지 않았기 때문에 위조된 sk->lock.wq는 자기 자신을 가리킬 수 없습니다. check를 통과하기 위해 curr->func(소스 코드는 __wake_up_common 호출 체인 참조)를 ret으로 위조하므로, dataonly 구현은 그다지 완전하지 않습니다.