Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
DirtyPipe-Exploit — CVE-2022-0847에 대한 개념 증명 | Kitploit
도구/GitHubGitHub/karanlvm/dirtypipe-exploit
Privilege EscalationVulnerability AnalysisExploitationPapers & ResearchLearning & EducationBinary Exploitation
GitHubkaranlvm/dirtypipe-exploit

DirtyPipe-Exploit

CVE-2022-0847에 대한 개념 증명

저장소 보기
2110개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CSE 5380: 정보 보안 논문 CVE-2022-0847 (Dirty Pipe)

제출자

Karan Vasudevamurthy (UTA ID: 1002164438)

CVE란 무엇인가?

CVE(Common Vulnerabilities and Exposures)는 공개된 정보 보안 취약점 및 노출 목록입니다. MITRE Corporation은 1999년에 소프트웨어 및 펌웨어의 취약점을 식별하고 분류하기 위해 CVE를 도입했습니다. MITRE는 미국에서 연방 자금 지원을 받는 연구 개발 센터를 운영하는 비영리 조직입니다. CVE의 목표는 알려진 취약점에 대한 정보 공유를 촉진하여 사이버 보안 계획이 최신 보안 문제와 약점을 반영하도록 업데이트될 수 있도록 하는 것입니다. 이를 위해 CVE는 각 취약점 또는 노출에 고유 식별자를 할당합니다. CVE 식별자는 CVE 이름 또는 CVE 번호라고도 합니다. CVSS(Common Vulnerability Scoring System)는 취약점의 심각도를 평가하기 위해 숫자를 할당하는 공개 표준 세트입니다. CVSS 점수 범위는 0.0에서 10.0까지입니다. 숫자가 높을수록 보안 심각도가 높아집니다. 각 CVE ID는 CVE-YYYY-NNNNN 형식입니다. YYYY 부분은 CVE ID가 할당된 연도 또는 취약점이 공개된 연도입니다.

파이프란 무엇인가?

CVE-2022-0847의 맥락에서 파이프의 내부 작동 방식, 특히 파이프 버퍼와 관련된 속성을 이해하는 것이 중요합니다. Linux의 파이프는 한 프로세스의 출력이 다른 프로세스의 입력이 되어 프로세스 간 데이터 전송을 돕습니다. 이 메커니즘은 시스템에서 실행 중인 다양한 프로세스 간의 통신 및 조정을 용이하게 합니다. Linux에서 파이프는 단방향이며, 데이터가 한 방향으로만 흐릅니다. 파이프 버퍼는 일반적으로 프로세스 간에 전송되는 데이터를 일시적으로 보관하는 고정 크기의 FIFO(선입선출) 데이터 구조로 구성됩니다. 프로세스가 파이프에 데이터를 쓰면 다른 프로세스가 읽을 때까지 버퍼에 저장됩니다. 데이터를 읽으면 버퍼에서 제거되어 새 데이터를 쓸 수 있습니다.

취약점

CVE-2022-0847의 경우 파이프 버퍼 내의 두 가지 함수를 이해하는 것이 중요합니다.

  1. copy_page_to_iter_pipe: 이 함수는 페이지에서 파이프 버퍼와 연결된 반복자(iterator)로 데이터를 복사하는 역할을 합니다. 파이프를 통한 프로세스 간 통신에서 한 프로세스가 파이프에 데이터를 쓰면 다른 프로세스가 읽을 수 있도록 파이프 버퍼로 복사되어야 합니다. "copy_page_to_iter_pipe" 함수는 이 복사 프로세스를 용이하게 하여 데이터가 프로세스 간에 정확하고 효율적으로 전송되도록 합니다. 이 함수 내에서 "flags" 매개변수는 복사 프로세스와 관련된 특정 속성이나 동작을 지정하거나 제어하는 데 사용됩니다. 이러한 플래그에는 추가 검사 또는 유효성 검사 수행 여부, 특정 유형의 데이터 처리 방법, 효율성을 위한 최적화 적용 여부와 같은 옵션이 포함될 수 있습니다.
  2. push_pipe: "push_pipe" 함수는 파이프 버퍼로 데이터를 푸시하는 데 관여합니다. 프로세스가 파이프에 데이터를 쓰면 데이터를 파이프 버퍼에 삽입해야 하며, 다른 프로세스가 읽을 수 있습니다. "push_pipe" 함수는 이 삽입 프로세스를 처리하여 데이터가 버퍼에 올바르게 배치되고 다른 프로세스가 읽을 수 있도록 합니다.

