
Boîte à outils CVE-2026-64560 : chaîne d'outils Go en binaire unique + port cible realme RMX5010 (A16, SM8750)
CVE-2026-64560 est un use-after-free dans posix-cpu-timers du noyau Linux
(race locale non privilégiée, CVSS 3.1 = 7.8 ; non corrigé en 6.6.118, corrigé seulement en 6.6.147).
Ce dépôt fait deux choses : transformer la chaîne d'outils amont, pilotable uniquement via une
flopée de scripts Python, en un seul binaire Go statique,
et ajouter la cible realme RMX5010 (A16 / SM8750) absente en amont.
[!WARNING] Ceci est du code d'exploit noyau expérimental. Il peut redémarrer l'appareil, corrompre l'état du noyau ou entraîner une perte de données. Ne l'utilisez que sur des appareils que vous possédez ou pour lesquels vous disposez d'une autorisation explicite. Sauvegardez d'abord.
| profile | appareil | noyau | état |
|---|---|---|---|
rmx5010-a16 | realme RMX5010 / RE6018L1, A16 BP2A.250605.015 | 6.6.118-android15-8-g93e223c276e7-abogki500782043-4k | ajouté par ce dépôt ; la charge statique passe le portail --preflight sur appareil réel, l'élévation de privilèges complète n'a pas encore été validée sur matériel |
dada | Xiaomi 15 | 6.6.118-android15-8-gb9cc6ec16bc8-…-4k | conservé tel quel depuis l'amont (voir notes amont) |
op13 | OnePlus 13 | identique à l'amont | conservé tel quel depuis l'amont |
Pas besoin d'installer Go ni Python :
v*, contient les outils pour chaque plateforme + les charges pour chaque cible + SHA256SUMS.txtmain
cve64560-<os>-<arch> : linux/amd64, linux/arm64, android/arm64, darwin/arm64, windows/amd64payloads : les charges statiques aarch64 de chaque profile (rmx5010-a16-…, op13-…,
chacune dans son propre répertoire, plus d'écrasement mutuel)Celui en android/arm64 peut être directement adb push vers /data/local/tmp pour s'exécuter sur téléphone.
go build -o cve64560 ./gotool # outil (pur Go, sans dépendances)
./cve64560 build --profile profiles/rmx5010/rmx5010-40850e5ff6a5.json # charge (nécessite cc)
Aperçu de la ligne de commande, exécution à vide avec --dry-run, comment les profiles sont dérivés : voir docs/GOTOOL.md.
Le processus d'origine nécessitait python3 + tools/*.py + une flopée de shell : pas de python
sur les machines de test, encore moins sur téléphone. Désormais un seul binaire statique couvre
tout le flux kallsyms → derive → render → patch → build → campaign,
et fonctionne partout où on peut compiler en croisé.
L'implémentation Python n'a pas été supprimée : elle reste dans tools/ comme implémentation de référence et base de comparaison pour la CI,
la CI exécute Go et Python pour chaque profile puis fait un diff -r, et passe au rouge à la moindre différence d'octet.
.github/workflows/build.yml)gotool/ chaîne d'outils Go (un fichier par commande)
profiles/ profiles de cible (un JSON par cible, source unique de vérité pour le rendu)
src/ templates amont + sources d'appareils déjà rendues
tools/ implémentation Python de référence amont + couche de compatibilité musl/bionic + scripts CI
scripts/ scripts de campagne/mesure amont (version Go dans gotool/cmd_campaign.go)
targets/ enregistrement des symboles/offsets du noyau pour chaque cible
symbols/ tables de symboles noyau des deux profiles livrés (les autres cibles relèvent de données dérivées)
docs/GOTOOL.md documentation de la chaîne d'outils Go
Le dépôt ne contient pas d'images de firmware, de clés d'appareil ni d'identifiants uniques d'appareil. Les étapes nécessitant une image noyau constructeur pour être reproduites (extraction de symboles, dérivation de profile) embarquent l'image d'origine, hors dépôt.
La seule exception concerne les tables de symboles noyau des deux profiles livrés (symbols/symbols_*.json, environ
9 Mo chacune) : build échoue directement si la table est introuvable (pas de charge avec des constantes non vérifiées), et la CI
ne dispose pas de l'Image noyau pour reconstruire ces tables. Elles ne contiennent que des noms de symboles et des adresses, pas l'image elle-même.
La charge est un root temporaire : elle expire au redémarrage, n'écrit rien sur disque et ne modifie aucune partition.
| job | rôle |
|---|
gotool | compilation croisée pour 5 plateformes + gofmt/go vet/go test |
parity | comparaison octet par octet des sorties Go et Python ; tools/golden.sha256 vérifie strictement les artefacts de référence |
payload | compilation des charges dans un conteneur arm64 Alpine (qemu), chaîne d'outils du même type que le gcc aarch64 musl validé à l'origine sur matériel réel |
release | publication automatique d'une Release sur tag |