Node.js < 18.20.2, 19.x < 20.12.2, 21.x < 21.7.3 Command Injection Vulnerability (BatBadBut) - Windows
🗓️ 11 Apr 2024 00:00:00Reported by Copyright (C) 2024 Greenbone AGType
openvas🔗 plugins.openvas.org👁 36 Views
10
# SPDX-FileCopyrightText: 2024 Greenbone AG
# Some text descriptions might be excerpted from (a) referenced
# source(s), and are Copyright (C) by the respective right holder(s).
#
# SPDX-License-Identifier: GPL-2.0-only
CPE = "cpe:/a:nodejs:node.js";
if(description)
{
script_oid("1.3.6.1.4.1.25623.1.0.114480");
script_version("2025-11-19T05:40:23+0000");
script_tag(name:"last_modification", value:"2025-11-19 05:40:23 +0000 (Wed, 19 Nov 2025)");
script_tag(name:"creation_date", value:"2024-04-11 06:51:41 +0000 (Thu, 11 Apr 2024)");
script_tag(name:"cvss_base", value:"10.0");
script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:C/I:C/A:C");
script_tag(name:"severity_vector", value:"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H");
script_tag(name:"severity_origin", value:"NVD");
script_tag(name:"severity_date", value:"2024-04-10 16:15:16 +0000 (Wed, 10 Apr 2024)");
# nb: CVE-2024-27980 is the programming language specific issue while CVE-2024-3566 is the CVE for
# / about the underlying problem so both have been attached here.
script_cve_id("CVE-2024-27980", "CVE-2024-3566");
script_tag(name:"qod_type", value:"registry");
script_tag(name:"solution_type", value:"VendorFix");
script_name("Node.js < 18.20.2, 19.x < 20.12.2, 21.x < 21.7.3 Command Injection Vulnerability (BatBadBut) - Windows");
script_category(ACT_GATHER_INFO);
script_copyright("Copyright (C) 2024 Greenbone AG");
script_family("Web application abuses");
script_dependencies("gb_nodejs_smb_login_detect.nasl");
script_mandatory_keys("nodejs/smb-login/detected");
script_tag(name:"summary", value:"Node.js is prone to a command injection vulnerability on
Windows dubbed 'BatBadBut'.");
script_tag(name:"vuldetect", value:"Checks if a vulnerable version is present on the target host.");
script_tag(name:"insight", value:"Due to the improper handling of batch files in
child_process.spawn / child_process.spawnSync, a malicious command line argument can inject
arbitrary commands and achieve code execution even if the shell option is not enabled.");
script_tag(name:"affected", value:"Node.js versions prior to 18.20.2, starting from 19.x and prior
to 20.12.2 and 21.x prior to 21.7.3 on Windows.
Vendor note: It's important to note that End-of-Life versions are always affected when a security
release occurs.");
script_tag(name:"solution", value:"Update to version 18.20.2, 20.12.2, 21.7.3 or later.");
script_xref(name:"URL", value:"https://nodejs.org/en/blog/vulnerability/april-2024-security-releases-2/");
script_xref(name:"URL", value:"https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V21.md#2024-04-10-version-2173-current-rafaelgss");
script_xref(name:"URL", value:"https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md#2024-04-10-version-20122-iron-lts-rafaelgss");
script_xref(name:"URL", value:"https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V18.md#18.20.2");
script_xref(name:"URL", value:"https://www.kb.cert.org/vuls/id/123335");
script_xref(name:"URL", value:"https://flatt.tech/research/posts/batbadbut-you-cant-securely-execute-commands-on-windows/");
script_xref(name:"URL", value:"https://learn.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way");
exit(0);
}
include("host_details.inc");
include("version_func.inc");
if (isnull(port = get_app_port(cpe: CPE)))
exit(0);
if (!infos = get_app_version_and_location(cpe: CPE, port: port, exit_no_version: TRUE))
exit(0);
version = infos["version"];
location = infos["location"];
# nb: From the Jul 2024 advisory:
#
# > It's important to note that End-of-Life versions are always affected when a security release occurs
if (version_is_less(version: version, test_version: "18.20.2")) {
report = report_fixed_ver(installed_version: version, fixed_version: "18.20.2", install_path: location);
security_message(port: port, data: report);
exit(0);
}
if (version_in_range_exclusive(version: version, test_version_lo: "19.0", test_version_up: "20.12.2")) {
report = report_fixed_ver(installed_version: version, fixed_version: "20.12.2", install_path: location);
security_message(port: port, data: report);
exit(0);
}
if (version_in_range_exclusive(version: version, test_version_lo: "21.0", test_version_up: "21.7.3")) {
report = report_fixed_ver(installed_version: version, fixed_version: "21.7.3", install_path: location);
security_message(port: port, data: report);
exit(0);
}
exit(99);
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation
19 Nov 2025 00:00Current
8.3High risk
Vulners AI Score8.3
CVSS 38.1
CVSS 3.19.8
EPSS0.06883
SSVC