← 목록으로

CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점

[CVE] CVE 분석 · 작성: 2026-07-20 03:10:34 · 수정: 2026-07-20 03:11:15 · 조회 4

2022년 공개된 리눅스 커널 취약점으로, 일반 사용자가 읽기 전용으로 마운트된 파일이나 자신에게 쓰기 권한 없는 파일의 내용을 덮어쓸 수 있게 해준 취약점이다. CVSS 7.8, 로컬 권한 상승(LPE)에 직접 쓰인다.

파이프(Pipe)와 페이지 캐시 배경지식

리눅스 파이프는 내부적으로 링 버퍼 형태의 여러 메모리 페이지로 데이터를 주고받는다. 각 페이지는 PIPE_BUF_FLAG_CAN_MERGE라는 플래그를 갖는데, 이 플래그가 있으면 다음에 그 페이지에 데이터를 이어 쓸 때 새 페이지를 할당하지 않고 기존 페이지에 그대로 이어붙인다(성능 최적화).

취약점의 핵심

splice() 시스템콜로 파일의 내용을 파이프로 복사해오면 그 파일의 페이지 캐시가 파이프 버퍼에 그대로 매핑되는데, 이때 커널이 해당 페이지에 PIPE_BUF_FLAG_CAN_MERGE 플래그를 잘못 세팅하는 버그가 있었다. 그 결과 원래는 읽기 전용이어야 할 파일의 페이지 캐시에, 파이프에 쓰는 것과 똑같은 방식으로 임의 데이터를 이어 쓸 수 있게 되어버렸다.

공격 흐름 (개념)

  1. 파이프를 만들고 모든 버퍼 페이지에 PIPE_BUF_FLAG_CAN_MERGE가 세팅되도록 임의 데이터로 채운 뒤 전부 비운다
  2. 쓰기 권한 없는 대상 파일을 splice()로 그 파이프에 이어붙인다 (플래그가 이미 세팅된 상태를 유지한다)
  3. 파이프에 원하는 데이터를 write()하면, 파이프 링 버퍼 메커니즘을 타고 대상 파일의 페이지 캐시가 덮어써진다

/etc/passwd처럼 소유자 권한이 필요한 파일이나, SUID 바이너리 자체의 내용을 조작해서 root 셸을 얻는 방식으로 실전 익스플로잇이 공개됐다.

패치와 교훈

5.8부터 도입된 파이프 버퍼 최적화 코드에서 생긴 회귀(regression) 버그였다. 커널 5.16.11, 5.15.25, 5.10.102에서 패치됐다. 새로 추가된 "성능 최적화" 코드가 기존 권한 모델(읽기전용 페이지 캐시 보호)을 깨뜨릴 수 있다는 걸 보여준 사례로, 커널 패치 노트를 단순 버그 수정으로만 보지 말고 최근 변경 이력과 함께 봐야 하는 이유이기도 하다.

CVE 분석 카테고리의 글 (6/8)

  1. CVE-2024-3400: Palo Alto PAN-OS GlobalProtect 원격 코드 실행
  2. CVE-2021-44228 (Log4Shell): 로그 한 줄로 서버를 장악당한 사건
  3. CVE-2014-0160 (Heartbleed): OpenSSL 하트비트가 새어나간 메모리
  4. CVE-2017-0144 (EternalBlue): WannaCry를 전 세계로 퍼뜨린 SMB 취약점
  5. CVE-2021-34527 (PrintNightmare): 프린터 드라이버 관리 기능이 만든 권한 상승
  6. CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점
  7. CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득
  8. CVE-2022-22965 (Spring4Shell): 클래스 로더 조작으로 이어지는 RCE
← CVE-2021-34527 (PrintNightmare): 프린터 드라이버 관리 기능이 만든 권한 상승 CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득 →