Vulnerabilities > CVE-2020-5958 - Untrusted Search Path vulnerability in Nvidia Geforce Experience, Quadro Firmware and Tesla Firmware

047910
CVSS 4.4 - MEDIUM
Attack vector
LOCAL
Attack complexity
MEDIUM
Privileges required
NONE
Confidentiality impact
PARTIAL
Integrity impact
PARTIAL
Availability impact
PARTIAL
local
nvidia
CWE-426
nessus

Summary

NVIDIA Windows GPU Display Driver, all versions, contains a vulnerability in the NVIDIA Control Panel component in which an attacker with local system access can plant a malicious DLL file, which may lead to code execution, denial of service, or information disclosure.

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.

Nessus

NASL familyWindows
NASL idNVIDIA_WIN_2020_02.NASL
descriptionA display driver installed on the remote Windows host is affected by multiple vulnerabilities. - A privilege escalation vulnerability exists in NVIDIA Control Panel component. An unauthenticated, local attacker can exploit this, via corrputing a system file, to gain priviledged access to the system. - A privilege escalation vulnerability exists in NVIDIA Control Panel component. An unauthenticated, local attacker can exploit this, via planting a malicious DLL file, this may lead to code execution, denial of service, or information disclosure.
last seen2020-03-26
modified2020-03-20
plugin id134761
published2020-03-20
reporterThis script is Copyright (C) 2020 and is owned by Tenable, Inc. or an Affiliate thereof.
sourcehttps://www.tenable.com/plugins/nessus/134761
titleNVIDIA Windows GPU Display Driver (Feb 2020)
code
#
# (C) Tenable Network Security, Inc.
#

include('compat.inc');

if (description)
{
  script_id(134761);
  script_version("1.3");
  script_set_attribute(attribute:"plugin_modification_date", value:"2020/07/10");

  script_cve_id("CVE-2020-5957", "CVE-2020-5958");
  script_xref(name:"IAVA", value:"2020-A-0111-S");

  script_name(english:"NVIDIA Windows GPU Display Driver (Feb 2020)");
  script_summary(english:"Checks the driver version.");

  script_set_attribute(attribute:"synopsis", value:
"The NVIDIA GPU display driver software on the remote host is missing
a security update. It is, therefore, affected by multiple vulnerabilities.");
  script_set_attribute(attribute:"description", value:
"A display driver installed on the remote Windows host is affected by
multiple vulnerabilities.

  - A privilege escalation vulnerability exists in NVIDIA Control 
    Panel component. An unauthenticated, local attacker can exploit 
    this, via corrputing a system file, to gain priviledged access 
    to the system.
   
  - A privilege escalation vulnerability exists in NVIDIA Control 
    Panel component. An unauthenticated, local attacker can exploit 
    this, via planting a malicious DLL file, this may lead to 
    code execution, denial of service, or information disclosure.");
  script_set_attribute(attribute:"see_also", value:"https://nvidia.custhelp.com/app/answers/detail/a_id/4996");
  script_set_attribute(attribute:"solution", value:
"Upgrade the NVIDIA graphics driver in accordance with the vendor advisory.");
  script_set_cvss_base_vector("CVSS2#AV:L/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:L/AC:L/PR:L/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-2020-5957");

  script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available");

  script_set_attribute(attribute:"vuln_publication_date", value:"2020/02/28");
  script_set_attribute(attribute:"patch_publication_date", value:"2020/02/28");
  script_set_attribute(attribute:"plugin_publication_date", value:"2020/03/20");

  script_set_attribute(attribute:"potential_vulnerability", value:"true");
  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"cpe:/a:nvidia:gpu_driver");
  script_set_attribute(attribute:"stig_severity", value:"I");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Windows");

  script_copyright(english:"This script is Copyright (C) 2020 and is owned by Tenable, Inc. or an Affiliate thereof.");

  script_dependencies("wmi_enum_display_drivers.nbin");
  script_require_keys("WMI/DisplayDrivers/NVIDIA", "Settings/ParanoidReport");

  exit(0);
}

include('audit.inc');
include('global_settings.inc');
include('misc_func.inc');

if (report_paranoia < 2) audit(AUDIT_PARANOID);

kb_base = 'WMI/DisplayDrivers/';

# double check in case optimization is disabled
kbs = get_kb_list(kb_base + '*/Name');
if (isnull(kbs)) exit(0, 'No display drivers were found.');

report = '';

foreach kb (keys(kbs))
{
  name = kbs[kb];
  # only check NVIDIA drivers
  if ("NVIDIA" >!< name) continue;

  nvidia_found = TRUE;
  id = kb - kb_base - '/Name';
  version = get_kb_item_or_exit(kb_base + id + '/Version');
  gpumodel = tolower(get_kb_item_or_exit(kb_base + id + '/Processor'));
  driver_date = get_kb_item_or_exit(kb_base + id + '/DriverDate');

  disp_driver_date = driver_date;

  # convert to something we can pass to ver_compare (YYYY.MM.DD)
  driver_date = split(driver_date, sep:'/', keep:FALSE);
  driver_date = driver_date[2] + '.' + driver_date[0] + '.' + driver_date[1];

  fix = NULL;

  # GeForce
  if (gpumodel =~ "geforce")
  { 
    # All R430 versions prior to 442.50
    if (version =~ "^44[0-2]\." && ver_compare(ver:version, fix:'442.50', strict:FALSE) == -1)
      fix = '442.50';
  }
  # Quadro NVS
  else if (gpumodel =~ "quadro|nvs")
  {
    # All R440 versions prior to 442.50
    if (version =~ "^44[0-2]\." && ver_compare(ver:version, fix:'442.50', strict:FALSE) == -1)
      fix = '442.50';

    # All R430 versions prior to 432.28
    else if (version =~ "^43[0-2]\." && ver_compare(ver:version, fix:'432.28', strict:FALSE) == -1)
      fix = '432.28';

    # All R418 versions prior to 426.50
    else if (version =~ "^4(1[0-9]|2[0-6])\." && ver_compare(ver:version, fix:'426.50', strict:FALSE) == -1)
      fix = '426.50';

    # All R390 versions prior to 392.59
    else if (version =~ "^39[0-2]\." && ver_compare(ver:version, fix:'392.59', strict:FALSE) == -1)
    fix = '392.59';
  }
  # Tesla
  else if (gpumodel =~ "tesla")
  {
    # All R440 versions prior to 442.50
    if (version =~ "^44[0-2]\." && ver_compare(ver:version, fix:'442.50', strict:FALSE) == -1)
      fix = '442.50';
    
    # All R418 versions prior to 426.50
    else if (version =~ "^4(1[0-9]|2[0-6])\." && ver_compare(ver:version, fix:'426.50', strict:FALSE) == -1)
      fix = '426.50';
  }

  if (!isnull(fix))
  {
    order = make_list('Device name', 'Driver version', 'Driver date', 'Fixed version');
    report = make_array(
      order[0],name,
      order[1],version,
      order[2],disp_driver_date,
      order[3],fix
      );

    report = report_items_str(report_items:report, ordered_fields:order);
    security_report_v4(severity:SECURITY_WARNING, port:0, extra:report);
    exit(0);
  }
  else
  {
    exit(0, 'No vulnerable NVIDIA display drivers were found.');
  }
}

exit(0, 'No NVIDIA display drivers were found.');