Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2024-56426 — Kit d'exploitation pour le bootROM Exynos 9830 qui fournit un contournement du démarrage signé, une injection de clés personnalisées et des charges utiles de dump mémoire pour les appareils Samsung SM-G985F. | Kitploit
Outils/GitHubGitHub/xcracker000/cve-2024-56426
Sécurité AndroidSécurité des Systèmes EmbarquésExploitationRétro-ingénierieHacking MatérielSécurité MobileSécurité MatérielleDéveloppement de Charges UtilesAnalyse de MicrologicielExploitation de Binaires
GitHubxcracker000/cve-2024-56426
1il y a 5 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2024-56426

Kit d'exploitation pour le bootROM Exynos 9830 qui fournit un contournement du démarrage signé, une injection de clés personnalisées et des charges utiles de dump mémoire pour les appareils Samsung SM-G985F.

Voir le dépôt

Exploit du Bootrom SM-G985F / Exynos9830

[!CAUTION] Le lot de clés actuel et les fichiers générés peuvent être fusionnés. Une fois qu'un appareil a été fusionné, la modification de l'eFuse est irréversible et l'appareil doit continuer à utiliser des images de démarrage et un matériel de clés correspondant à la clé fusionnée. L'utilisation de ces fichiers ou procédures se fait à vos propres risques en raison du comportement de fusion ; toutes les conséquences restent de la responsabilité de l'utilisateur qui les exécute. Vérifiez le fichier eFuse, les clés privées, les images FWBL1 signées, LK / sboot.bin, et l'appareil cible avant d'exécuter toute procédure de fusion.

Sommaire

  • Structure du dépôt
  • Prérequis
  • Préparation des images
  • Construction du payload
  • Génération d'images SBoot signées
  • Modes d'exploitation
  • Chaîne de démarrage Exynos 9830
  • Disposition des images Exynos 9830
  • Adresses de chargement
  • Identifiants de source de démarrage
  • Payload de dump /mem
  • Attribution amont
  • Crédits

Structure du dépôt

Prérequis

Chaîne d'outils Linux

root@kitploit:~
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu

Chaîne d'outils macOS

root@kitploit:~
brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-gnu

Dépendances Python

root@kitploit:~
python3 -m pip install -r requirements.txt

requirements.txt inclut coloredlogs, cryptography, hexdump, libusb, pyusb et pycryptodome.

Pilote USB Windows

Sous Windows, le périphérique USB BootROM 04e8:1234 doit utiliser un pilote compatible WinUSB/libusb avant que PyUSB puisse l'ouvrir. Voir exploit/windows/README.md.

Le dépôt inclut un package de pilote WinUSB dans exploit/windows/Exynos_USB_Device.inf, avec son catalogue correspondant et le fichier d'import de certificat dans le même répertoire.

Préparation des images

Découpage de sboot.bin

root@kitploit:~
python3 exploit/split.py bootLoaderFiles/originalSboot_K/sboot.bin -o exploit/extra/images

Le script de découpage écrit les parties d'image et un fichier split_manifest.json dans le répertoire de sortie.

Correctif de clé personnalisée LK

L'image LK doit utiliser les identifiants de commande de la clé 2 de démarrage sécurisé ROM pour la procédure de clé personnalisée :

Lors de l'application du TSV de correctif LK dans le projet Ghidra, l'assistant a été appelé via Ghidra headless comme ceci :

root@kitploit:~
GHIDRA=/path/to/ghidra_12.0.4_PUBLIC
REPO=$(pwd)
"$GHIDRA/support/analyzeHeadless" "$REPO/exynos990reverseEng" exynos990 \
  -process lk.bin \
  -noanalysis \
  -scriptPath "$REPO/external/ghidra" \
  -postScript ApplyLkPatches.java "$REPO/external/ghidra/lk_985_selected_patches.tsv"

Intégrez la clé eFuse de 32 octets dans lk.bin à l'offset 0x205008, en remplaçant la clé d'origine :

