
CVE-2026-64560 툴킷: Go 단일 바이너리 툴체인 + realme RMX5010 (A16, SM8750) 타깃 포트
CVE-2026-64560은 Linux 커널 posix-cpu-timers의 use-after-free입니다
(로컬 비권한 레이스, CVSS 3.1 = 7.8; 6.6.118 미수정, 6.6.147에서야 수정).
이 저장소에는 두 가지가 있습니다: 업스트림에서 수많은 Python 스크립트로만 구동 가능한 도구 체인을 단일 정적 Go 바이너리로 만드는 것,
그리고 업스트림에 없는 realme RMX5010 (A16 / SM8750) 타깃을 추가하는 것입니다.
[!WARNING] 이것은 실험적인 커널 exploit 코드입니다. 기기를 재부팅시키거나 커널 상태를 손상시키거나 데이터 손실을 일으킬 수 있습니다. 본인이 소유하거나 명시적으로 권한을 받은 기기에서만 사용하세요. 먼저 백업하세요.
| profile | 기기 | 커널 | 상태 |
|---|---|---|---|
rmx5010-a16 | realme RMX5010 / RE6018L1, A16 BP2A.250605.015 | 6.6.118-android15-8-g93e223c276e7-abogki500782043-4k | 이 저장소에서 새로 추가; 정적 페이로드가 실기기에서 --preflight 게이트를 통과, 전체 권한 상승은 아직 실기기 검증되지 않음 |
dada | Xiaomi 15 | 6.6.118-android15-8-gb9cc6ec16bc8-…-4k | 업스트림 그대로 유지 (참조: 업스트림 설명) |
op13 | OnePlus 13 | 업스트림과 동일 | 업스트림 그대로 유지 |
Go를 설치할 필요도, Python을 설치할 필요도 없습니다:
v* 태그를 달면 자동 배포되며, 각 플랫폼 도구 + 각 타깃 페이로드 + SHA256SUMS.txt를 포함main에 push할 때마다 생성됨
cve64560-<os>-<arch>: linux/amd64, linux/arm64, android/arm64, darwin/arm64, windows/amd64payloads: 각 profile의 aarch64 정적 페이로드 (rmx5010-a16-…, op13-…,
각각 별도 디렉터리에 기록되어 더 이상 서로 덮어쓰지 않음)android/arm64는 바로 adb push로 /data/local/tmp에 넣고 폰에서 실행할 수 있습니다.
go build -o cve64560 ./gotool # 도구 (순수 Go, 의존성 없음)
./cve64560 build --profile profiles/rmx5010/rmx5010-40850e5ff6a5.json # 페이로드 (cc 필요)
명령줄 개요, --dry-run 빈 실행, profile 도출 방법은 docs/GOTOOL.md를 참조하세요.
기존 흐름은 python3 + tools/*.py + 수많은 shell이 필요했습니다: 테스트 머신에는 python이 없고,
폰에는 더더욱 있을 수 없습니다. 이제 하나의 정적 바이너리가
kallsyms → derive → render → patch → build → campaign 전체 흐름을 커버하며,
어디로든 크로스 컴파일해서 실행할 수 있습니다.
Python 구현은 삭제하지 않았습니다: tools/에 참조 구현 및 CI 대조 기준으로 남아 있으며,
CI는 각 profile마다 Go와 Python을 각각 실행한 뒤 diff -r로 비교하여 바이트 단위로 불일치하면 실패합니다.
.github/workflows/build.yml)gotool/ Go 도구 체인 (명령 하나당 파일 하나)
profiles/ 타깃 profile (타깃당 JSON 하나, 렌더링의 유일한 진실 원천)
src/ 업스트림 템플릿 + 렌더링된 기기 소스
tools/ 업스트림 Python 참조 구현 + musl/bionic 호환 계층 + CI 스크립트
scripts/ 업스트림의 캠페인/측정 스크립트 (Go 버전은 gotool/cmd_campaign.go)
targets/ 각 타깃의 커널 심볼/오프셋 기록
symbols/ 두 출하 profile의 커널 심볼 테이블 (나머지 타깃은 파생 데이터)
docs/GOTOOL.md Go 도구 체인 문서
저장소에는 펌웨어 이미지, 기기 키, 기기 고유 식별자가 포함되지 않습니다. 벤더 커널 이미지가 있어야 재현 가능한 단계 (심볼 추출, profile 도출)는 원본 이미지를 함께 제공하며, 저장소에는 들어가지 않습니다.
유일한 예외는 두 출하 profile의 커널 심볼 테이블(symbols/symbols_*.json, 각 약
9 MB)입니다: build는 테이블을 찾지 못하면 바로 실패하며(검증되지 않은 상수를 가진 페이로드를 내보내지 않음), CI에는
커널 Image가 없어 테이블을 재생성할 수 없습니다. 이들은 심볼 이름과 주소만 포함하며 이미지 자체는 포함하지 않습니다.
페이로드는 임시 root입니다: 재부팅 시 무효화되며, 디스크에 기록하지 않고 파티션을 변경하지 않습니다.
| job | 역할 |
|---|
gotool | 5개 플랫폼 크로스 컴파일 + gofmt/go vet/go test |
parity | Go와 Python 출력 바이트 단위 비교; tools/golden.sha256로 골든 산출물 하드 검증 |
payload | arm64 Alpine 컨테이너(qemu)에서 페이로드 컴파일, 도구 체인은 당시 실기기 검증에 사용된 aarch64 musl gcc와 동일 계열 |
release | tag 시 자동 Release 배포 |