Vulnerabilities > CVE-2019-5675 - Data Processing Errors vulnerability in Nvidia GPU Driver

047910
CVSS 7.2 - HIGH
Attack vector
LOCAL
Attack complexity
LOW
Privileges required
NONE
Confidentiality impact
COMPLETE
Integrity impact
COMPLETE
Availability impact
COMPLETE
local
low complexity
nvidia
CWE-19
nessus

Summary

NVIDIA Windows GPU Display driver software for Windows (all versions) contains a vulnerability in the kernel mode layer (nvlddmkm.sys) handler for DxgkDdiEscape where the product does not properly synchronize shared data, such as static variables across threads, which can lead to undefined behavior and unpredictable data changes, which may lead to denial of service, escalation of privileges, or information disclosure.

Vulnerable Configurations

Part Description Count
Application
Nvidia
1

Common Weakness Enumeration (CWE)

Common Attack Pattern Enumeration and Classification (CAPEC)

  • Overflow Buffers
    Buffer Overflow attacks target improper or missing bounds checking on buffer operations, typically triggered by input injected by an attacker. As a consequence, an attacker is able to write past the boundaries of allocated buffer regions in memory, causing a program crash or potentially redirection of execution as per the attackers' choice.
  • XML Nested Payloads
    Applications often need to transform data in and out of the XML format by using an XML parser. It may be possible for an attacker to inject data that may have an adverse effect on the XML parser when it is being processed. By nesting XML data and causing this data to be continuously self-referential, an attacker can cause the XML parser to consume more resources while processing, causing excessive memory consumption and CPU utilization. An attacker's goal is to leverage parser failure to his or her advantage. In most cases this type of an attack will result in a denial of service due to an application becoming unstable, freezing, or crash. However it may be possible to cause a crash resulting in arbitrary code execution, leading to a jump from the data plane to the control plane [R.230.1].
  • XML Oversized Payloads
    Applications often need to transform data in and out of the XML format by using an XML parser. It may be possible for an attacker to inject data that may have an adverse effect on the XML parser when it is being processed. By supplying oversized payloads in input vectors that will be processed by the XML parser, an attacker can cause the XML parser to consume more resources while processing, causing excessive memory consumption and CPU utilization, and potentially cause execution of arbitrary code. An attacker's goal is to leverage parser failure to his or her advantage. In many cases this type of an attack will result in a denial of service due to an application becoming unstable, freezing, or crash. However it is possible to cause a crash resulting in arbitrary code execution, leading to a jump from the data plane to the control plane [R.231.1].
  • XML Client-Side Attack
    Client applications such as web browsers that process HTML data often need to transform data in and out of the XML format by using an XML parser. It may be possible for an attacker to inject data that may have an adverse effect on the XML parser when it is being processed. These adverse effects may include the parser crashing, consuming too much of a resource, executing too slowly, executing code supplied by an attacker, allowing usage of unintended system functionality, etc. An attacker's goal is to leverage parser failure to his or her advantage. In some cases it may be possible to jump from the data plane to the control plane via bad data being passed to an XML parser. [R.484.1]
  • XML Parser Attack
    Applications often need to transform data in and out of the XML format by using an XML parser. It may be possible for an attacker to inject data that may have an adverse effect on the XML parser when it is being processed. These adverse effects may include the parser crashing, consuming too much of a resource, executing too slowly, executing code supplied by an attacker, allowing usage of unintended system functionality, etc. An attacker's goal is to leverage parser failure to his or her advantage. In some cases it may be possible to jump from the data plane to the control plane via bad data being passed to an XML parser. [R.99.1]

Nessus

