Vulnerabilities > CVE-2019-9896 - Uncontrolled Search Path Element vulnerability in multiple products

047910
CVSS 7.8 - HIGH
Attack vector
LOCAL
Attack complexity
LOW
Privileges required
LOW
Confidentiality impact
HIGH
Integrity impact
HIGH
Availability impact
HIGH
local
low complexity
putty
opensuse
CWE-427
nessus

Summary

In PuTTY versions before 0.71 on Windows, local attackers could hijack the application by putting a malicious help file in the same directory as the executable.

Common Weakness Enumeration (CWE)

Common Attack Pattern Enumeration and Classification (CAPEC)

  • Leveraging/Manipulating Configuration File Search Paths
    This attack loads a malicious resource into a program's standard path used to bootstrap and/or provide contextual information for a program like a path variable or classpath. J2EE applications and other component based applications that are built from multiple binaries can have very long list of dependencies to execute. If one of these libraries and/or references is controllable by the attacker then application controls can be circumvented by the attacker. A standard UNIX path looks similar to this If the attacker modifies the path variable to point to a locale that includes malicious resources then the user unwittingly can execute commands on the attackers' behalf: This is a form of usurping control of the program and the attack can be done on the classpath, database resources, or any other resources built from compound parts. At runtime detection and blocking of this attack is nearly impossible, because the configuration allows execution.
  • DLL Search Order Hijacking
    The attacker exploits the functionality of the Windows DLL loader where the process loading the DLL searches for the DLL to be loaded first in the same directory in which the process binary resides and then in other directories (e.g., System32). Exploitation of this preferential search order can allow an attacker to make the loading process load the attackers' rogue DLL rather than the legitimate DLL. For instance, an attacker with access to the file system may place a malicious ntshrui.dll in the C:\Windows directory. This DLL normally resides in the System32 folder. Process explorer.exe which also resides in C:\Windows, upon trying to load the ntshrui.dll from the System32 folder will actually load the DLL supplied by the attacker simply because of the preferential search order. Since the attacker has placed its malicious ntshrui.dll in the same directory as the loading explorer.exe process, the DLL supplied by the attacker will be found first and thus loaded in lieu of the legitimate DLL. Since explorer.exe is loaded during the boot cycle, the attackers' malware is guaranteed to execute. This attack can be leveraged with many different DLLs and with many different loading processes. No forensic trails are left in the system's registry or file system that an incorrect DLL had been loaded.