페이지 | 1

Max Kellermann은 Linux 커널이 Unix 파이프를 잘못 처리한다는 사실을 발견했습니다. 이 취약점은 "copy_page_to_iter_pipe" 및 "push_pipe" 함수 내에서 "flags" 매개변수와 같은 특정 속성의 초기화가 부적절하여 발생합니다. 이러한 간과로 인해 플래그에 오래되었거나 잘못된 값이 할당될 가능성이 생겨 시스템의 보안과 무결성을 손상시킬 수 있습니다. 권한이 없는 로컬 사용자가 이 결함을 이용하여 읽기 전용 파일이 지원하는 페이지 캐시의 페이지에 쓸 수 있으며, 결과적으로 시스템에서 권한을 상승시킬 수 있습니다.

공격 방법론

이는 CVE-2016-5195 "Dirty Cow"와 유사하지만 악용하기 더 쉽습니다. CVE-2022-0847의 악용은 대상 시스템에 대한 로컬 액세스가 필요하며 5.8보다 새로운 Linux 커널 버전에 영향을 미칩니다. 적절한 초기화 부족으로 인해 PIPE_BUF_FLAG_CAN_MERGE 플래그가 잘못 설정된 새 파이프 버퍼를 만들 수 있습니다. 이 플래그는 파이프 버퍼에 대한 쓰기의 병합을 제어하므로 파이프에 스플라이스된 기존 페이지에 쓸 수 있습니다. 파일이 이 스플라이스된 페이지를 허용하는 경우 수정 사항이 메모리에 있는 파일의 공유 시스템 전체 보기에 반영됩니다. 이후의 캐시 플러시는 현재 Linux 권한 설정을 무시하고 변경된 데이터를 디스크에 복사합니다. 이렇게 하면 SELinux, 표준 Linux 권한, 고급 액세스 제어 및 변경 불가능한 파일과 같은 읽기 전용 액세스 제어로만 수정이 보호되더라도 권한이 없는 사용자가 파일(디스크 또는 메모리)의 특정 내용을 변경할 수 있습니다. 따라서 공격자는 Linux 시스템에 대한 기본 지식과 악성 코드를 실행할 수 있는 능력을 가진 권한이 없는 로컬 사용자라고 가정할 수 있습니다. 이러한 개인은 권한을 상승시키고 잠재적으로 전체 시스템을 손상시켜 심각한 보안 위험을 초래할 수 있습니다.

개념 증명

