OWASP Firmware Security Testing Methodology (FSTM), explained

Last updated:

Key takeaways

  • Stage 5 directs testers to search extracted filesystem contents for "legacy insecure network daemons such as telnetd...
  • Stage 9 is explicit that exploit development is a distinct skill from vulnerability discovery: "Developing exploit code requires programming experience in lower level languages (e.g.
  • This guide summarises the public OWASP FSTM documentation (CC BY-SA 4.0); it does not constitute legal or compliance advice.

The OWASP Firmware Security Testing Methodology (FSTM) is a free, nine-stage testing playbook for assessing the security of embedded device firmware, published by the OWASP Internet of Things project under the Creative Commons Attribution Share Alike 4.0 International licence. First released in November 2019 by project lead Aaron Guzman (@scriptingxss), FSTM's own overview states it "comprises nine structured stages designed to help security researchers, software developers, consultants, hobbyists, and information security professionals conduct comprehensive firmware security assessments." Rather than a list of controls a device must have, FSTM is a sequence of concrete testing steps, with named tools and example commands, for going from a firmware image to evidence of exploitable vulnerabilities.

The nine stages

Stage Name What it covers
1 Information gathering and reconnaissance Acquire technical and documentation details — CPU architecture, bootloader, schematics, datasheets, source location, third-party components, licences, changelogs, FCC IDs, threat models, prior pentest reports
2 Obtaining firmware Acquire the firmware image: from the vendor/manufacturer, update-server MITM, cloud storage exposure, hardware extraction (UART/JTAG), or chip removal as a last resort
3 Analyzing firmware Identify file characteristics, platform and possible encryption (via entropy analysis) using file, strings, binwalk and similar utilities
4 Extracting the filesystem Carve and unpack filesystem contents (squashfs, ubifs, romfs, jffs2, cramfs, etc.) for review, typically with binwalk -ev
5 Analyzing filesystem contents Statically analyze extracted configuration files and binaries for hardcoded credentials, insecure daemons, update-server endpoints and command-injection-prone startup scripts
6 Emulating firmware Emulate standalone binaries (user-mode) or the full firmware image, via QEMU, a real device, or a matching virtual machine
7 Dynamic analysis Test the running firmware/application interfaces — web/API testing, fuzzing, bootloader and firmware-integrity tampering
8 Runtime analysis Attach a debugger (gdb-multiarch) to a running process to find overflows and crashes in compiled binaries
9 Binary Exploitation Build a working proof-of-concept for an identified vulnerability, using techniques such as return-oriented programming (ROP) where runtime protections are present

FSTM's own note on sequencing: "Consider visiting the OWASP Internet of Things Project page and GitHub repository for the latest methodology updates and forthcoming project releases," signalling the document is actively maintained rather than frozen at its 2019 release — the current text adds static-analysis tooling (Cppcheck, Flawfinder, Clang-Tidy, CodeQL, Semgrep) and a Software Bill of Materials section referencing CISA's minimum SBOM elements, both absent from the original release.

Obtaining and extracting firmware (Stages 2-4)

Stage 2 lists acquisition methods in roughly increasing order of difficulty: directly from the manufacturer or vendor support site; via man-in-the-middle capture of an update; through exposed cloud storage (with an explicit caveat to "follow local laws and regulations when downloading data from exposed cloud provider storage services"); from hardware debug interfaces such as UART or JTAG; or, as a last resort, by desoldering the flash chip. FSTM recommends requesting both debug and release builds "to maximize testing coverage... in the event debug code or functionality is compiled within a release." Stage 4 then carves the extracted image's filesystem with binwalk -ev, falling back to manual offset carving with dd when binwalk's signature database does not recognize the filesystem's magic bytes — the methodology walks through squashfs, cpio, jffs2 and ubifs extraction commands as worked examples.

Static and dynamic analysis (Stages 5-8)

Stage 5 directs testers to search extracted filesystem contents for "legacy insecure network daemons such as telnetd... hardcoded credentials (usernames, passwords, API keys, SSH keys, and backdoor variants)... hardcoded API endpoints... [and] startup scripts for remote code execution," using tools such as firmwalker for pattern-based scanning and FACT or EMBA for automated component identification, CVE correlation and binary-mitigation detection (NX, DEP, ASLR, stack canaries, RELRO). From Stage 6 onward the testing shifts from static inspection to a running target: Stage 7's dynamic analysis covers embedded web-application testing (default credentials, directory traversal, injection in diagnostic pages), bootloader tampering (interrupting boot to reach a U-Boot shell, modifying bootargs to add init=/bin/sh), and firmware-integrity testing (uploading a custom image to check signature verification); Stage 8's runtime analysis attaches a debugger to the emulated or live binary to set breakpoints on functions like memcpy and strcmp and fuzz for overflows.

Binary exploitation and how FSTM fits with ISTG/ISVS

Stage 9 is explicit that exploit development is a distinct skill from vulnerability discovery: "Developing exploit code requires programming experience in lower level languages (e.g. ASM, C/C++, shellcode, etc.) as well as background within the particular target architecture," and names return-oriented programming as the technique needed when NX/DEP/ASLR protections — uncommon in embedded systems, per FSTM's own observation, but not absent — block a straightforward shellcode injection.

