Runtimes

Last updated: Oct 26, 2026


Runtime CVE detection is different from package manager dependency scanning. Dependency scanning reports a vulnerability in a declared dependency of your project. Runtime CVE detection reports a vulnerability in the language or runtime, for example, a CVE in the Go toolchain or in the Ruby interpreter. Because of this difference, only a small number of the ecosystems that Fluid Attacks scans for dependencies also get runtime CVE reports.

The criterion

To report a runtime CVE safely, Fluid Attacks must have proof that the detected version is the version that runs in production. A version that the manifest of the project identifies as compatible is not sufficient. Most manifest fields declare only compatibility, which is a range of versions that the code must work with. These fields do not show the version that you deploy. If Fluid Attacks used them as a runtime CVE signal, it could report vulnerabilities that possibly do not apply.

At this time, only two cases give this proof:

  • Go: Go compiles to a static binary that contains its own runtime. The build puts the Go version from go.mod into the artifact. Thus, this version is a real deployment fact, not a guess.
  • Ruby on Heroku: The Heroku buildpack reads the ruby directive of the Gemfile at build time and installs the version that the directive shows. This is true only in the Heroku build flow. Thus, Fluid Attacks reports Ruby runtime CVEs only if the repository has a Procfile. This file shows that the project deploys on Heroku. Without a Procfile, the directive is only a compatibility declaration, as in all other ecosystems in the table that follows.

Runtime CVE support by ecosystem

Language / ecosystemManifest fieldRuntime CVE detectionWhy
Gogo.mod Go version directiveSupportedStatic binary contains its own runtime. This is a deployment fact
Ruby (Bundler, on Heroku)Gemfile/Gemfile.lock ruby directiveSupported, if a Procfile is presentHeroku's buildpack installs the version of the directive at build time
Ruby (Bundler, no Heroku)Gemfile/Gemfile.lock ruby directiveNot applicableCompatibility-only declaration without a Heroku deployment signal
Ruby (RubyGems)*.gemspec required_ruby_versionNot applicableA gem's declared compatibility targets its own consumers, not an application's deployment
.NET / NuGet*.csproj TargetFrameworkNot applicableCompatibility-only declaration. A framework-dependent deployment can use a different installed runtime
Node.js / npm, Bunpackage.json engines.node / engines.bunNot applicableCompatibility-only declaration, same problem as .NET
Python (Poetry, Pipenv, uv)requires-python and equivalentsNot applicableCompatibility-only declaration, same problem as .NET
Swift (SPM)Package.swift swift-tools-versionNot applicableCompatibility-only declaration, same problem as .NET
Dart / Flutter (pub)pubspec.yaml environment.sdkNot applicableCompatibility-only declaration, same problem as .NET
PHP (Composer)composer.json require.phpNot applicableCompatibility-only declaration, same problem as .NET
Yarn, pnpmN/ANot applicableLockfile formats have no runtime version field
PipN/ANot applicablerequirements.txt has no Python version field
CocoaPodsN/ANot applicableNo standardized Swift/Objective-C runtime version field in the format
Gradle, Maven, sbtN/ANot availableScoped and prototyped, but not merged to trunk. No runtime detection at this time

On this page