Wissen · Befundakte
Ein Keil-Build, ganz durchgesehen
Ein öffentlicher Keil-Build für einen Cortex-M4: welche Komponenten drinstecken und wo die Datei das belegt, welche gemeldete Lücke Code im Build hat, welche Härtung fehlt. Mit den Befehlen, die das nachprüfen.
- Datei
- ble_freertos_amota.axf
- Größe
- 2.503.136 Bytes
- Format
- ELF32 · ARM · EABI 5
- Ziel
- Apollo3 · Cortex-M4
- Analysiert
- 19.10.2026 · app.legacymind.de
- SHA-256
- f33f7663bbd8b3fb4da733c57b008e439265ac688438b5c637da3c890e19fd13
0Ergebnis
- 2von 6gemeldeten Lücken haben Code im BuildFreeRTOS 10.4.3 schließt beide, FreeRTOS 11.3.1 alle 6.
- 3Schutzmechanismen fehlenStack Canary, MPU, Privilegientrennung.
- 3Komponenten ohne Version im ImageArm Cordio BLE-Stack, micro-ecc, Ambiq HAL: ohne Version kein Abgleich gegen bekannte Lücken.
1Komponenten
Anhang I, Teil II Nr. 1
Sechs Komponenten, drei davon mit Version in der Datei. Jede Zeile nennt den Datei-Offset der Zeichenkette, die sie belegt.
FreeRTOS
RTOS-Kernel
10.1.1
0x1fe9c · .debug_info, nur im AXF
../../../../../third_party/FreeRTOSv10.1.1/Source/timers.cArm Cordio BLE-Stack
Bluetooth-Stack, in LegacyMind als exactle
nicht belegt
0x17f3c · FLASH, auch im BIN
../../../../../third_party/exactle/wsf/sources/port/freertos/wsf_trace.cProjektdatei: third_party/exactle; Arm Cordio r19.02 laut SDK-Readme (cordio_profile_readme.md:14). Im Image steht keine Version.
micro-ecc
Krypto-Bibliothek, in LegacyMind als uecc
nicht belegt
0x4cd18 · .debug_info, nur im AXF
../../../../../third_party/uecc/uECC.hProjektdatei: third_party/uecc. Das SDK nennt keine Version.
Ambiq HAL
Herstellertreiber, in LegacyMind als hal_ambiq
nicht belegt
0x2e14 · FLASH, auch im BIN
ERROR_CHECK_VOID am_hal_ble_initialize(0, &BLE)Projektdatei: mcu/apollo3; AmbiqSuite 2.4.2 laut VERSION.txt. Im Image steht keine Version.
Arm C-Bibliothek (armlib)
Laufzeitbibliothek, in LegacyMind als Arm C library (armlib)
5.06 update 6 (build 750)
0x1dbd5b · .comment, nur im AXF
C:\Keil_v5\ARM\ARMCC\Bin\..\lib\armlib\c_w.lArm Compiler
Toolchain
5.06
0x1fed7 · .debug_info, nur im AXF
Component: ARM Compiler 5.06 update 6 (build 750) Tool: ArmCC [4d3637]
2Schwachstellen
Anhang I, Teil I Nr. 2 a
Die Analyse meldet sechs CVEs zu FreeRTOS 10.1.1. Die Symboltabelle derselben Datei sagt, bei welchen der betroffene Code gelinkt ist: bei zwei, bei vier nicht.
Code im Build · 2
- CVE-2021-31571
CVSS 9,8 · Kritisch
Ganzzahl-Überlauf in queue.c beim Anlegen einer Queue.
Behoben in FreeRTOS 10.4.3
SymboladressexQueueGenericCreate 0x1fe85
- CVE-2021-32020
CVSS 9,8 · Kritisch
Unzureichende Grenzprüfung in der Heap-Verwaltung des Kernels.
Behoben in FreeRTOS 10.4.3
SymboladressepvPortMalloc 0x1bfb5
Code nicht im Build · 4
- CVE-2021-31572
CVSS 9,8 · Kritisch
Ganzzahl-Überlauf in stream_buffer.c beim Anlegen eines Stream-Buffers.
Behoben in FreeRTOS 10.4.3
Der Build enthält keinen Stream-Buffer: keine
StreamBuffer-Funktion in der Symboltabelle. - CVE-2024-28115
CVSS 8,8 · Hoch
Unzureichender Schutz gegen Rechteausweitung auf MPU-Ports, falls eine andere Lücke Code einschleust.
Behoben in FreeRTOS 10.6.2
Betrifft nur MPU-Ports. Der Build nutzt den Port
portable/Keil/AMapollo2und enthält keinMPU_-Symbol. - CVE-2026-77234
CVSS 8,8 · Hoch
Fehlende Eingabeprüfung lässt auf MPU-Ports eine Task ohne Rechte Code im Kernel-Kontext ausführen.
Behoben in FreeRTOS 11.3.1
Betrifft nur MPU-Ports. Der Build nutzt den Port
portable/Keil/AMapollo2und enthält keinMPU_-Symbol. - CVE-2026-77237
CVSS 6,5 · Mittel
Fehlende Typprüfung in xQueueAddToSet() lässt auf MPU-Ports eine Task ohne Rechte Kernel-Speicher lesen.
Behoben in FreeRTOS 11.3.1
Betrifft nur MPU-Ports. Der Build nutzt den Port
portable/Keil/AMapollo2und enthält keinMPU_-Symbol.
Kein Abgleich · 3
- Arm Cordio BLE-StackOhne Version im Image kein Abgleich gegen bekannte Lücken.
- micro-eccOhne Version im Image kein Abgleich gegen bekannte Lücken.
- Ambiq HALOhne Version im Image kein Abgleich gegen bekannte Lücken.
Den Abgleich mit der Symboltabelle haben wir für diese Akte mit nm gemacht; der Bericht führt heute alle sechs zur Version. CVSS wie im Bericht, Fix-Version laut NVD, keine der sechs im CISA-KEV-Katalog.
3Härtung
Anhang I, Teil I Nr. 2 k
Gemessen wie ein Mikrocontroller gemessen wird: RELRO, NX und PIE gibt es auf einem Cortex-M nicht.
Stack Canary
fehlt
Beleg
Kein
__stack_chk_guard, kein__stack_chk_failin der Symboltabelle.Was ihn einschaltet
Mit
--protect_stackübersetzen (Arm Compiler 5), bei armclang mit-fstack-protector-strong.MPU
fehlt
Beleg
Kein
MPU_-Symbol; der Build nutzt den Portportable/Keil/AMapollo2.0x20e04 · .debug_info, nur im AXF
../../../../../third_party/FreeRTOSv10.1.1/Source/portable/Keil/AMapollo2/portmacro.hWas ihn einschaltet
Den MPU-Port von FreeRTOS für Cortex-M4 verwenden und die Speicherbereiche der Tasks festlegen.
Privilegientrennung
fehlt
Beleg
Ohne MPU-Port laufen alle Tasks privilegiert; kein
xPortRaisePrivilegein der Symboltabelle.Was ihn einschaltet
Mit dem MPU-Port Tasks ohne Rechte anlegen (
xTaskCreateRestricted).
4SBOM
Anhang I, Teil II Nr. 1
Die Stückliste als CycloneDX 1.6, so wie sie aus der App kommt.
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"serialNumber": "urn:uuid:69d14c95-045e-4456-a0d0-c4309e7835c6",
"metadata": {
"component": {
"type": "firmware",
"name": "ble_freertos_amota.axf"
}
},
"components": [
{
"type": "library",
"name": "FreeRTOS",
"version": "10.1.1",
"purl": "pkg:generic/FreeRTOS@10.1.1",
"cpe": "cpe:2.3:a:amazon:amazon_web_services_freertos:10.1.1:*:*:*:*:*:*:*"
},
{
"type": "library",
"name": "Arm C library (armlib)",
"version": "5.06 update 6 (build 750)",
"purl": "pkg:generic/Arm%20C%20library%20(armlib)@5.06%20update%206%20(build%20750)"
},
{
"type": "application",
"name": "arm compiler",
"version": "5.06",
"purl": "pkg:generic/arm%20compiler@5.06",
"cpe": "cpe:2.3:a:arm:arm_compiler:5.06:*:*:*:*:*:*:*"
},
{
"type": "library",
"name": "exactle",
"purl": "pkg:generic/exactle"
},
{
"type": "library",
"name": "hal_ambiq",
"purl": "pkg:generic/hal_ambiq"
},
{
"type": "library",
"name": "uecc",
"purl": "pkg:generic/uecc"
}
]
}5Nachprüfen
Drei Befehle wiederholen die Akte auf der Datei aus der Quelle oben: die Prüfsumme, die Datei-Offsets mit strings, die Symboladressen mit nm. Darüber die Abschnitte der Datei, damit jeder Offset seinen Ort hat.
Abschnitt Offset Größe im BIN
FLASH 0x34 0x17fb8 ja
SRAM 0x17fec 0x954 ja
.debug_abbrev 0x18940 0x5c4 nein
.debug_frame 0x18f04 0x6f8c nein
.debug_info 0x1fe90 0xe68fc nein
.debug_line 0x10678c 0x366e4 nein
.debug_loc 0x13ce70 0x15a40 nein
.debug_macinfo 0x1528b0 0x60590 nein
.debug_pubnames 0x1b2e40 0x8122 nein
.symtab 0x1baf64 0x10f40 nein
.strtab 0x1cbea4 0xfd20 nein
.note 0x1dbbc4 0x1c nein
.comment 0x1dbbe0 0x872cc nein
.shstrtab 0x262eac 0x94 neinsha256sum ble_freertos_amota.axff33f7663bbd8b3fb4da733c57b008e439265ac688438b5c637da3c890e19fd13 ble_freertos_amota.axffor s in "FreeRTOSv10.1.1" "third_party/exactle/" "third_party/uecc/" "am_hal_ble_initialize" "armlib\\c_w.l" "Component: ARM Compiler 5.06"; do strings -a -t x ble_freertos_amota.axf | grep -m1 -F "$s"; done 1fe9c ../../../../../third_party/FreeRTOSv10.1.1/Source/timers.c
17f3c ../../../../../third_party/exactle/wsf/sources/port/freertos/wsf_trace.c
4cd18 ../../../../../third_party/uecc/uECC.h
2e14 ERROR_CHECK_VOID am_hal_ble_initialize(0, &BLE)
1dbd5b C:\Keil_v5\ARM\ARMCC\Bin\..\lib\armlib\c_w.l
1fed7 Component: ARM Compiler 5.06 update 6 (build 750) Tool: ArmCC [4d3637]nm ble_freertos_amota.axf | grep -E "xQueueGenericCreate|pvPortMalloc|StreamBuffer|MPU_|__stack_chk|xPortRaisePrivilege|xTaskCreateRestricted"0001bfb5 T pvPortMalloc
0001fe85 T xQueueGenericCreateAusgeführt mit GNU nm (GNU Binutils for Ubuntu) 2.42 und GNU strings auf der Datei mit dem SHA-256 oben, am 20.10.2026.
Fragen zur Akte
- Warum steht bei drei Komponenten keine Version?
- Für Arm Cordio BLE-Stack, micro-ecc, Ambiq HAL stehen in der Datei Quellpfade und Assert-Texte, aber keine Versionsnummer. Die Akte lässt das Feld leer, statt sie aus dem SDK zu übernehmen.
- Warum nur Lücken zu FreeRTOS?
- Abgleichen lässt sich nur, was eine Version trägt. Für Compiler und Laufzeitbibliothek meldet die Analyse in diesen Versionen keine bekannten Lücken; die drei Bibliotheken ohne Version bleiben ohne Abgleich.
- Welche Datei sollen wir hochladen, das AXF oder das BIN?
- Das AXF, ELF oder OUT des Builds. In dieser Akte stehen FreeRTOS 10.1.1 und Arm C-Bibliothek 5.06 update 6 (build 750) und Arm Compiler 5.06 nur in Abschnitten, die ins BIN nicht übernommen werden (.debug_info, .comment); ein BIN allein liefert nur, was seine Bytes selbst belegen. Laden Sie beide desselben Builds hoch, bekommt das BIN die Komponenten des AXF.
- Brauchen Sie unseren Quellcode oder unser Build-System?
- Nein. Die Analyse läuft auf der Datei, die Ihr Build erzeugt, oder auf dem Image, das Ihr Kunde bekommt. Kein Repository, kein Zugang zu Ihrer Toolchain, kein Zugriff auf das Gerät.
- Was heißt das für die Meldepflicht nach Art. 14?
- Keine der 6 gemeldeten Lücken steht im CISA-KEV-Katalog der aktiv ausgenutzten. Wird eine davon ausgenutzt, ist die erste Frage der 24-Stunden-Frist, welche ausgelieferten Produkte FreeRTOS 10.1.1 enthalten. Mit einer Stückliste je Release ist das eine Suche. Melden müssen Sie selbst.
Dieselbe Durchsicht für Ihren Build
Im kostenfreien CRA-Readiness-Check analysieren wir eine Datei Ihres Builds. Bericht und SBOM bekommen Sie binnen drei Werktagen.