FSTM is deliberately scoped to the firmware image alone. The methodology states its complementary documents cover the rest of a device's attack surface: the OWASP IoT Security Testing Guide (ISTG) "provides additional test cases for hardware interfaces, wireless protocols, network services, and user interfaces," while the OWASP IoT Security Verification Standard (ISVS) "defines WHAT security controls must be implemented, while FSTM defines HOW to test firmware components." OWASP's own recommendation is to use the three together — ISVS as the requirements checklist, ISTG for the device's broader surface, FSTM for the firmware binary — rather than treating any one as sufficient on its own. OWASP also maintains IoTGoat, a deliberately vulnerable firmware image used in FSTM's own worked examples, as practice material for applying the methodology end to end.

Why this matters for device and firmware makers

FSTM is a testing methodology, not a regulatory control — no regulation known to us names FSTM itself as a required step, so any claim that completing an FSTM-style assessment alone satisfies the EU Cyber Resilience Act, RED/EN 18031 or similar regimes should be treated as to be confirmed rather than assumed. Where it is directly useful is as a structured way to generate the kind of technical evidence — hardcoded-credential findings, confirmed memory-corruption or command-injection vulnerabilities, exploitability proof — that a vulnerability-handling process or secure-development lifecycle narrative does need to produce. A firmware SBOM answers what components are inside an image; an FSTM-style assessment answers whether those components, and the glue code around them, are actually exploitable.

This guide summarises the public OWASP FSTM documentation (CC BY-SA 4.0); it does not constitute legal or compliance advice.

Sources

  1. OWASP Firmware Security Testing Methodology (FSTM) — scriptingxss.gitbook.io
  2. GitHub: scriptingxss/owasp-fstm (source repository, CC BY-SA 4.0 licence file)
  3. OWASP: Internet of Things project page (project home, licence, related resources)
  4. OWASP IoT Security Testing Guide (ISTG)
  5. GitHub: OWASP/IoT-Security-Verification-Standard-ISVS

Frequently asked questions

What is the OWASP Firmware Security Testing Methodology (FSTM)?

FSTM is an OWASP Internet of Things project document that, per its own overview, "comprises nine structured stages designed to help security researchers, software developers, consultants, hobbyists, and information security professionals conduct comprehensive firmware security assessments." It was first released under OWASP in November 2019 by Aaron Guzman (@scriptingxss), who leads the project, and is published under the Creative Commons Attribution Share Alike 4.0 International licence. Unlike a compliance standard, FSTM is a testing playbook: a sequence of stages, with concrete tool commands, for examining a firmware image rather than a checklist of controls a product must have.

What are the nine stages of FSTM?

1) Information gathering and reconnaissance; 2) Obtaining firmware; 3) Analyzing firmware; 4) Extracting the filesystem; 5) Analyzing filesystem contents; 6) Emulating firmware; 7) Dynamic analysis; 8) Runtime analysis; 9) Binary Exploitation. The methodology's own description frames the arc as: "Acquire all relative technical and documentation details... Attain firmware... Examine the target firmware's characteristics... Carve filesystem contents... Statically analyze extracted filesystem configuration files and binaries for vulnerabilities... Emulate firmware files and components... Perform dynamic security testing... Analyze compiled binaries during device runtime... Exploit identified vulnerabilities discovered in previous stages to attain root and/or code execution."

How does FSTM relate to OWASP's ISTG and ISVS?

FSTM documents its own place in OWASP's wider IoT work directly: this firmware-specific methodology "complements the OWASP IoT Security Testing Guide (ISTG), which provides additional test cases for hardware interfaces, wireless protocols, network services, and user interfaces," while "the OWASP IoT Security Verification Standard (ISVS) defines WHAT security controls must be implemented, while FSTM defines HOW to test firmware components." The guidance is to use all three together: ISVS as the control checklist, ISTG for the device's non-firmware attack surface, and FSTM for the firmware image itself.

What tools does FSTM reference for each stage?

Named tools vary by stage: binwalk for identifying and carving firmware filesystems (Stage 3-4); firmwalker, Cppcheck, Flawfinder, Clang-Tidy, CodeQL and Semgrep for static analysis of extracted filesystem contents and source (Stage 5); QEMU-based partial or full-system emulation (Stage 6); OWASP ZAP, Burp Suite, Commix, AFL, Mutiny, boofuzz, kitty, Nmap, NCrack and Metasploit for dynamic testing (Stage 7); gdb-multiarch for attaching to running binaries (Stage 8); and ROPGadget for building exploit chains against identified vulnerabilities (Stage 9). FSTM also names FACT and EMBA as combined automated-analysis frameworks spanning extraction through dynamic analysis.

Does passing FSTM satisfy a regulation like the Cyber Resilience Act?

No. FSTM is an OWASP testing methodology, not a named control in the EU Cyber Resilience Act, RED/EN 18031 or any other regulation known to us as of this guide's publication; treat any claim equating an FSTM-based assessment with regulatory conformity as to be confirmed, not assumed. What FSTM is useful for is structuring the technical testing work (and resulting evidence) that can feed a vulnerability-handling or secure-development narrative a regulation does require.

More guides

OWASP Firmware Security Testing Methodology (FSTM), explained