Build1 distinct publisher3 min readUpdated
You do not need a vendor's source tree to inventory what is running inside a shipped device. You do need to know that a version match is a lead, and that both known failure modes inflate the hit list.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The reason the version-banner pass is worth institutionalising has little to do with cleverness. It needs no cooperation from the vendor. Banners in binaries like busybox, openssl, dropbear, lighttpd and zlib usually survive stripping, because the program prints or logs them at runtime and they are compiled-in constants rather than debug metadata [6]. The party with the least leverage in an embedded supply chain, the buyer holding a .bin file and no source tree, can therefore still produce a component inventory. That is a procurement capability wearing a security label.
Where it gets uncomfortable is the direction of the errors. The source names two ways a version match misleads: a vendor can backport a security fix without bumping the version string [9], and embedded builds routinely compile out whole code paths, such as a protocol handler that is never enabled, to save flash [12]. Both produce a match with nothing behind it. So the characteristic failure of this workflow is over-counting, not under-counting [1]. A scanner run on its own yields a hit list, and turning that into a findings list means confirming in the disassembly that the vulnerable path is compiled in and reachable [2]. Anyone treating CVE-bin-tool output as a report has skipped the step that makes it defensible [8][12].
The cost is not evenly spread across the image. Userspace is close to automated: unpack with binwalk, which scans for magic bytes including SquashFS, CramFS, JFFS2, gzip streams and kernel headers, and whose extraction mode gives you a filesystem tree rather than a blob [3]. Then grep the strings, then match against a local mirror of NVD-sourced data [8]. Kernel modules and object files break that chain, because they generally carry no human-readable banner [10]. What you get instead is vermagic, via modinfo or by reading the .modinfo section with readelf, which pins the kernel version and config the module was built against and narrows which kernel-side CVEs are even in play [10]. Past that the fallback is pulling the module into Ghidra or radare2 and comparing exported symbols against a known-vulnerable version of the same driver [11]. That is analyst hours per module, and it is where the budget for firmware review actually goes.
Hash-matching binaries against vulnerable-binary databases would be cheaper and mostly does not work, because vendors relink, strip and sometimes patch [5]. Which leaves the unglamorous grep as the highest-signal move in the whole sequence, by the author's own account [7].
The honest framing here is the author's: none of this is fast, and auditing source you can read is an easier problem [13]. But the thing being checked is not whether the device has a novel bug. It is whether the vendor ever patched an old one, and the usual answer is an OpenSSL or BusyBox build from five years ago that nobody was tracking [2][1]. That is a question with a bounded cost and a repeatable answer, which is the definition of an intake step rather than a research project.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
CVE-bin-tool is not perfect: a vendor can backport a fix without bumping the version string.
A version match is a lead, not a finding: the step most often skipped is confirming the vulnerable code path is actually compiled in and reachable, and embedded builds compile out entire code paths, such as a protocol handler that is never enabled, to save flash space.
Checking a closed-source firmware image for known CVEs is a different problem from auditing your own codebase: you are not hunting a new bug, you are checking for old ones the vendor never patched.
In practice the more common finding in embedded and IoT firmware work is not a novel zero-day but a five-year-old OpenSSL or BusyBox build nobody was tracking.
binwalk is the first step: it scans a firmware image for known magic bytes including SquashFS, CramFS, JFFS2, gzip streams and kernel headers, and its extraction mode produces the actual filesystem tree instead of one opaque blob.
Most consumer and SOHO firmware is a bootloader plus a compressed filesystem.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Coherent single-practitioner account, no external corroboration
Every claim rests on one dev.to article by one author. The technical mechanisms are specific and internally consistent — why compiled-in version constants survive stripping, why hash matching fails against relinked vendor builds, what vermagic tells you about a module — and the piece names its own limits. But there is no second publisher, no dataset, no sample of images tested, and no measured accuracy for the fingerprint step the author calls highest-signal, so the evidence is credible method description rather than verified result.
No adoption data in cluster
The article references tools (binwalk, CVE-bin-tool, Ghidra, radare2, modinfo, readelf) but supplies no releases, versions, download or usage figures, deployment accounts, benchmark results, or named organizations running this workflow. Nothing in the supplied material supports an adoption estimate, and none may be inferred from the tools merely being mentioned.
Slightly understated relative to its own claims
The framing is unusually restrained for the genre: it rejects 'run a scanner and done', concedes source-available auditing is easier and that the workflow is slow, flags CVE-bin-tool's backport blind spot, and insists a version match is only a lead. The two named failure modes both inflate hit lists, so the piece is warning against over-counting rather than promoting a capability. The small negative rather than zero reflects that its practical guidance is presented more cautiously than the underlying method warrants; it is not lower because the single-source evidence base also cannot bear a stronger claim.
Low commercial stake; community post on free tooling
The post appears on a developer community platform and recommends only freely available tools, none of which it claims authorship of or affiliation with, and it declines to sell a scan-and-done story. Residual incentive is the ordinary reputational one of practitioner content — the author asserts personal expertise ('the single highest-signal step') without disclosing engagements or data. No sponsorship, vendor relationship or paid product is disclosed in the supplied material, so this reflects only what the source shows.
Moderate: claims are clear, sourcing is narrow
Confidence is capped by the single-publisher, single-article base and the absence of any adoption or accuracy measurement. It is not lower because the claims are unambiguous, mechanistically explained, self-limiting, and of a kind (tool behavior and triage practice) that one careful practitioner account can reasonably establish.
build
Every viewer hits your HLS key endpoint in the same second, and almost nobody tests it1 distinct publisher
build
A year of green backups hid 7 of 10 missing Android signing keys1 distinct publisher
build
Buildroot's two-command ARM image, and the directory that will brick your board1 distinct publisher
build
Fabricated SQLite CVEs cleared NVD, CISA ADP and Red Hat before anyone ran the code1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 22, 2026