
리눅스 로컬 권한 상승 익스플로잇으로, CVE-2026-31431을 악용하여 AF_ALG 암호화 API를 splice()와 함께 남용해 페이지 캐시를 변조하고 루트 셸을 실행합니다.
이 저장소는 CVE-2026-31431("Copy Fail"이라고도 알려짐)에 대한 소규모 Linux 로컬 권한 상승 PoC를 포함합니다.
이 익스플로잇은 AF_ALG 사용자 공간 암호화 API의 Linux 커널 algif_aead 경로를 대상으로 합니다. AF_ALG와 splice()를 사용하여 커널이 /usr/bin/su의 페이지 캐시에 4바이트 청크로 쓰도록 강제한 다음, 페이지 캐시가 수정된 후 su를 실행합니다.
copy_fail_exp.py의 PoC는 네 가지 작업을 수행합니다:
authencesn(hmac(sha256),cbc(aes)) 변환을 사용하여 aead용 AF_ALG 소켓을 엽니다.setsockopt() 값으로 요청을 구성합니다.splice() 호출을 사용하여 대상 파일에서 AF_ALG 요청 경로(버그가 있는 커널 경로)로 데이터를 이동합니다./bin/sh를 포함하는 ELF 스텁입니다.zlib blob은 임의의 데이터가 아닙니다. 이는 /usr/bin/su의 시작 부분을 페이지 캐시에서 교체하여 다음 su 실행 시 루트 셸이 생성되도록 하는 컴팩트한 페이로드입니다.
취약한 코드는 Linux 커널 4.14 시대의 algif_aead 변경 사항에서 도입되었으며, 인플레이스 최적화를 되돌리는 업스트림 수정이 적용될 때까지 존재했습니다.
algif_aead 인플레이스 경로를 포함하는 Linux 커널.AF_ALG 암호화 API가 활성화된 시스템(대부분의 범용 Linux 배포판에서 기본값).| 배포판 | 커널 |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 |
6.18.226.19.127.0다운스트림 LTS 브랜치는 벤더 백포트가 실제 실행 중인 커널 패키지에 적용된 후에만 안전합니다.
소유한 실험실 VM 또는 컨테이너 호스트를 사용하세요. 프로덕션 시스템에서 실행하지 마십시오.
/usr/bin/su가 존재하고 setuid-root인지 확인합니다.python3 copy_fail_exp.py
/usr/bin/su를 패치한 다음 su를 호출합니다. 환경에 따라 루트 셸 또는 루트 프롬프트가 표시됩니다.이 스크립트는 Python 3 표준 라이브러리 외에 추가 종속성이 없습니다.
python3 copy_fail_exp.py
대상을 먼저 검사하려면 스크립트는 현재 기본적으로 /usr/bin/su를 사용합니다.
다운스트림 커널을 유지 관리하는 경우 올바른 수정 방법은 인플레이스 AEAD 최적화를 제거하는 업스트림 revert를 백포트하는 것입니다:
a664bf3d603dc3bdcf9ae47cc21e0daec706d7a572548b093ee3 인플레이스 변경을 되돌립니다.다운스트림 커널 트리에 권장되는 워크플로우:
git cherry-pick a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
make olddefconfig
make -j"$(nproc)"
make modules_install
make install
reboot
커널을 직접 재빌드하지 않는 경우, 백포트가 포함된 벤더 커널 패키지를 설치하고 해당 커널로 재부팅하십시오.
패치가 지연되는 경우 임시 조치로 모듈 경로를 비활성화합니다:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
이는 완화 조치이지 수정 사항이 아닙니다.
6.12.0-124.45.1.el10_1| SUSE 16 | 6.12.0-160000.9-default |