
CVE-2026-31431에 대한 개념 증명 익스플로잇으로, algif_aead 모듈의 Linux 커널 로컬 권한 상승 취약점으로, 권한이 없는 사용자가 페이지 캐시에 4바이트 쓰기를 통해 루트 권한을 획득할 수 있게 합니다.
이 저장소는 CVE-2026-31431에 대한 개념 증명(PoC) 익스플로잇을 포함하고 있습니다. 이는 높은 심각도의 Linux 커널 로컬 권한 상승 취약점으로, 권한이 없는 로컬 사용자가 루트 액세스 권한을 얻을 수 있게 합니다. "Copy Fail"이라고 명명된 이 결함은 algif_aead 모듈에 존재하며, AF_ALG 소켓 인터페이스 및 splice() 시스템 호출과 연계하여 setuid 바이너리인 /usr/bin/su와 같은 읽기 가능한 파일의 페이지 캐시에 통제된 4바이트 쓰기를 수행할 수 있습니다.
이 취약점은 2017년 이후 출시된 거의 모든 Linux 커널에 영향을 미치며, 주요 배포판(Ubuntu, Debian, RHEL, SUSE, Amazon Linux 등 다수)을 포함합니다. 2026년 4월 29일에 공개적으로 공개되었습니다. 상류(업스트림)에서 수정 사항(커밋 a664bf3d603d)이 커밋되었지만, 많은 공급업체가 여전히 패치된 커널을 출시하는 중입니다. 패치된 커널을 사용할 수 있을 때까지 임시 완화 조치로 algif_aead 커널 모듈을 비활성화하는 것이 강력히 권장됩니다.
⚠ 중요: 이 자료는 교육 및 승인된 보안 연구 목적으로만 제공됩니다. 소유하지 않은 시스템이나 명시적 허가 없이 사용하지 마십시오.
이 저장소에는 다양한 관점에서 익스플로잇을 시연하는 두 가지 PoC 구현이 포함되어 있습니다.
copy-fail-poc-short.py — 최소형, 원본에 가까움원래 공개된 Python 익스플로잇에 매우 가깝게 유지되는 축약 버전입니다. 단일 문자 변수 이름을 사용하고 주석이나 상수를 생략하여 매우 컴팩트(732바이트)합니다. 이 변형은:
/usr/bin/su 및 원시 AF_ALG AEAD 소켓을 엽니다.os.splice를 사용하여 대상 파일에서 해당 4바이트 청크를 제로 카피(zero-copy)합니다./usr/bin/su를 실행하여 루트 셸로 전환합니다.copy-fail-poc.py — 완전히 리팩터링된 종합 버전Python 모범 사례를 따르는 완전히 재작성되고 잘 문서화된 버전입니다. 이 변형은:
send_data_over_crypto_socket())를 사용합니다.이 버전은 취약점을 깊이 이해하거나 추가 연구를 위해 코드를 수정하려는 사람들에게 이상적입니다.
높은 수준에서 익스플로잇은 다음을 수행합니다:
setuid 바이너리(/usr/bin/su)를 엽니다.AF_ALG AEAD 소켓을 생성하고 로직 결함을 트리거하는 데 필요한 매개변수로 구성합니다.splice() 메커니즘을 활용합니다.algif_aead 모듈의 결함으로 인해 커널이 대상 바이너리의 페이지 캐시에 공격자가 통제한 4바이트 데이터를 잘못 기록합니다./usr/bin/su의 메모리 내 페이지 캐시를 수정하면 런타임에 바이너리가 효과적으로 패치되어, 권한이 없는 사용자가 루트 셸을 반환하는 패치된 버전을 실행할 수 있습니다.이 익스플로잇은 매우 안정적이며(100% 성공률) 레이스 윈도우나 커널별 오프셋이 필요하지 않습니다.
a664bf3d603d (git.kernel.org)