root@kitploit:~
dd if=external/keys/exynos9830_crecker/crecker.efuse of=exploit/extra/images/lk.bin bs=1 seek=$((0x205008)) count=32 conv=notrunc
xxd -g1 -s $((0x205008)) -l 32 exploit/extra/images/lk.bin

Fusion des parties découpées

root@kitploit:~
python3 exploit/merge.py exploit/extra/images Exynos9830

Le script de fusion écrit sboot.bin dans le répertoire de travail actuel.

Construction du payload

Construisez les projets de payload dans external/payloads/ et copiez les binaires obtenus dans exploit/extra/payloads/ :

root@kitploit:~
./exploit/build_payloads.sh

Le chargeur UFS et le payload à clé personnalisée intègrent un fichier efuse de 32 octets lors de la construction. Par défaut, le Makefile lit external/keys/exynos9830_crecker/crecker.efuse ; remplacez-le avec CUSTOM_KEY_EFUSE=/path/to/crecker.efuse si nécessaire.

Génération d'images SBoot signées

L'étape de vérification préalable exécutée par exploit/exploit.py re-signe sur place le jeu d'images SBoot dans exploit/extra/images/ avant chaque exécution signée. Aucune sortie signée séparée n'est conservée. L'étape de signature utilise le lot de clés partagé délibérément suivi sous external/keys/exynos9830_crecker/.

Commande équivalente à exécuter à la racine du dépôt pour le jeu d'images complet :

root@kitploit:~
python3 external/tools/sign_sboot_images.py \
  --images-dir exploit/extra/images \
  --keys-dir external/keys/exynos9830_crecker

Cette commande signe :

Le signataire par lot transmet la valeur décimale 23 pour chaque image et ne réutilise pas une ancienne valeur de rollback déjà présente dans un pied de page existant.

epbl.img est d'abord ré-chiffré si nécessaire, puis signé sur les octets finaux. ldfw.img et tzsw.img nécessitent toujours la procédure AVB externe si leur contenu AVB doit être actualisé.

La commande limitée à FWBL1 est :

root@kitploit:~
python3 external/tools/sign_tool.py \
  -i exploit/extra/images/fwbl1.img \
  -o exploit/extra/images/fwbl1.img \
  -k external/keys/exynos9830_crecker/crecker_private.pem \
  -H external/keys/exynos9830_crecker/crecker.hmac \
  -s 0x3000 \
  -r 23 \
  -ma 0x9830 \
  -m 0x142 \
  -e 11 \
  -t external/keys/exynos9830_crecker/crecker_stage2_tee_pubkey.bin \
  -re external/keys/exynos9830_crecker/crecker_stage2_ree_pubkey.bin

Forme abrégée lorsque sign_tool.py, fwbl1.img et les fichiers crecker_* se trouvent dans le répertoire courant :

root@kitploit:~
python3 sign_tool.py -i fwbl1.img -o fwbl1.img -k crecker_private.pem -H crecker.hmac -s 0x3000 -r 23 -ma 0x9830 -m 0x142 -e 11 -t crecker_stage2_tee_pubkey.bin -re crecker_stage2_ree_pubkey.bin

Modes d'exploitation

Exécutez les commandes depuis la racine du dépôt sauf indication contraire.

Notes sur la procédure côté appareil

Chaîne de démarrage Exynos 9830

La procédure de démarrage Exynos 9830 observée est la suivante :

Disposition des images Exynos 9830

Adresses de chargement

Identifiants de source de démarrage

Identifiants bruts de source de démarrage

Valeurs de source de démarrage

Payload de dump /mem

Remarque : le payload de dump mem.bin ne peut être utilisé que lorsqu'aucun sboot fonctionnel n'est installé.

  1. Envoyez uh.bin via Heimdall au bootloader :

    root@kitploit:~
    heimdall flash --BOOTLOADER uh.bin
    
  2. Exécutez la procédure de dump :

    root@kitploit:~
    python3 exploit/exploit.py --dump
    
  3. Examinez le dump exynos990.bootrom.bin généré.

Attribution amont

