[CVE] CVE 분석 · 작성: 2026-07-20 03:10:34 · 수정: 2026-07-20 03:11:15 · 조회 4
2022년 공개된 리눅스 커널 취약점으로, 일반 사용자가 읽기 전용으로 마운트된 파일이나 자신에게 쓰기 권한 없는 파일의 내용을 덮어쓸 수 있게 해준 취약점이다. CVSS 7.8, 로컬 권한 상승(LPE)에 직접 쓰인다.
리눅스 파이프는 내부적으로 링 버퍼 형태의 여러 메모리 페이지로 데이터를 주고받는다. 각 페이지는 PIPE_BUF_FLAG_CAN_MERGE라는 플래그를 갖는데, 이 플래그가 있으면 다음에 그 페이지에 데이터를 이어 쓸 때 새 페이지를 할당하지 않고 기존 페이지에 그대로 이어붙인다(성능 최적화).
splice() 시스템콜로 파일의 내용을 파이프로 복사해오면 그 파일의 페이지 캐시가 파이프 버퍼에 그대로 매핑되는데, 이때 커널이 해당 페이지에 PIPE_BUF_FLAG_CAN_MERGE 플래그를 잘못 세팅하는 버그가 있었다. 그 결과 원래는 읽기 전용이어야 할 파일의 페이지 캐시에, 파이프에 쓰는 것과 똑같은 방식으로 임의 데이터를 이어 쓸 수 있게 되어버렸다.
PIPE_BUF_FLAG_CAN_MERGE가 세팅되도록 임의 데이터로 채운 뒤 전부 비운다splice()로 그 파이프에 이어붙인다 (플래그가 이미 세팅된 상태를 유지한다)write()하면, 파이프 링 버퍼 메커니즘을 타고 대상 파일의 페이지 캐시가 덮어써진다/etc/passwd처럼 소유자 권한이 필요한 파일이나, SUID 바이너리 자체의 내용을 조작해서 root 셸을 얻는 방식으로 실전 익스플로잇이 공개됐다.
5.8부터 도입된 파이프 버퍼 최적화 코드에서 생긴 회귀(regression) 버그였다. 커널 5.16.11, 5.15.25, 5.10.102에서 패치됐다. 새로 추가된 "성능 최적화" 코드가 기존 권한 모델(읽기전용 페이지 캐시 보호)을 깨뜨릴 수 있다는 걸 보여준 사례로, 커널 패치 노트를 단순 버그 수정으로만 보지 말고 최근 변경 이력과 함께 봐야 하는 이유이기도 하다.