Safeguard
Security Guides•

Does a dependency scanner check Node, Python or the JDK itself?

Most dependency scanners read manifests and lockfiles, so the language runtime is often missing from results. Here is how to check what yours covers.

Safeguard Security Team
4 min read

Usually not by default. A dependency scanner reads manifests and lockfiles, which list libraries, not the interpreter or JDK that runs them. The runtime appears only if the scanner also reads a container image, an installed environment or a pinned version file. Check this explicitly, because a clean report can still sit on an unsupported runtime.

Why the runtime falls outside a manifest scan

A package.json or requirements.txt names the libraries you chose. Nothing in those files says which Node, Python or Java build will execute them, except an optional engines field or a version file. A scanner that only parses those files has no input about the runtime, so it cannot report on it.

This creates a quiet false negative. Your library list can be spotless while the runtime itself has reached end of life and no longer receives fixes.

Where the runtime version actually lives

PlaceWhat it tells youScanner needs to read
Dockerfile FROM lineBase image and tagImage or Dockerfile
CI configVersion used to buildPipeline files
Version pin file such as .nvmrc or .python-versionDeveloper intentThat file
Running host or containerWhat really executesImage or host inventory

These four can disagree. Developers may pin one version while production runs another. The one that matters for risk is the last row.

How to check support status

Support windows are published by the projects. The Node.js releases page explains that production applications should only use Active LTS or Maintenance LTS releases, and it lists which versions are in which phase. The Python Developer's Guide has a status of Python versions page that shows which branches still get security fixes. Use those pages as the source of truth rather than a scanner's silence.

A short routine

  1. List every runtime your services use: Node, Python, JDK, Ruby, PHP, .NET.
  2. Record the exact version actually running in production, from the image or host, not from a pin file.
  3. Compare each against the project's published support page.
  4. Put any runtime past its support window on the same remediation list as a vulnerable library.
  5. Ask your scanner vendor or review the docs to confirm whether runtimes inside images are reported.

If a runtime is inside a container image, an image scan is the usual place it shows up, because the interpreter is installed as a package or binary in the image. For related reading, see does the scanner cover containers and base images and a clean scan usually means the scanner did not look.

Try it yourself

Click through it at your own pace, or open it full screen. Look at which items are libraries and notice that none of them is the interpreter.

Safeguard offers SBOM and dependency scanning, plus a free scan at gold.safeguard.sh/scan. Whatever tool you use, confirm in a test what it reports about runtimes.

Quick check

Is an end of life runtime a vulnerability?

It is a risk rather than a single vulnerability. Once a runtime stops receiving fixes, newly found flaws stay open, so treat it as a finding to schedule.

Does pinning a version in a file prove what runs in production?

No. A pin file shows intent. Read the version from the built image or running host to know what executes.

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.