
CVE-2026-31431을 사용하여 루트 비밀번호를 일시적으로 제거합니다
[!WARNING] 소유하고 있거나 테스트 권한이 있는 시스템에서만 사용하십시오.
루트 비밀번호를 일시적으로 제거하며, CVE-2026-31431을 사용하여 현재 사용자의 비밀번호를 모르더라도 아키텍처에 관계없이 루트로 권한 상승할 수 있도록 합니다.
책임감 있게 사용하십시오. 테스트 권한이 있는 시스템에서만 사용하십시오. 이 방법이 시스템에서 지원되는지 여부는 다를 수 있지만, 제가 테스트한 모든 Debian 기반 배포판에서 작동했습니다.
이 PoC는 기본적으로 /etc/passwd에서 UID를 모두 0으로 바꾸어 루트 권한을 부여하는 방식입니다. 이 방법은 대신 루트의 비밀번호를 제거하므로 su를 실행하면 즉시 루트 권한을 얻을 수 있습니다. 이는 안정성을 위해 사용자 계정을 그대로 유지하며, 시스템의 모든 사용자가 정리될 때까지 권한 상승이 가능하다는 단점이 있습니다. 바이너리 수정이 아니므로 모든 아키텍처에서 작동해야 합니다(Aarch64 및 x64 테스트 완료).
python exploit.py [ --shell | --clean | --noclean ]
인수 없이 실행하면 프로그램이 실행되어 /etc/passwd를 변경한 후 되돌립니다.
--noclean은 완료 후 변경 사항이 되돌려지지 않도록 방지합니다.--clean은 이전 실행의 정리만 수행하며, 익스플로잇을 실행하지 않습니다.--shell은 정리하지 않지만 익스플로잇 실행 후 su로 루트 셸을 실행합니다.
에서
비밀번호가 /etc/shadow에 저장되어 있음을 나타내는 'x'를 제거하면 사용자에게 비밀번호가 전혀 없는 것으로 처리되어 쉽게 로그인할 수 있습니다.
제가 이 글을 쓸 당시에는 CopyFail에 대한 잘 알려진 PoC만 있었습니다. 하나는 SUID 실행 파일을 덮어쓰는 것이고, 다른 하나는 사용자의 UID를 0으로 바꾸는 것이었습니다. 시스템을 테스트하는 경우 이 두 가지 모두 상당히 다른 사용 사례가 있습니다. SUID 덮어쓰기는 시스템 아키텍처에 맞춘 셸코드가 필요하며, UID 수정은 현재 사용자의 비밀번호로 재인증해야 하는데, 이를 모를 수도 있습니다. RootRemover는 이러한 요구 사항이 문제가 될 때 종종 사용할 수 있습니다.
이 도구는 www-data와 같은 nologin 사용자로 셸을 획득한 경우를 위해 설계되었으며, 알려진 비밀번호가 있거나 셸코드를 준비할 수 있을 정도로 아키텍처를 잘 아는 시스템을 위한 것이 아닙니다.
*LK*' 또는 '*NP*'가 없어야 함 (연쇄 쓰기로 수정 가능하지만 구현할 시간이 없었음)su의 명령줄을 통해 더 쉽게 식별될 수 있음(인수 없음은 항상 루트를 의미하며, UID 패치 PoC는 로그에서 자신의 사용자로 전환한 것처럼 보임)실제 익스플로잇 코드는 rootsecdev의 저장소에서 가져왔으며, 위에서 설명한 이유로 쓰여지는 바이트를 주로 변경했습니다.