Certaines parties de l'outillage de récupération Python de ce dépôt ont été adaptées de halal-beef/hubble.

Ce projet amont est publié sous la GNU GPL v2.0, et ce dépôt conserve une licence GPL-2.0 par compatibilité. Voir LICENSE et NOTICE.md.

Le payload à clé personnalisée Exynos990 sous external/payloads/exynos990_boot_custom_key/ est basé sur le squelette de payload boot-custom-key et l'idée de flux de contrôle de VDavid003/exynos-usbdl, un fork de frederic/exynos-usbdl. Il a été considérablement réécrit et adapté pour la chaîne GET_CONFIGURATION Exynos9830 / Exynos990, et n'est pas une copie textuelle du payload amont. Comme le projet amont référencé est sous licence GNU GPL v3.0, ce payload est conservé sous GPL-3.0-only ; voir external/payloads/exynos990_boot_custom_key/LICENSE.

Crédits

Télécharger l’outil
CheminDescription
bootLoaderFiles/Binaires du bootloader, parties de bootloader découpées, images d'origine, images déchiffrées et artefacts de dump.
bootromNotes/Notes sur la ROM de démarrage, organigrammes et offsets de contexte USB.
exploit/Outillage Python, exécuteur d'exploit, scripts de découpage/fusion, assistant de construction de payload et données SoC.
exploit/extra/images/Images de bootloader fonctionnelles utilisées par les procédures d'exploit.
exploit/extra/payloads/Binaires de payload construits, copiés depuis external/payloads/.
external/Sources de payload, Makefile de construction, notes décompilées, matériel de clés partagé et outils auxiliaires.
external/keys/exynos9830_crecker/Lot de clés personnalisées Exynos9830 / Exynos990 partagé utilisé par la procédure de chargeur signé.
exynos990reverseEng/Fichiers du projet de rétro-ingénierie Exynos 990.
Commande clé 1ValeurCommande clé 2Valeur
CMD_W_ROM_SEC_BOOT_KEY10x001CMD_W_ROM_SEC_BOOT_KEY20x016
CMD_W_USE_ROM_SEC_BOOT_KEY10x002CMD_W_USE_ROM_SEC_BOOT_KEY20x017
CMD_C_ROM_SEC_BOOT_KEY10x100CMD_C_ROM_SEC_BOOT_KEY20x114
CMD_R_USE_ROM_SEC_BOOT_KEY10x101CMD_R_USE_ROM_SEC_BOOT_KEY20x115
PayloadChemin de sortieObjectif
mem.binexploit/extra/payloads/mem.binPayload de dump mémoire de la ROM de démarrage.
loader.binexploit/extra/payloads/loader.binPayload de la voie UFS utilisé par --ufs.
Exynos990_boot_custom_key.binexploit/extra/payloads/Exynos990_boot_custom_key.binPayload de chargeur signé à clé personnalisée utilisé par --signed.
ImageMatériel de clés utiliséRévision de rollback
fwbl1.imgClé privée BL1 + clés publiques Stage2 TEE/REE23
epbl.imgClé privée Stage2 TEE23
bl2.imgClé privée Stage2 REE23
lk.binClé privée Stage2 REE23
el3_mon.imgClé privée Stage2 TEE23
ldfw.imgClé privée Stage2 TEE, interne + externe23
tzsw.imgClé privée Stage2 TEE, interne + externe23
CommandeModePayload par défautNotes
python3 exploit/exploit.py --ufsVoie UFSloader.binDémarre la procédure de payload UFS.
python3 exploit/exploit.py --signedChaîne de démarrage signéeExynos990_boot_custom_key.binRe-signe le jeu d'images SBoot, envoie les images.
python3 exploit/exploit.py --dumpDump de la ROM de démarragemem.binReçoit 0x20000 octets dans exynos990.bootrom.bin.
N°Note
1Entrez en mode download.
2Créez ou mettez à jour sboot.bin avec exploit/merge.py si nécessaire.
3Utilisez la procédure signée à clé personnalisée pour atteindre le mode Crecker, un mode de type ODIN qui accepte la procédure d'image cible.
4Envoyez le nouveau sboot.bin via ODIN, Heimdall, ou un autre outil d'envoi compatible.
5Exécutez le payload UFS.
6Facultatif : installez CreckerRom pour les procédures One UI 7 et Strong Integrity.
7Facultatif : verrouillez le bootloader une fois la configuration cible terminée.
N°ÉtapeNotes
1BootROMExécution ROM initiale.
2BL1Transfert complet depuis le BootROM.
3EPBLTransfert complet depuis BL1.
4EPBLMet en place un gestionnaire SMC minimal.
5BL2EPBL charge BL2.
6BL2Transfert partiel vers BL2.
7LKBL2 utilise EPBL pour charger LK, mais LK ne s'exécute pas immédiatement.
8EL3 MonitorBL2 utilise EPBL pour charger l'EL3 Monitor.
9EL3 MonitorEPBL déchiffre l'EL3 Monitor.
10EL3 MonitorTransfert complet vers l'EL3 Monitor.
11EL3 MonitorInitialise et configure le gestionnaire SMC étendu.
12LKL'exécution saute vers LK.
13LK / EL3 MonitorLK appelle le gestionnaire SMC de l'EL3 Monitor pour charger les parties TrustZone.
14ODIN / cible personnaliséeLe démarrage continue vers ODIN ou la cible configurée.
PartieDébutFin
fwbl1.img0x00x3000
epbl.img0x30000x16000
bl2.img0x160000x82000
lk.bin0xDB0000x35B000
el3_mon.img0x35B0000x39B000
ÉtapeAdresse de chargement
BL10x02022000
EPBL0x02026000
BL20x15600000
LK0xE8000000
EL3_MONITOR0xBFE80000
ID de source _boot_deviceVoie de source de démarrage
1Voie UFS, procédure de chargement UFS partagée.
2Voie d'initialisation eMMC/SDMMC, procédure mmc_card_detect_and_init.
3Périphérique SDMMC/MMC 0, mmc_read_blocks(0, ...).
4Voie de chargement USB.
5Périphérique SDMMC/MMC 1, mmc_read_blocks(1, ...).
6Mode UFS alternatif, même procédure UFS de base que 1 avec un indicateur de mode différent.
7Voie de lecture du contrôleur brut non-MMC/UFS/USB.
0xB / 11Voie de secours USB, puis même gestionnaire USB que 4.
ID de sourceValeurSignification
10x20UFS
20x14eMMC
30x00SDMMC_CH2
4 / 0xB0x40USB
CréditContribution
Chimera ToolPremière découverte de l'exploit vers 2021-2022. Chimera fournit des capacités avancées de maintenance Exynos sur de nombreux appareils, y compris des capacités basées sur cet exploit.
CVE-2024-56426La CVE sur laquelle ce projet est basé.
Christopher WadeA signalé la CVE-2024-56426 à Samsung.
kethily-danielA fourni l'accès à l'outil utilisé pour le traçage des paquets USB et l'extraction d'échantillons.
BotchedRPRA aidé pour la recherche initiale et la création de carte2.
VDavid003A aidé à rétro-ingénierer la PoC à partir de dumps de paquets et a personnellement testé sur des appareils.
halal-beef / hubbleA fourni les dumps de paquets USB initiaux et l'analyse de la PoC pendant le cycle de recherche, le code backend utilisé par le script d'exploit, et les dispositions SoC utilisées par les scripts de découpage et de fusion.
VDavid003 / exynos-usbdlA fourni le squelette de payload à clé personnalisée GPLv3 et la procédure de référence de téléchargement USB Exynos utilisée comme base du payload à clé personnalisée Exynos990.
R0rt1z2A aidé à la création du payload ; une partie du travail était basée sur son projet, kaeru.
AntiEngineerA partagé ses connaissances ARM, des astuces et un soutien à la recherche.
AAInspiration de la vulnérabilité et première utilisation en dehors de Chimera.