아래는 Linux를 실행하는 가상 머신에서 CVE-2022-0847을 악용하기 위해 제가 따랐던 단계입니다.

  1. 리눅스 배포판이 취약한지 확인

    5.8보다 새로운 Linux 커널은 영향을 받습니다. 그러나 버전 5.16.11, 5.15.25 및 5.10.102는 CVE-2022-0847을 악용할 수 없습니다. 커널 버전을 확인하려면 *uname -r* 을 실행하면 됩니다. 대상 시스템이 취약한지 확실하지 않은 경우 이 bash script 를 실행할 수도 있습니다.

  2. 올바른 리눅스 커널 다운로드

    데모를 위해 Ubuntu 20.04.1 LTS를 사용하기로 결정했습니다. 하지만 이 버전의 Ubuntu는 현재 Linux 커널 5.15에서 실행되며 CVE-2022-0847은 이 커널 버전에서 악용될 수 없습니다. Linux 커널 5.8을 다운로드하려면 *sudo apt install linux-image-5.8.0-63-generic linux-headers-5.8.0-63-generic 을 실행하면 됩니다.

  3. 익스플로잇 다운로드

    익스플로잇은 GitHub에서 찾을 수 있습니다. 파일이 쓰기 금지되어 있거나, 변경 불가능하거나, 읽기 전용 마운트에 있더라도 페이지 캐시의 모든 파일 내용을 덮어쓰는 방법을 보여줍니다. 터미널에서 *git clone[ https://github.com/karanlvm/Infosec.git* ](https://github.com/karanlvm/Infosec.git%60)을 실행할 수도 있습니다.

  4. 원본 passwd 파일 복사

    *cp /etc/passwd /tmp/passwd.bak* 를 실행할 수 있습니다. 이를 통해 익스플로잇 실행 전후의 passwd 파일 차이를 식별할 수 있습니다.

  5. 익스플로잇 컴파일

    익스플로잇을 성공적으로 컴파일하려면 GCC가 설치되어 있어야 합니다. *sudo apt-get install gcc* 로 GCC를 설치할 수 있습니다. 익스플로잇을 컴파일하려면 *gcc exp.c -o exp* 를 실행하면 됩니다.

  6. 익스플로잇 실행

    익스플로잇을 실행하려면 읽기 전용 파일, 오프셋 및 삽입될 일부 문자를 매개변수로 제공해야 합니다. 이 경우 *./exp /etc/passwd 1 ootz:* 를 실행합니다. "It worked !"라는 출력이 나오면 Dirty Pipe 취약점을 성공적으로 악용한 것이며, 이제 암호 없이 루트 액세스 권한을 얻을 수 있습니다.

제한 사항

이 익스플로잇에는 두 가지 주요 제한 사항이 있습니다.

  1. 오프셋이 페이지 경계에 있을 수 없습니다(오프셋 전에 최소 1바이트를 작성해야 함).
  2. 쓰기가 페이지 경계를 넘을 수 없습니다. 즉, 페이로드가 4096바이트(페이지 크기)보다 작아야 합니다.

현재 상태 및 해결 방법

2024-01-12 기준으로 향후 30일 내 악용 활동 가능성은 7.58%입니다(EPSS). 아래는 CVE-2022-0487(역자 주: CVE-2022-0847의 오기로 보임)에 대한 CVSS(Common Vulnerability Scoring System)입니다:

이 취약점은 5.8보다 새로운 모든 Linux 커널에서 악용될 수 있습니다. 그러나 이 취약점은 Linux 5.16.11, 5.15.25 및 5.10.102에서 수정 되었습니다. 따라서 Linux 배포판 유지 관리자가 제공하는 패치나 업데이트를 적용하여 취약점을 해결할 수 있습니다. 이를 위해 다음 명령어 *sudo apt update* 및 *sudo apt upgrade* 를 실행하면 됩니다.

참고 문헌

  1. “2022-0847: A Flaw Was Found in the Way the ‘Flags’ Member of the New Pipe Buffer Structure Was Lacking Proper Initialization in Cop.” CVE Details, www.cvedetails.com/cve/CVE-2022-0847/. 2024년 4월 24일 접속.
  2. Kellermann, Max. “The Dirty Pipe Vulnerability.” The Dirty Pipe Vulnerability - The Dirty Pipe Vulnerability Documentation, 2022년 3월 7일, dirtypipe.cm4all.com/.
  3. MITRE Corporation. “CVE-2022-0847.” CVE, 2022년 3월 3일, cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-0847.
  4. National Institute of Standards and Technology. “CVE-2022-0847.” NVD, 2022년 10월 3일, nvd.nist.gov/vuln/detail/cve-2022-0847.
  5. “Piping in Unix or Linux.” GeeksforGeeks, GeeksforGeeks, 2023년 7월 5일, www.geeksforgeeks.org/piping-in-unix-or-linux/. 페이지 | 5
도구 다운로드
  • 루트 액세스로 전환

    이제 *su rootz* 를 실행하면 루트 액세스 권한을 얻을 수 있습니다. 확인을 위해 id 명령을 실행할 수 있습니다.