A Puppet install potentially affected by a symlink file overwrite vulnerability
Reporter | Title | Published | Views | Family All 34 |
---|---|---|---|---|
![]() | Debian DSA-2831-1 : puppet - insecure temporary files | 2 Jan 201400:00 | – | nessus |
![]() | Ubuntu 12.04 LTS / 12.10 / 13.04 / 13.10 : puppet vulnerability (USN-2077-1) | 7 Jan 201400:00 | – | nessus |
![]() | Mandriva Linux Security Advisory : puppet (MDVSA-2014:040) | 19 Feb 201400:00 | – | nessus |
![]() | Amazon Linux AMI : puppet (ALAS-2014-288) | 5 Feb 201400:00 | – | nessus |
![]() | Fedora 20 : puppet-3.4.2-1.fc20 (2014-0825) | 24 Jan 201400:00 | – | nessus |
![]() | Fedora 19 : puppet-3.4.2-1.fc19 (2014-0850) | 24 Jan 201400:00 | – | nessus |
![]() | SuSE 11.3 Security Update : puppet (SAT Patch Number 9472) | 9 Jul 201400:00 | – | nessus |
![]() | Puppet Enterprise 3.x < 3.1.1 Multiple Vulnerabilities | 21 Mar 201400:00 | – | nessus |
![]() | Puppet vulnerability | 6 Jan 201400:00 | – | ubuntu |
![]() | Low: puppet | 3 Feb 201415:28 | – | amazon |
#%NASL_MIN_LEVEL 70300
#
# (C) Tenable Network Security, Inc.
#
include('deprecated_nasl_level.inc');
include('compat.inc');
if (description)
{
script_id(72151);
script_version("1.5");
script_set_attribute(attribute:"plugin_modification_date", value:"2021/01/19");
script_cve_id("CVE-2013-4969");
script_bugtraq_id(64552);
script_name(english:"Puppet Symlink File Overwrite");
script_summary(english:"Checks puppet version");
script_set_attribute(
attribute:"synopsis",
value:
"A web application on the remote host is potentially affected by a file
overwrite vulnerability."
);
script_set_attribute(
attribute:"description",
value:
"According to its self-reported version number, the Puppet install on
the remote host is potentially affected by an error related to temporary
files and their use. A local attacker could potentially use a symlink
attack to overwrite arbitrary files."
);
script_set_attribute(attribute:"see_also", value:"https://puppet.com/security/cve/cve-2013-4969");
script_set_attribute(attribute:"solution", value:
"Upgrade to Puppet 3.3.3 / 3.4.1 or Puppet Enterprise 2.8.4 / 3.1.1 or
later.");
script_set_cvss_base_vector("CVSS2#AV:L/AC:L/Au:N/C:N/I:P/A:N");
script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
script_set_attribute(attribute:"exploitability_ease", value:"No exploit is required");
script_set_attribute(attribute:"exploit_available", value:"false");
script_set_attribute(attribute:"vuln_publication_date", value:"2013/12/26");
script_set_attribute(attribute:"patch_publication_date", value:"2013/12/26");
script_set_attribute(attribute:"plugin_publication_date", value:"2014/01/27");
script_set_attribute(attribute:"plugin_type", value:"remote");
script_set_attribute(attribute:"cpe", value:"cpe:/a:puppetlabs:puppet");
script_end_attributes();
script_category(ACT_GATHER_INFO);
script_family(english:"CGI abuses");
script_copyright(english:"This script is Copyright (C) 2014-2021 Tenable Network Security, Inc.");
script_dependencies("puppet_rest_detect.nasl");
script_require_keys("puppet/rest_port");
exit(0);
}
include("audit.inc");
include("global_settings.inc");
include("misc_func.inc");
include("http.inc");
##
# checks if the given version falls between the given bounds, and
# generates plugin output if it does
#
# @anonparam ver version to check
# @anonparam fix first fixed version
# @anonparam min_ver the lowest/earliest vulnerable version, relative to 'fix' (optional)
#
# @return plugin output if 'ver' is vulnerable relative to 'fix' and/or 'min_ver',
# NULL otherwise
##
function _check_version(enterprise)
{
local_var ver, fix, min_ver, major_ver, report;
ver = _FCT_ANON_ARGS[0];
fix = _FCT_ANON_ARGS[1];
min_ver = _FCT_ANON_ARGS[2];
if (
# no lower bound
(isnull(min_ver) &&
ver_compare(ver:ver, fix:fix, strict:FALSE) < 0) ||
# lower bound
(!isnull(min_ver) &&
ver_compare(ver:ver, fix:fix, strict:FALSE) < 0 &&
ver_compare(ver:ver, fix:min_ver, strict:FALSE) >= 0)
)
{
if (enterprise)
{
report =
'\n Installed version : Puppet Enterprise ' + ver +
'\n Fixed version : Puppet Enterprise ' + fix + '\n';
}
else
{
report =
'\n Installed version : Puppet Open Source ' + ver +
'\n Fixed version : Puppet Open Source ' + fix + '\n';
}
}
else report = NULL;
return report;
}
port = get_kb_item_or_exit('puppet/rest_port');
ver = get_kb_item_or_exit('puppet/' + port + '/version');
report = NULL;
vuln = FALSE;
if ('Enterprise' >< ver)
{
# convert something like
# 2.7.19 (Puppet Enterprise 2.7.0)
# to
# 2.7.0
match = eregmatch(string:ver, pattern:"Enterprise ([0-9.]+)\)");
if (isnull(match)) audit(AUDIT_UNKNOWN_WEB_APP_VER, 'Puppet Enterprise', build_url(port:port));
ver = match[1];
# Resolved in Puppet Enterprise 2.8.4 and 3.1.1
if (
(report = _check_version(ver, '2.8.4', enterprise:TRUE)) ||
(report = _check_version(ver, '3.1.1', '3.1', enterprise:TRUE))
) vuln = TRUE;
}
else
{
# Do not run against open source unless scan is paranoid
if (report_paranoia < 2) audit(AUDIT_PARANOID);
# sanity check - make sure the version doesn't include letters or anything else unexpected
match = eregmatch(string:ver, pattern:"^([0-9.]+)$");
if (isnull(match)) audit(AUDIT_NONNUMERIC_VER, 'Puppet', port, ver);
ver = match[1];
# Resolved in Puppet 3.3.3, 3.4.1
if (
(report = _check_version(ver, '3.3.3')) ||
(report = _check_version(ver, '3.4.1', '3.4'))
) vuln = TRUE;
}
if (!vuln) audit(AUDIT_LISTEN_NOT_VULN, 'Puppet', port, ver);
if (report_verbosity > 0) security_note(port:port, extra:report);
else security_note(port);
Transform Your Security Services
Elevate your offerings with Vulners' advanced Vulnerability Intelligence. Contact us for a demo and discover the difference comprehensive, actionable intelligence can make in your security strategy.
Book a live demo