
CVE-2017-7184, Linux 커널 XFRM netlink 스택 오버플로우에 대한 개념 증명 로컬 권한 상승 익스플로잇입니다. 네임스페이스 남용과 커널 ROP를 통해 sudo 없이 루트 권한을 획득하는 방법을 시연합니다.
이 저장소는 CVE-2017-7184에 대한 개념 증명 로컬 권한 상승 익스플로잇입니다. 이 취약점은 Linux 커널의 XFRM (IPsec) netlink 서브시스템에 존재합니다.
익스플로잇은 권한이 없는 사용자가 다음과 같은 방법으로 **실제 루트 (UID 0)**를 획득할 수 있음을 보여줍니다.
권한이 없는 사용자 + 네트워크 네임스페이스 생성
네임스페이스 내부에서 CAP_NET_ADMIN 획득
XFRM netlink 처리에서 커널 스택 오버플로우 유발
커널 ROP 체인 실행으로 다음 호출:
prepare_kernel_cred(NULL)commit_creds()전체 루트 권한으로 안전하게 사용자 공간으로 복귀
sudo는 필요하지 않습니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2017-7184 |
| 구성 요소 | Linux Kernel – XFRM Netlink |
| 버그 유형 | 커널 스택 오버플로우 |
| 영향 | 로컬 권한 상승 |
| 공격 벡터 | 로컬 (권한 없는 사용자) |
| 익스플로잇 분류 | 네임스페이스 남용 + ROP |
| 최초 영향 버전 | Linux 커널 ≤ 4.8 |
| 수정 버전 | 2017년에 배포된 커널 패치 |
권한 없는 사용자 네임스페이스
unshare(CLONE_NEWUSER | CLONE_NEWNET) 사용CAP_NET_ADMIN 부여XFRM Netlink 남용
NETLINK_XFRM 소켓 생성XFRM_MSG_NEWSA 메시지 전송커널 ROP 실행
사용자 공간으로 복귀
swapgs; iretq 사용unprivileged_userns_clone = 1gcc네임스페이스 지원 확인:
cat /proc/sys/kernel/unprivileged_userns_clone
예상 출력:
1
gcc exploit.c -o exploit -pthread
./exploit
sudo를 사용하지 마십시오.
성공하면 실제 루트 셸을 얻을 수 있습니다:
uid=0(root) gid=0(root) groups=0(root)
익스플로잇은 다음을 시도합니다:
/proc/kallsyms에서 심볼 유출
제한된 경우, 다음을 위한 하드코딩된 오프셋으로 대체:
commit_credsprepare_kernel_cred⚠️ ROP 가젯과 오프셋은 커널 버전에 따라 다릅니다. 다른 빌드에 맞게 조정해야 합니다.
이 경우에도 시스템이 취약함을 확인할 수 있습니다.
sysctl -w kernel.unprivileged_userns_clone=0
이 코드는 교육 및 보안 연구 목적으로만 제공됩니다.
commit_creds 익스플로잇