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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-31431 — CVE-2026-31431(algif_aead) Linux 커널 페이지 캐시 쓰기 취약점에 대한 탐지기 및 개념 증명 도구로, 비파괴적 스캐너와 로컬 권한 상승 익스플로잇을 포함합니다. | Kitploit
도구/GitHubGitHub/zhanghangorg/cve-2026-31431
Privilege EscalationExploit FrameworksVulnerability AnalysisExploitationBinary Exploitation
GitHubzhanghangorg/cve-2026-31431

cve-2026-31431

CVE-2026-31431(algif_aead) Linux 커널 페이지 캐시 쓰기 취약점에 대한 탐지기 및 개념 증명 도구로, 비파괴적 스캐너와 로컬 권한 상승 익스플로잇을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-31431(Copy Fail) 도구 모음

이 저장소는 Linux algif_aead / authencesn 페이지 캐시 scratch-write 취약점 CVE-2026-31431의 탐지기와 PoC를 포함합니다.

공개 문서: https://xint.io/blog/copy-fail-linux-distributions

권한 안내

소유하거나 명시적 권한을 받은 호스트에서만 사용하십시오. 탐지기는 무해하며 임시 디렉터리의 sentinel 파일만 조작합니다. PoC와 LPE는 메모리 내 페이지 캐시 상태를 수정하는 실제 로컬 권한 상승 기술이므로, 권한 없이 실행하는 것은 일반적으로 불법입니다.

취약점 개요

algif_aead는 AEAD 연산을 제자리(in-place) 방식으로 수행합니다. 즉 req->src == req->dst입니다. 입력 데이터가 splice()를 통해 일반 파일에서 전달되면 대상 scatterlist에 해당 파일의 페이지 캐시 페이지 참조가 포함되어, 커널이 파일의 페이지 캐시 사본에 쓸 수 있게 됩니다.

authencesn(hmac(sha256),cbc(aes))는 AAD의 seqno_lo 필드(AAD 4~7번째 바이트)에 4바이트 scratch write를 수행합니다. 위의 제자리 AEAD와 splice() 경로를 결합하면, 공격자는 이 4바이트가 읽기 가능한 파일의 페이지 캐시 페이지에 기록되도록 할 수 있습니다.

이 수정은 디스크에 기록되지 않으며 현재 커널 페이지 캐시에만 영향을 줍니다. 따라서 디스크의 파일 내용은 변경되지 않지만, 해당 페이지 캐시를 공유하는 읽기 프로세스는 오염된 내용을 보게 됩니다. /etc/passwd 및 /usr/bin/su와 같은 world-readable 파일이 대상이 될 수 있습니다.

파일 설명

정식 버전 컴파일

로컬에 Rust 툴체인과 Cargo가 설치되어 있어야 합니다.

모든 Rust 바이너리 컴파일:

root@kitploit:~
cargo build --release --bins

컴파일 완료 후 생성되는 파일:

root@kitploit:~
target/release/cve_2026_31431_detector
target/release/cve_2026_31431_poc

저장소에 사전 컴파일된 파일을 커밋해야 한다면 다음 위치에 두십시오:

root@kitploit:~
dist/linux-x86_64/cve_2026_31431_detector
dist/linux-x86_64/cve_2026_31431_poc
dist/linux-x86_64/SHA256SUMS

전체 target/ 디렉터리를 커밋하지 마십시오. 해당 디렉터리에는 Cargo 중간 산출물과 로컬 캐시가 포함되어 있습니다.

무해 탐지기만 컴파일:

root@kitploit:~
cargo build --release --bin cve_2026_31431_detector

poc.py의 Rust 버전만 컴파일:

root@kitploit:~
cargo build --release --bin cve_2026_31431_poc

취약점 존재 여부 확인

Rust 무해 탐지기 권장:

root@kitploit:~
./target/release/cve_2026_31431_detector
echo $?

Cargo를 통해서도 실행 가능:

root@kitploit:~
cargo run --release --bin cve_2026_31431_detector
echo $?

Python 탐지기 사용법:

root@kitploit:~
python3 test_cve_2026_31431.py
echo $?

종료 코드 의미:

종료 코드의미
0취약점이 탐지되지 않았거나, AF_ALG / authencesn 사용 불가 등 사전 조건이 충족되지 않음.
2CVE-2026-31431에 취약한 것으로 탐지됨.

일반적인 출력 판단:

