Vulnerabilities > CVE-2019-5675 - Improper Synchronization vulnerability in Nvidia GPU Driver

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
nvidia
CWE-662
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)

  • Forced Deadlock
    This attack attempts to trigger and exploit a deadlock condition in the target software to cause a denial of service. A deadlock can occur when two or more competing actions are waiting for each other to finish, and thus neither ever does. Deadlock condition are not easy to detect.
  • Leveraging Race Conditions
    This attack targets a race condition occurring when multiple processes access and manipulate the same resource concurrently and the outcome of the execution depends on the particular order in which the access takes place. The attacker can leverage a race condition by "running the race", modifying the resource and modifying the normal execution flow. For instance a race condition can occur while accessing a file, the attacker can trick the system by replacing the original file with his version and cause the system to read the malicious file.
  • Leveraging Race Conditions via Symbolic Links
    This attack leverages the use of symbolic links (Symlinks) in order to write to sensitive files. An attacker can create a Symlink link to a target file not otherwise accessible to her. When the privileged program tries to create a temporary file with the same name as the Symlink link, it will actually write to the target file pointed to by the attackers' Symlink link. If the attacker can insert malicious content in the temporary file she will be writing to the sensitive file by using the Symlink. The race occurs because the system checks if the temporary file exists, then creates the file. The attacker would typically create the Symlink during the interval between the check and the creation of the temporary file.
  • Leveraging Time-of-Check and Time-of-Use (TOCTOU) Race Conditions
    This attack targets a race condition occurring between the time of check (state) for a resource and the time of use of a resource. The typical example is the file access. The attacker can leverage a file access race condition by "running the race", meaning that he would modify the resource between the first time the target program accesses the file and the time the target program uses the file. During that period of time, the attacker could do something such as replace the file and cause an escalation of privilege.

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