NASL familyWindows
NASL idNVIDIA_WIN_2019_05.NASL
descriptionThe NVIDIA GPU display driver software on the remote Windows host is missing a security update. It is, therefore, affected by multiple vulnerabilities: - An unspecified vulnerability exists in the kernel mode layer (nvvlddmkm.sys) handler for DxgkDdiEscape due to improper synchronization of shared data. An authenticated, local attacker can exploit this, to cause a denial of service, gain elevated privileges or to disclose potentially sensitive information. (CVE-2019-5675) - A binary planting vulnerability exists due to improper path or signature validation. An authenticated, local attacker can exploit this, via code execution to gain elevated privileges. (CVE-2019-5676) - A memory corruption vulnerability exists in the kernel mode layer (nvlddmkm.sys) handler for DeviceIoControl. An authenticated, local attacker can exploit this, to cause a denial of service condition. (CVE-2019-5677)
last seen2020-04-30
modified2019-06-19
plugin id126049
published2019-06-19
reporterThis script is Copyright (C) 2019-2020 and is owned by Tenable, Inc. or an Affiliate thereof.
sourcehttps://www.tenable.com/plugins/nessus/126049
titleNVIDIA Windows GPU Display Driver Multiple Vulnerabilities (May 2019)
code
#
# (C) Tenable Network Security, Inc.
#

include('compat.inc');

if (description)
{
  script_id(126049);
  script_version("1.5");
  script_set_attribute(attribute:"plugin_modification_date", value:"2020/04/29");

  script_cve_id(
    "CVE-2019-5666",
    "CVE-2019-5675",
    "CVE-2019-5676",
    "CVE-2019-5677"
  );

  script_name(english:"NVIDIA Windows GPU Display Driver Multiple Vulnerabilities (May 2019)");
  script_summary(english:"Checks the driver version.");

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

  - An unspecified vulnerability exists in the kernel mode layer (nvvlddmkm.sys) handler for DxgkDdiEscape due to
    improper synchronization of shared data. An authenticated, local attacker can exploit this, to cause a denial of
    service, gain elevated privileges or to disclose potentially sensitive information. (CVE-2019-5675)

  - A binary planting vulnerability exists due to improper path or signature validation. An authenticated, local
    attacker can exploit this, via code execution to gain elevated privileges. (CVE-2019-5676)

  - A memory corruption vulnerability exists in the kernel mode layer (nvlddmkm.sys) handler for DeviceIoControl. An
    authenticated, local attacker can exploit this, to cause a denial of service condition. (CVE-2019-5677)");
  # https://nvidia.custhelp.com/app/answers/detail/a_id/4797
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?9fd89bc5");
  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:C/I:C/A:C");
  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:H/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-5676");

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

  script_set_attribute(attribute:"vuln_publication_date", value:"2019/05/09");
  script_set_attribute(attribute:"patch_publication_date", value:"2019/05/09");
  script_set_attribute(attribute:"plugin_publication_date", value:"2019/06/19");

  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_end_attributes();

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

  script_copyright(english:"This script is Copyright (C) 2019-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');

app_name = 'NVIDIA Driver';

# it is not possible to tell if these are vendor provided drivers or from the NVIDIA website
# some vendor provided version come with a fix (i.e. 430.23, 425.25, and 422.02)
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.');

foreach kb (keys(kbs))
{
  name = tolower(kbs[kb]);
  if ('nvidia' >!< name) continue;

  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'));
  break;
}

fix = NULL;
# Geforce or Quadro NVS
# All R430 versions prior to 430.64
if (gpumodel =~ "geforce|quadro|nvs" && version =~ "^430\.")
  fix = '430.64';

# Quadro NVS
if (gpumodel =~ "quadro|nvs") {
  # All R418 versions prior to 425.51
  if (version =~ "^4(1[89]|2[0-5])\.")
    fix = '425.51';

  # All R410 versions prior to 412.36
  else if (version =~ "^41[0-2]\.")
    fix = '412.36';

  # All R390 versions prior to 392.53
  else if (version =~ "^39[0-2]\.")
    fix = '392.53';
}
# Tesla
if (gpumodel =~ "tesla") {
  # All R418 versions prior to 425.25
  if (version =~ "^4(1[89]|2[0-5])\.")
    fix = '425.25';

  # All R410 versions prior to 412.36
  else if (version =~ "^41[0-2]\.")
    fix = '412.36';
}

if (isnull(fix))
  audit(AUDIT_INST_VER_NOT_VULN, app_name, version);

if (ver_compare(ver:version, fix:fix, strict:FALSE) == -1)
{
  report = '\n  Installed driver version : ' + version +
           '\n  Fixed driver version     : ' + fix + '\n';
  security_report_v4(severity:SECURITY_HOLE, port:0, extra: report);
}
else
  audit(AUDIT_INST_VER_NOT_VULN, app_name, version);