Safeguard
Supply Chain•

How do you find end-of-life components in an SBOM?

Match each SBOM component and version to a support calendar. Here are the steps, a script outline, and what an SBOM cannot tell you on its own.

Safeguard Security Team
4 min read

To find end-of-life components in an SBOM, list each component and version, map each to a product and release cycle, then compare that cycle to a support calendar and flag any past its end date. An SBOM gives you the inventory. The calendar comes from a separate source.

What an SBOM does and does not hold

An SBOM, in formats such as CycloneDX and SPDX, is an inventory of software components with their versions and relationships. CycloneDX describes it as covering first party and third party libraries with versions and hierarchy.

It does not carry lifecycle dates. Whether node 20.11.0 is supported depends on facts that live outside the file. So you join two datasets: your components and a calendar.

Step by step

  1. Generate an SBOM that includes runtimes and operating system packages, not just application libraries. Scan the built artifact or image.
  2. Normalise names. A component may appear as node, nodejs or a purl such as pkg:generic/node. Pick one name per product.
  3. Reduce versions to the release cycle that vendors use. 3.9.25 becomes cycle 3.9. 20.20.2 becomes 20.
  4. Look up the end date for each cycle. The endoflife.date site provides a free JSON API with one document per product.
  5. Flag items with an end date in the past, and a second group within 90 days.
  6. Add the owner and the service name, so each flag has someone to act on it.

A short script outline

curl -s https://endoflife.date/api/python.json |
  python3 -c "import sys,json; [print(r['cycle'], r['eol']) for r in json.load(sys.stdin)[:8]]"

That prints each Python cycle with its end date. Repeat per product, then compare against dates from your SBOM. Keep the lookup output in a file so reviews are repeatable.

Where this approach falls short

GapWhy it happensWhat to do
Libraries with no formal calendarMost packages have no EOL dateCheck maintenance signals instead
Vendor patched buildsA distro may backport fixes to an older versionCheck the vendor's advisory page
Bundled copiesA jar or binary may embed another componentScan inside archives
Wrong cycle mappingNames and versions varyReview the unmatched list by hand

Treat the calendar as a pointer, not proof. Third party summaries can differ from vendor pages. When we compared the Node.js release page with a summary site, the exact day for Node.js 20 differed. Both marked it ended. Confirm the date on the vendor page for anything you will escalate.

Try it yourself

Open the demo and look at how each component and its version appears in the inventory, since that is the list you would compare against a calendar.

Click through it at your own pace, or open it full screen.

Quick check

Can I get EOL data from the SBOM file itself?

No. Lifecycle dates are not part of standard SBOM fields. You join the SBOM to a calendar.

How often should I rerun the check?

On every build for new findings, and on a schedule such as weekly, since support dates are revised.

Where Safeguard fits

Safeguard's SBOM and dependency scanning produces the component inventory, and you can run the free scan to see the list for one repository.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.