Nessus

  • NASL familySuSE Local Security Checks
    NASL idOPENSUSE-2019-1113.NASL
    descriptionThis update for putty fixes the following issues : Update to new upstream release 0.71 [boo#1129633] - CVE-2019-9894: Fixed a remotely triggerable memory overwrite in RSA key exchange, which can occur before host key verification potential recycling of random numbers used in cryptography. - CVE-2019-9895: Fixed a remotely triggerable buffer overflow in any kind of server-to-client forwarding. - CVE-2019-9897: Fixed multiple denial-of-service attacks that can be triggered by writing to the terminal. - CVE-2019-9898: Fixed potential recycling of random numbers used in cryptography - CVE-2019-9896 (Windows only): Fixed hijacking by a malicious help file in the same directory as the executable - Major rewrite of the crypto code to remove cache and timing side channels.
    last seen2020-06-01
    modified2020-06-02
    plugin id123660
    published2019-04-03
    reporterThis script is Copyright (C) 2019-2020 and is owned by Tenable, Inc. or an Affiliate thereof.
    sourcehttps://www.tenable.com/plugins/nessus/123660
    titleopenSUSE Security Update : putty (openSUSE-2019-1113)
    code
    #
    # (C) Tenable Network Security, Inc.
    #
    # The descriptive text and package checks in this plugin were
    # extracted from openSUSE Security Update openSUSE-2019-1113.
    #
    # The text description of this plugin is (C) SUSE LLC.
    #
    
    include("compat.inc");
    
    if (description)
    {
      script_id(123660);
      script_version("1.2");
      script_cvs_date("Date: 2020/01/27");
    
      script_cve_id("CVE-2019-9894", "CVE-2019-9895", "CVE-2019-9896", "CVE-2019-9897", "CVE-2019-9898");
    
      script_name(english:"openSUSE Security Update : putty (openSUSE-2019-1113)");
      script_summary(english:"Check for the openSUSE-2019-1113 patch");
    
      script_set_attribute(
        attribute:"synopsis", 
        value:"The remote openSUSE host is missing a security update."
      );
      script_set_attribute(
        attribute:"description", 
        value:
    "This update for putty fixes the following issues :
    
    Update to new upstream release 0.71 [boo#1129633]
    
      - CVE-2019-9894: Fixed a remotely triggerable memory
        overwrite in RSA key exchange, which can occur before
        host key verification potential recycling of random
        numbers used in cryptography.
    
      - CVE-2019-9895: Fixed a remotely triggerable buffer
        overflow in any kind of server-to-client forwarding.
    
      - CVE-2019-9897: Fixed multiple denial-of-service attacks
        that can be triggered by writing to the terminal.
    
      - CVE-2019-9898: Fixed potential recycling of random
        numbers used in cryptography
    
      - CVE-2019-9896 (Windows only): Fixed hijacking by a
        malicious help file in the same directory as the
        executable
    
      - Major rewrite of the crypto code to remove cache and
        timing side channels."
      );
      script_set_attribute(
        attribute:"see_also",
        value:"https://bugzilla.opensuse.org/show_bug.cgi?id=1129633"
      );
      script_set_attribute(
        attribute:"solution", 
        value:"Update the affected putty packages."
      );
      script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P");
      script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
      script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H");
      script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C");
      script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available");
    
      script_set_attribute(attribute:"plugin_type", value:"local");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:opensuse:putty");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:opensuse:putty-debuginfo");
      script_set_attribute(attribute:"cpe", value:"p-cpe:/a:novell:opensuse:putty-debugsource");
      script_set_attribute(attribute:"cpe", value:"cpe:/o:novell:opensuse:15.0");
    
      script_set_attribute(attribute:"vuln_publication_date", value:"2019/03/21");
      script_set_attribute(attribute:"patch_publication_date", value:"2019/04/02");
      script_set_attribute(attribute:"plugin_publication_date", value:"2019/04/03");
      script_set_attribute(attribute:"generated_plugin", value:"current");
      script_end_attributes();
    
      script_category(ACT_GATHER_INFO);
      script_copyright(english:"This script is Copyright (C) 2019-2020 and is owned by Tenable, Inc. or an Affiliate thereof.");
      script_family(english:"SuSE Local Security Checks");
    
      script_dependencies("ssh_get_info.nasl");
      script_require_keys("Host/local_checks_enabled", "Host/SuSE/release", "Host/SuSE/rpm-list", "Host/cpu");
    
      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)") audit(AUDIT_OS_NOT, "openSUSE");
    if (release !~ "^(SUSE15\.0)$") audit(AUDIT_OS_RELEASE_NOT, "openSUSE", "15.0", release);
    if (!get_kb_item("Host/SuSE/rpm-list")) audit(AUDIT_PACKAGE_LIST_MISSING);
    
    ourarch = get_kb_item("Host/cpu");
    if (!ourarch) audit(AUDIT_UNKNOWN_ARCH);
    if (ourarch !~ "^(x86_64)$") audit(AUDIT_ARCH_NOT, "x86_64", ourarch);
    
    flag = 0;
    
    if ( rpm_check(release:"SUSE15.0", reference:"putty-0.71-lp150.9.1") ) flag++;
    if ( rpm_check(release:"SUSE15.0", reference:"putty-debuginfo-0.71-lp150.9.1") ) flag++;
    if ( rpm_check(release:"SUSE15.0", reference:"putty-debugsource-0.71-lp150.9.1") ) flag++;
    
    if (flag)
    {
      if (report_verbosity > 0) security_hole(port:0, extra:rpm_report_get());
      else security_hole(0);
      exit(0);
    }
    else
    {
      tested = pkg_tests_get();
      if (tested) audit(AUDIT_PACKAGE_NOT_AFFECTED, tested);
      else audit(AUDIT_PACKAGE_NOT_INSTALLED, "putty / putty-debuginfo / putty-debugsource");
    }
    
  • NASL familyWindows
    NASL idPUTTY_071.NASL
    descriptionThe remote host has a version of PuTTY installed that is prior to 0.71. It is, therefore, affected by multiple vulnerabilities including: - A remotely triggerable buffer overflow in any kind of server-to-client forwarding. (CVE-2019-9895) - Potential recycling of random numbers used in cryptography. (CVE-2019-9898) - A remotely triggerable memory overwrite in RSA key exchange can occur before host key verification. (CVE-2019-9894)
    last seen2020-06-01
    modified2020-06-02
    plugin id123418
    published2019-03-27
    reporterThis script is Copyright (C) 2019 and is owned by Tenable, Inc. or an Affiliate thereof.
    sourcehttps://www.tenable.com/plugins/nessus/123418
    titlePuTTY < 0.71 Multiple Vulnerabilities
    code
    #
    # (C) Tenable Network Security, Inc.
    #
    
    include("compat.inc");
    
    if (description)
    {
      script_id(123418);
      script_version("1.2");
      script_cvs_date("Date: 2019/10/30 13:24:47");
    
      script_cve_id(
        "CVE-2019-9894",
        "CVE-2019-9895",
        "CVE-2019-9896",
        "CVE-2019-9897",
        "CVE-2019-9898"
      );
      script_bugtraq_id(
        107484,
        107523
      );
    
      script_name(english:"PuTTY < 0.71 Multiple Vulnerabilities");
      script_summary(english:"Checks the version of PuTTY.");
    
      script_set_attribute(attribute:"synopsis", value:
    "The remote Windows host has an SSH client that is affected by
    multiple vulnerabilities.");
      script_set_attribute(attribute:"description", value:
    "The remote host has a version of PuTTY installed that is prior to
    0.71. It is, therefore, affected by multiple vulnerabilities
    including:
    
      - A remotely triggerable buffer overflow in any kind of
        server-to-client forwarding. (CVE-2019-9895)
    
      - Potential recycling of random numbers used in cryptography.
        (CVE-2019-9898)
    
      - A remotely triggerable memory overwrite in RSA key exchange can
        occur before host key verification. (CVE-2019-9894)");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-auth-prompt-spoofing.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?fc188a9c");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-chm-hijack.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?cd82820f");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-fd-set-overflow.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?e116cf63");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-rng-reuse.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?39988fba");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-rsa-kex-integer-overflow.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?50d03d73");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-terminal-dos-combining-chars.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?dc4b5e69");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-terminal-dos-combining-chars-double-width-gtk.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?d52aebfd");
      # https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/vuln-terminal-dos-one-column-cjk.html
      script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?819250a8");
      script_set_attribute(attribute:"see_also", value:"http://www.chiark.greenend.org.uk/~sgtatham/putty/changes.html");
      script_set_attribute(attribute:"solution", value:"Upgrade to PuTTY version 0.71 or later.");
      script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P");
      script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
      script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H");
      script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C");
      script_set_attribute(attribute:"cvss_score_source", value:"CVE-2019-9895");
      script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available");
    
      script_set_attribute(attribute:"vuln_publication_date", value:"2019/03/16");
      script_set_attribute(attribute:"patch_publication_date", value:"2019/03/16");
      script_set_attribute(attribute:"plugin_publication_date", value:"2019/03/27");
    
      script_set_attribute(attribute:"plugin_type", value:"local");
      script_set_attribute(attribute:"cpe", value:"cpe:/a:simon_tatham:putty");
      script_end_attributes();
    
      script_category(ACT_GATHER_INFO);
      script_family(english:"Windows");
    
      script_copyright(english:"This script is Copyright (C) 2019 and is owned by Tenable, Inc. or an Affiliate thereof.");
    
      script_dependencies("putty_installed.nasl");
      script_require_keys("installed_sw/PuTTY", "SMB/Registry/Enumerated");
    
      exit(0);
    }
    
    include("vcf.inc");
    
    get_kb_item_or_exit("SMB/Registry/Enumerated");
    
    app_info = vcf::get_app_info(app:"PuTTY", win_local:TRUE);
    
    constraints = [
      { "fixed_version" : "0.71" }
    ];
    
    vcf::check_version_and_report(app_info:app_info, constraints:constraints, severity:SECURITY_HOLE);