Vulnerabilities > CVE-2014-3250 - Improper Certificate Validation vulnerability in multiple products

047910
CVSS 4.0 - MEDIUM
Attack vector
NETWORK
Attack complexity
LOW
Privileges required
SINGLE
Confidentiality impact
PARTIAL
Integrity impact
NONE
Availability impact
NONE
network
low complexity
puppet
apache
redhat
CWE-295
nessus

Summary

The default vhost configuration file in Puppet before 3.6.2 does not include the SSLCARevocationCheck directive, which might allow remote attackers to obtain sensitive information via a revoked certificate when a Puppet master runs with Apache 2.4.

Vulnerable Configurations

Part Description Count
Application
Puppet
248
Application
Apache
1
OS
Redhat
1

Common Weakness Enumeration (CWE)

Common Attack Pattern Enumeration and Classification (CAPEC)

  • Creating a Rogue Certificate Authority Certificate
    An attacker exploits a weakness in the MD5 hash algorithm (weak collision resistance) to generate a certificate signing request (CSR) that contains collision blocks in the "to be signed" part. The attacker specially crafts two different, but valid X.509 certificates that when hashed with the MD5 algorithm would yield the same value. The attacker then sends the CSR for one of the certificates to the Certification Authority which uses the MD5 hashing algorithm. That request is completely valid and the Certificate Authority issues an X.509 certificate to the attacker which is signed with its private key. An attacker then takes that signed blob and inserts it into another X.509 certificate that the attacker generated. Due to the MD5 collision, both certificates, though different, hash to the same value and so the signed blob works just as well in the second certificate. The net effect is that the attackers' second X.509 certificate, which the Certification Authority has never seen, is now signed and validated by that Certification Authority. To make the attack more interesting, the second certificate could be not just a regular certificate, but rather itself a signing certificate. Thus the attacker is able to start their own Certification Authority that is anchored in its root of trust in the legitimate Certification Authority that has signed the attackers' first X.509 certificate. If the original Certificate Authority was accepted by default by browsers, so will now the Certificate Authority set up by the attacker and of course any certificates that it signs. So the attacker is now able to generate any SSL certificates to impersonate any web server, and the user's browser will not issue any warning to the victim. This can be used to compromise HTTPS communications and other types of systems where PKI and X.509 certificates may be used (e.g., VPN, IPSec) .