탐지기가 수행하는 작업:

  1. AF_ALG 및 authencesn(hmac(sha256),cbc(aes)) 사용 가능 여부 확인.
  2. 임시 디렉터리에 4KiB sentinel 파일 생성.
  3. sendmsg로 AAD를 전송하고 AAD의 seqno_lo를 marker PWND로 설정.
  4. splice()로 sentinel 파일 페이지 캐시 페이지를 AF_ALG op socket에 전달.
  5. recv() 호출로 알고리즘 실행.
  6. sentinel 파일을 다시 읽어 페이지 캐시에 marker 또는 기타 수정이 나타나는지 확인.

탐지기는 /usr/bin/su, /etc/passwd 또는 기타 시스템 파일을 수정하지 않습니다. 임시 sentinel 파일은 종료 시 삭제됩니다.

PoC 실행

Rust 버전 poc.py:

root@kitploit:~
./target/release/cve_2026_31431_poc

또는:

root@kitploit:~
cargo run --release --bin cve_2026_31431_poc

주의: 이 PoC는 poc.py의 로직에 따라 /usr/bin/su를 열고, 취약점 프리미티브로 페이지 캐시 사본을 오염시킨 후 su를 실행합니다. 이는 무해 탐지 절차가 아니며, 권한이 있는 테스트 환경에서만 실행해야 합니다.

Python LPE 사용법

root@kitploit:~
python3 exploit_cve_2026_31431.py
python3 exploit_cve_2026_31431.py --shell

이 스크립트는 현재 사용자의 /etc/passwd 내 UID 필드를 찾아 페이지 캐시의 UID를 0000으로 변경하려 시도합니다. 디스크의 /etc/passwd는 수정되지 않지만, 시스템 프로세스가 페이지 캐시를 읽을 때 오염된 내용을 볼 수 있습니다.

제한 조건:

  • 현재 사용자 UID는 4자리 숫자여야 합니다(예: 1000~9999).
  • nscd, sssd, systemd-userdbd와 같은 NSS 캐시 서비스가 /etc/passwd의 페이지 캐시 변화를 가릴 수 있습니다.
  • /etc/passwd 페이지 캐시는 patch와 su 실행 사이에 유지되어야 합니다.

페이지 캐시 정리:

root@kitploit:~
python3 -c "import os; fd=os.open('/etc/passwd', os.O_RDONLY); os.posix_fadvise(fd, 0, 0, os.POSIX_FADV_DONTNEED); os.close(fd)"

이미 root 셸을 획득했다면 다음도 실행 가능:

root@kitploit:~
echo 3 > /proc/sys/vm/drop_caches

재부팅도 페이지 캐시 상태를 지웁니다.

완화 조치

배포판 커널 패치 전에 algif_aead를 비활성화할 수 있습니다:

root@kitploit:~
sudo tee /etc/modprobe.d/disable-algif-aead.conf <<<'install algif_aead /bin/false'
sudo rmmod algif_aead 2>/dev/null

완화 조치 적용 후 탐지기는 일반적으로 检测结论:未发现漏洞을 출력하고 트리거 사전 조건이 충족되지 않음을 설명하며 종료 코드 0을 반환해야 합니다.

상류 패치 방향은 AEAD 연산을 제자리 처리에서 비제자리 처리로 복원하여 페이지 캐시 페이지가 쓰기 가능한 destination scatterlist에 들어가지 않도록 하는 것입니다.

참고

  • Xint 공개 문서: https://xint.io/blog/copy-fail-linux-distributions
  • CVE-2026-31431
도구 다운로드
파일설명
test_cve_2026_31431.pyPython 무해 탐지기. 임시 sentinel 파일만 조작하며 시스템 파일을 건드리지 않습니다.
src/main.rsRust 무해 탐지기. 탐지 로직과 종료 코드는 Python 탐지기와 동일합니다.
src/bin/poc.rspoc.py의 Rust 버전. /usr/bin/su의 페이지 캐시를 오염시키고 su를 실행합니다.
poc.pyPython PoC.
exploit_cve_2026_31431.pyPython LPE. /etc/passwd 페이지 캐시를 오염시켜 root 셸을 얻으려 시도합니다.
1
테스트 과정에서 오류 발생. 결과를 취약점 판단 근거로 사용할 수 없음.
출력결론
检测结论:未发现漏洞취약점이 탐지되지 않았거나, 트리거 사전 조건이 충족되지 않음.
检测结论:存在 CVE-2026-31431 漏洞marker PWND가 spliced 페이지 캐시 페이지에 성공적으로 기록됨. 취약점 존재.
检测结论:存在疑似 CVE-2026-31431 漏洞페이지 캐시가 수정됨. marker가 예상 위치에 기록되지 않았더라도 영향을 받은 것으로 간주해야 함.
测试过程出错,无法判断是否存在漏洞탐지 실패. 종료 코드 1. 오류 메시지를 확인 후 다시 실행해야 함.