Runtimes

Last updated: Aug 19, 2026


Runtime CVE detection is different from package manager dependency scanning: instead of reporting a vulnerability in one of your project's declared dependencies, it reports a vulnerability in the language or runtime itself (for example, a CVE in the Go toolchain or in the Ruby interpreter). Because of this difference, only a small subset of the ecosystems Fluid Attacks scans for dependencies also get runtime CVE reports.

The criterion

To safely report a runtime CVE, Fluid Attacks needs proof that the version it detects is the version actually running in production, not just a version the project's manifest says it is compatible with. Most manifest fields only declare compatibility, a range the code is expected to work with. They do not guarantee what gets deployed, so treating them as a runtime CVE signal would misreport vulnerabilities that may not apply.

Only two cases currently clear that bar:

  • Go: Go compiles to a static binary that embeds its own runtime. The Go version declared in go.mod is baked into the built artifact itself, so it is a genuine deployment-bound fact, not a guess.
  • Ruby on Heroku: Heroku's buildpack reads the Gemfile's ruby directive at build time and installs exactly that version. This is only true under Heroku's build flow, so Fluid Attacks gates it on a Procfile being present in the repository, the signal that a project actually deploys that way. Without a Procfile, the same directive is just a compatibility declaration, the same as every other ecosystem below.

Runtime CVE support by ecosystem

Language / ecosystemManifest fieldRuntime CVE detectionWhy
Gogo.mod Go version directiveSupportedStatic binary embeds its own runtime; a deployment-bound fact
Ruby (Bundler, on Heroku)Gemfile/Gemfile.lock ruby directiveSupported, if a Procfile is presentHeroku's buildpack installs that exact version 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; framework-dependent deployment lets the installed runtime diverge
Node.js / npm, Bunpackage.json engines.node / engines.bunNot applicableCompatibility-only declaration, same flaw as .NET
Python (Poetry, Pipenv, uv)requires-python and equivalentsNot applicableCompatibility-only declaration, same flaw as .NET
Swift (SPM)Package.swift swift-tools-versionNot applicableCompatibility-only declaration, same flaw as .NET
Dart / Flutter (pub)pubspec.yaml environment.sdkNot applicableCompatibility-only declaration, same flaw as .NET
PHP (Composer)composer.json require.phpNot applicableCompatibility-only declaration, same flaw 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 never merged to trunk; no current runtime detection

On this page