Nessus

  • NASL familySuSE Local Security Checks
    NASL idSUSE_11_PUPPET-140630.NASL
    descriptionPuppet was updated to fix the following security issues : - Unsafe use of temporary files. (CVE-2013-4969) - Arbitrary code execution with required social engineering. (CVE-2014-3248 / CVE-2014-3250)
    last seen2020-06-05
    modified2014-07-09
    plugin id76424
    published2014-07-09
    reporterThis script is Copyright (C) 2014-2020 Tenable Network Security, Inc.
    sourcehttps://www.tenable.com/plugins/nessus/76424
    titleSuSE 11.3 Security Update : puppet (SAT Patch Number 9472)
    code
    #%NASL_MIN_LEVEL 80502
    #
    # (C) Tenable Network Security, Inc.
    #
    # The descriptive text and package checks in this plugin were  
    # extracted from SuSE 11 update information. The text itself is
    # copyright (C) Novell, Inc.
    #
    
    if (NASL_LEVEL < 3000) exit(0);
    
    include("compat.inc");
    
    if (description)
    {
      script_id(76424);
      script_version("1.3");
      script_set_attribute(attribute:"plugin_modification_date", value:"2020/06/04");
    
      script_cve_id("CVE-2013-4969", "CVE-2014-3248", "CVE-2014-3250");
    
      script_name(english:"SuSE 11.3 Security Update : puppet (SAT Patch Number 9472)");
      script_summary(english:"Checks rpm output for the updated packages");
    
      script_set_attribute(
        attribute:"synopsis", 
        value:"The remote SuSE 11 host is missing one or more security updates."
      );
      script_set_attribute(
        attribute:"description", 
        value:
    "Puppet was updated to fix the following security issues :
    
      - Unsafe use of temporary files. (CVE-2013-4969)
    
      - Arbitrary code execution with required social
        engineering. (CVE-2014-3248 / CVE-2014-3250)"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://bugzilla.novell.com/show_bug.cgi?id=856843"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://bugzilla.novell.com/show_bug.cgi?id=879913"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"http://support.novell.com/security/cve/CVE-2013-4969.html"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"http://support.novell.com/security/cve/CVE-2014-3248.html"
      );
      script_set_attribute(
        attribute:"see_also",
        value:"http://support.novell.com/security/cve/CVE-2014-3250.html"
      );
      script_set_attribute(attribute:"solution", value:"Apply SAT patch number 9472.");
      script_set_cvss_base_vector("CVSS2#AV:L/AC:H/Au:N/C:C/I:C/A:C");
    
      script_set_attribute(attribute:"plugin_type", value:"local");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:suse_linux:11:puppet");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:suse_linux:11:puppet-server");
      script_set_attribute(attribute:"cpe", value:"cpe:/o:novell:suse_linux:11");
    
      script_set_attribute(attribute:"patch_publication_date", value:"2014/06/30");
      script_set_attribute(attribute:"plugin_publication_date", value:"2014/07/09");
      script_end_attributes();
    
      script_category(ACT_GATHER_INFO);
      script_copyright(english:"This script is Copyright (C) 2014-2020 Tenable Network Security, Inc.");
      script_family(english:"SuSE Local Security Checks");
    
      script_dependencies("ssh_get_info.nasl");
      script_require_keys("Host/local_checks_enabled", "Host/cpu", "Host/SuSE/release", "Host/SuSE/rpm-list");
    
      exit(0);
    }
    
    
    include("audit.inc");
    include("global_settings.inc");
    include("rpm.inc");
    
    
    if (!get_kb_item("Host/local_checks_enabled")) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
    release = get_kb_item("Host/SuSE/release");
    if (isnull(release) || release !~ "^(SLED|SLES)11") audit(AUDIT_OS_NOT, "SuSE 11");
    if (!get_kb_item("Host/SuSE/rpm-list")) audit(AUDIT_PACKAGE_LIST_MISSING);
    
    cpu = get_kb_item("Host/cpu");
    if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
    if (cpu !~ "^i[3-6]86$" && "x86_64" >!< cpu && "s390x" >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, "SuSE 11", cpu);
    
    pl = get_kb_item("Host/SuSE/patchlevel");
    if (isnull(pl) || int(pl) != 3) audit(AUDIT_OS_NOT, "SuSE 11.3");
    
    
    flag = 0;
    if (rpm_check(release:"SLED11", sp:3, cpu:"i586", reference:"puppet-2.6.18-0.16.1")) flag++;
    if (rpm_check(release:"SLED11", sp:3, cpu:"x86_64", reference:"puppet-2.6.18-0.16.1")) flag++;
    if (rpm_check(release:"SLES11", sp:3, reference:"puppet-2.6.18-0.16.1")) flag++;
    if (rpm_check(release:"SLES11", sp:3, reference:"puppet-server-2.6.18-0.16.1")) flag++;
    
    
    if (flag)
    {
      if (report_verbosity > 0) security_warning(port:0, extra:rpm_report_get());
      else security_warning(0);
      exit(0);
    }
    else audit(AUDIT_HOST_NOT, "affected");
    
  • NASL familyCGI abuses
    NASL idPUPPET_2_7_26.NASL
    descriptionAccording to its self-reported version number, the Puppet install on the remote host is affected by multiple vulnerabilities : - A privilege escalation vulnerability related to input validation and paths exists in the bundled Ruby environment. An attacker could trick a privileged user into executing arbitrary code by convincing the user to change directories and then run Puppet. (CVE-2014-3248) - An error exists related to the console role that could allow unauthenticated users to obtain sensitive information by hiding and unhiding nodes. Note that this issue only affects Puppet Enterprise installs. (CVE-2014-3249) - An error exists related to configurations including Apache 2.4 and the mod_ssl
    last seen2020-06-01
    modified2020-06-02
    plugin id76344
    published2014-07-02
    reporterThis script is Copyright (C) 2014-2019 and is owned by Tenable, Inc. or an Affiliate thereof.
    sourcehttps://www.tenable.com/plugins/nessus/76344
    titlePuppet < 2.7.26 / 3.6.2 and Enterprise 2.8.x < 2.8.7 Multiple Vulnerabilities
    code
    #
    # (C) Tenable Network Security, Inc.
    #
    
    include("compat.inc");
    
    if (description)
    {
      script_id(76344);
      script_version("1.5");
      script_set_attribute(attribute:"plugin_modification_date", value:"2020/06/12");
    
      script_cve_id("CVE-2014-3248", "CVE-2014-3249", "CVE-2014-3250");
      script_bugtraq_id(68035, 68037);
    
      script_name(english:"Puppet < 2.7.26 / 3.6.2 and Enterprise 2.8.x < 2.8.7 Multiple Vulnerabilities");
      script_summary(english:"Checks puppet version.");
    
      script_set_attribute(attribute:"synopsis", value:
    "A web application on the remote host is affected by multiple
    vulnerabilities.");
      script_set_attribute(attribute:"description", value:
    "According to its self-reported version number, the Puppet install on
    the remote host is affected by multiple vulnerabilities :
    
      - A privilege escalation vulnerability related to input
        validation and paths exists in the bundled Ruby
        environment. An attacker could trick a privileged user
        into executing arbitrary code by convincing the user to
        change directories and then run Puppet.
        (CVE-2014-3248)
    
      - An error exists related to the console role that could
        allow unauthenticated users to obtain sensitive
        information by hiding and unhiding nodes. Note that
        this issue only affects Puppet Enterprise installs.
        (CVE-2014-3249)
    
      - An error exists related to configurations including
        Apache 2.4 and the mod_ssl 'SSLCARevocationCheck' that
        could allow an attacker to obtain sensitive
        information. Note that this issue does not affect
        Puppet Enterprise installs. (CVE-2014-3250)");
      script_set_attribute(attribute:"see_also", value:"https://puppet.com/security/cve/cve-2014-3248");
      script_set_attribute(attribute:"see_also", value:"https://puppet.com/security/cve/cve-2014-3249");
      script_set_attribute(attribute:"see_also", value:"https://puppet.com/security/cve/CVE-2014-3250");
      script_set_attribute(attribute:"solution", value:
    "Upgrade to Puppet 2.7.26 / 3.6.2 or Puppet Enterprise 2.8.7 or later.");
      script_set_cvss_base_vector("CVSS2#AV:L/AC:H/Au:N/C:C/I:C/A:C");
      script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
      script_set_attribute(attribute:"cvss_score_source", value:"CVE-2014-3248");
    
      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:"2014/06/10");
      script_set_attribute(attribute:"patch_publication_date", value:"2014/06/10");
      script_set_attribute(attribute:"plugin_publication_date", value:"2014/07/02");
    
      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-2020 and is owned by Tenable, Inc. or an Affiliate thereof.");
    
      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 = FALSE;
    
      return report;
    }
    
    port = get_kb_item_or_exit('puppet/rest_port');
    ver = get_kb_item_or_exit('puppet/' + port + '/version');
    report = FALSE;
    
    if ('Enterprise' >< ver)
    {
      app_name = "Puppet Enterprise";
      match = eregmatch(string:ver, pattern:"Enterprise ([0-9.]+)\)");
      if (isnull(match)) audit(AUDIT_UNKNOWN_WEB_APP_VER, app_name, build_url(port:port));
      ver = match[1];
    
      # Resolved in Puppet Enterprise 2.8.7
      report = _check_version(ver, '2.8.7', "2.8", enterprise:TRUE);
    }
    else
    {
      # Do not run against open source unless scan is paranoid
      if (report_paranoia < 2) audit(AUDIT_PARANOID);
    
      app_name = "Puppet";
    
      # 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, app_name, port, ver);
      ver = match[1];
    
      # Resolved in Puppet 2.7.26, 3.6.2
      report = _check_version(ver, '2.7.26', '0.0');
      if (!report)
        report = _check_version(ver, '3.6.2', '3.0');
    }
    
    if (!report) audit(AUDIT_LISTEN_NOT_VULN, app_name, port, ver);
    
    if (report_verbosity > 0) security_warning(port:port, extra:report);
    else security_warning(port);
    
  • NASL familySolaris Local Security Checks
    NASL idSOLARIS11_PUPPET_20141216.NASL
    descriptionThe remote Solaris system is missing necessary patches to address security updates : - Untrusted search path vulnerability in Puppet Enterprise 2.8 before 2.8.7, Puppet before 2.7.26 and 3.x before 3.6.2, Facter 1.6.x and 2.x before 2.0.2, Hiera before 1.3.4, and Mcollective before 2.5.2, when running with Ruby 1.9.1 or earlier, allows local users to gain privileges via a Trojan horse file in the current working directory, as demonstrated using (1) rubygems/defaults/ operating_system.rb, (2) Win32API.rb, (3) Win32API.so, (4) safe_yaml.rb, (5) safe_yaml/deep.rb, or (6) safe_yaml/deep.so; or (7) operatingsystem.rb, (8) operatingsystem.so, (9) osfamily.rb, or (10) osfamily.so in puppet/confine. (CVE-2014-3248)
    last seen2020-06-01
    modified2020-06-02
    plugin id80745
    published2015-01-19
    reporterThis script is Copyright (C) 2015-2018 Tenable Network Security, Inc.
    sourcehttps://www.tenable.com/plugins/nessus/80745
    titleOracle Solaris Third-Party Patch Update : puppet (multiple_vulnerabilities_in_puppet1)
    code
    #
    # (C) Tenable Network Security, Inc.
    #
    # The descriptive text and package checks in this plugin were
    # extracted from the Oracle Third Party software advisories.
    #
    include("compat.inc");
    
    if (description)
    {
      script_id(80745);
      script_version("1.3");
      script_cvs_date("Date: 2018/11/15 20:50:25");
    
      script_cve_id("CVE-2014-3248", "CVE-2014-3250");
    
      script_name(english:"Oracle Solaris Third-Party Patch Update : puppet (multiple_vulnerabilities_in_puppet1)");
      script_summary(english:"Check for the 'entire' version.");
    
      script_set_attribute(
        attribute:"synopsis", 
        value:
    "The remote Solaris system is missing a security patch for third-party
    software."
      );
      script_set_attribute(
        attribute:"description", 
        value:
    "The remote Solaris system is missing necessary patches to address
    security updates :
    
      - Untrusted search path vulnerability in Puppet Enterprise
        2.8 before 2.8.7, Puppet before 2.7.26 and 3.x before
        3.6.2, Facter 1.6.x and 2.x before 2.0.2, Hiera before
        1.3.4, and Mcollective before 2.5.2, when running with
        Ruby 1.9.1 or earlier, allows local users to gain
        privileges via a Trojan horse file in the current
        working directory, as demonstrated using (1)
        rubygems/defaults/ operating_system.rb, (2) Win32API.rb,
        (3) Win32API.so, (4) safe_yaml.rb, (5)
        safe_yaml/deep.rb, or (6) safe_yaml/deep.so; or (7)
        operatingsystem.rb, (8) operatingsystem.so, (9)
        osfamily.rb, or (10) osfamily.so in puppet/confine.
        (CVE-2014-3248)"
      );
      # https://www.oracle.com/technetwork/topics/security/thirdparty-patch-map-1482893.html
      script_set_attribute(
        attribute:"see_also",
        value:"http://www.nessus.org/u?4a913f44"
      );
      # https://blogs.oracle.com/sunsecurity/multiple-vulnerabilities-in-puppet
      script_set_attribute(
        attribute:"see_also",
        value:"http://www.nessus.org/u?7e305605"
      );
      script_set_attribute(attribute:"solution", value:"Upgrade to Solaris 11.2.5.5.0.");
      script_set_cvss_base_vector("CVSS2#AV:L/AC:H/Au:N/C:C/I:C/A:C");
      script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N");
    
      script_set_attribute(attribute:"plugin_type", value:"local");
      script_set_attribute(attribute:"cpe", value:"cpe:/o:oracle:solaris:11.2");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:oracle:solaris:puppet");
    
      script_set_attribute(attribute:"patch_publication_date", value:"2014/12/16");
      script_set_attribute(attribute:"plugin_publication_date", value:"2015/01/19");
      script_end_attributes();
    
      script_category(ACT_GATHER_INFO);
      script_copyright(english:"This script is Copyright (C) 2015-2018 Tenable Network Security, Inc.");
      script_family(english:"Solaris Local Security Checks");
    
      script_dependencies("ssh_get_info.nasl");
      script_require_keys("Host/local_checks_enabled", "Host/Solaris11/release", "Host/Solaris11/pkg-list");
    
      exit(0);
    }
    
    
    include("audit.inc");
    include("global_settings.inc");
    include("misc_func.inc");
    include("solaris.inc");
    
    if (!get_kb_item("Host/local_checks_enabled")) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
    release = get_kb_item("Host/Solaris11/release");
    if (isnull(release)) audit(AUDIT_OS_NOT, "Solaris11");
    pkg_list = solaris_pkg_list_leaves();
    if (isnull (pkg_list)) audit(AUDIT_PACKAGE_LIST_MISSING, "Solaris pkg-list packages");
    
    if (empty_or_null(egrep(string:pkg_list, pattern:"^puppet$"))) audit(AUDIT_PACKAGE_NOT_INSTALLED, "puppet");
    
    flag = 0;
    
    if (solaris_check_release(release:"0.5.11-0.175.2.5.0.5.0", sru:"SRU 11.2.5.5.0") > 0) flag++;
    
    if (flag)
    {
      error_extra = 'Affected package : puppet\n' + solaris_get_report2();
      error_extra = ereg_replace(pattern:"version", replace:"OS version", string:error_extra);
      if (report_verbosity > 0) security_warning(port:0, extra:error_extra);
      else security_warning(0);
      exit(0);
    }
    else audit(AUDIT_PACKAGE_NOT_AFFECTED, "puppet");