Lucene search

K
nessusThis script is Copyright (C) 2023 and is owned by Tenable, Inc. or an Affiliate thereof.FEDORA_2023-A93C06A1D9.NASL
HistoryNov 04, 2023 - 12:00 a.m.

Fedora 37 : stb / usd (2023-a93c06a1d9)

2023-11-0400:00:00
This script is Copyright (C) 2023 and is owned by Tenable, Inc. or an Affiliate thereof.
www.tenable.com
9
fedora 37
stb_image
stb_vorbis
multiple vulnerabilities
crafted image file
denial of service
mit licensed

9.8 High

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

NONE

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

HIGH

Integrity Impact

HIGH

Availability Impact

HIGH

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

8.2 High

AI Score

Confidence

High

0.002 Low

EPSS

Percentile

52.0%

The remote Fedora 37 host has packages installed that are affected by multiple vulnerabilities as referenced in the FEDORA-2023-a93c06a1d9 advisory.

  • stb_image is a single file MIT licensed library for processing images. A crafted image file may trigger out of bounds memcpy read in stbi__gif_load_next. This happens because two_back points to a memory address lower than the start of the buffer out. This issue may be used to leak internal memory allocation information. (CVE-2023-45661)

  • stb_image is a single file MIT licensed library for processing images. When stbi_set_flip_vertically_on_load is set to TRUE and req_comp is set to a number that doesn’t match the real number of components per pixel, the library attempts to flip the image vertically. A crafted image file can trigger memcpy out-of-bounds read because bytes_per_pixel used to calculate bytes_per_row doesn’t match the real image array dimensions. (CVE-2023-45662)

  • stb_image is a single file MIT licensed library for processing images. The stbi__getn function reads a specified number of bytes from context (typically a file) into the specified buffer. In case the file stream points to the end, it returns zero. There are two places where its return value is not checked: In the stbi__hdr_load function and in the stbi__tga_load function. The latter of the two is likely more exploitable as an attacker may also control the size of an uninitialized buffer. (CVE-2023-45663)

  • stb_image is a single file MIT licensed library for processing images. A crafted image file can trigger stbi__load_gif_main_outofmem attempt to double-free the out variable. This happens in stbi__load_gif_main because when the layers * stride value is zero the behavior is implementation defined, but common that realloc frees the old memory and returns null pointer. Since it attempts to double-free the memory a few lines below the first free, the issue can be potentially exploited only in a multi-threaded environment. In the worst case this may lead to code execution. (CVE-2023-45664)

  • stb_image is a single file MIT licensed library for processing images. It may look like stbi__load_gif_main doesn’t give guarantees about the content of output value *delays upon failure.
    Although it sets *delays to zero at the beginning, it doesn’t do it in case the image is not recognized as GIF and a call to stbi__load_gif_main_outofmem only frees possibly allocated memory in *delays without resetting it to zero. Thus it would be fair to say the caller of stbi__load_gif_main is responsible to free the allocated memory in *delays only if stbi__load_gif_main returns a non null value. However at the same time the function may return null value, but fail to free the memory in *delays if internally stbi__convert_format is called and fails. Thus the issue may lead to a memory leak if the caller chooses to free delays only when stbi__load_gif_main didn’t fail or to a double- free if the delays is always freed (CVE-2023-45666)

  • stb_image is a single file MIT licensed library for processing images. If stbi__load_gif_main in stbi_load_gif_from_memory fails it returns a null pointer and may keep the z variable uninitialized.
    In case the caller also sets the flip vertically flag, it continues and calls stbi__vertical_flip_slices with the null pointer result value and the uninitialized z value. This may result in a program crash.
    (CVE-2023-45667)

  • Double Free vulnerability in Nothings Stb Image.h v.2.28 allows a remote attacker to cause a denial of service via a crafted file to the stbi_load_gif_main function. (CVE-2023-43281)

  • stb_vorbis is a single file MIT licensed library for processing ogg vorbis files. A crafted file may trigger out of bounds write in f->vendor[len] = (char)'\0';. The root cause is that if the len read in start_decoder is -1 and len + 1 becomes 0 when passed to setup_malloc. The setup_malloc behaves differently when f->alloc.alloc_buffer is pre-allocated. Instead of returning NULL as in malloc case it shifts the pre-allocated buffer by zero and returns the currently available memory block. This issue may lead to code execution. (CVE-2023-45675)

Note that Nessus has not tested for these issues but has instead relied only on the application’s self-reported version number.

#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
##
# The descriptive text and package checks in this plugin were
# extracted from Fedora Security Advisory FEDORA-2023-a93c06a1d9
#

include('compat.inc');

if (description)
{
  script_id(184397);
  script_version("1.0");
  script_set_attribute(attribute:"plugin_modification_date", value:"2023/11/04");

  script_cve_id(
    "CVE-2023-43281",
    "CVE-2023-45661",
    "CVE-2023-45662",
    "CVE-2023-45663",
    "CVE-2023-45664",
    "CVE-2023-45666",
    "CVE-2023-45667",
    "CVE-2023-45675"
  );
  script_xref(name:"FEDORA", value:"2023-a93c06a1d9");

  script_name(english:"Fedora 37 : stb / usd (2023-a93c06a1d9)");

  script_set_attribute(attribute:"synopsis", value:
"The remote Fedora host is missing one or more security updates.");
  script_set_attribute(attribute:"description", value:
"The remote Fedora 37 host has packages installed that are affected by multiple vulnerabilities as referenced in the
FEDORA-2023-a93c06a1d9 advisory.

  - stb_image is a single file MIT licensed library for processing images. A crafted image file may trigger
    out of bounds memcpy read in `stbi__gif_load_next`. This happens because two_back points to a memory
    address lower than the start of the buffer out. This issue may be used to leak internal memory allocation
    information. (CVE-2023-45661)

  - stb_image is a single file MIT licensed library for processing images. When
    `stbi_set_flip_vertically_on_load` is set to `TRUE` and `req_comp` is set to a number that doesn't match
    the real number of components per pixel, the library attempts to flip the image vertically. A crafted
    image file can trigger `memcpy` out-of-bounds read because `bytes_per_pixel` used to calculate
    `bytes_per_row` doesn't match the real image array dimensions. (CVE-2023-45662)

  - stb_image is a single file MIT licensed library for processing images. The stbi__getn function reads a
    specified number of bytes from context (typically a file) into the specified buffer. In case the file
    stream points to the end, it returns zero. There are two places where its return value is not checked: In
    the `stbi__hdr_load` function and in the `stbi__tga_load` function. The latter of the two is likely more
    exploitable as an attacker may also control the size of an uninitialized buffer. (CVE-2023-45663)

  - stb_image is a single file MIT licensed library for processing images. A crafted image file can trigger
    `stbi__load_gif_main_outofmem` attempt to double-free the out variable. This happens in
    `stbi__load_gif_main` because when the `layers * stride` value is zero the behavior is implementation
    defined, but common that realloc frees the old memory and returns null pointer. Since it attempts to
    double-free the memory a few lines below the first free, the issue can be potentially exploited only in
    a multi-threaded environment. In the worst case this may lead to code execution. (CVE-2023-45664)

  - stb_image is a single file MIT licensed library for processing images. It may look like
    `stbi__load_gif_main` doesn't give guarantees about the content of output value `*delays` upon failure.
    Although it sets `*delays` to zero at the beginning, it doesn't do it in case the image is not recognized
    as GIF and a call to `stbi__load_gif_main_outofmem` only frees possibly allocated memory in `*delays`
    without resetting it to zero. Thus it would be fair to say the caller of `stbi__load_gif_main` is
    responsible to free the allocated memory in `*delays` only if `stbi__load_gif_main` returns a non null
    value. However at the same time the function may return null value, but fail to free the memory in
    `*delays` if internally `stbi__convert_format` is called and fails. Thus the issue may lead to a memory
    leak if the caller chooses to free `delays` only when `stbi__load_gif_main` didn't fail or to a double-
    free if the `delays` is always freed (CVE-2023-45666)

  - stb_image is a single file MIT licensed library for processing images. If `stbi__load_gif_main` in
    `stbi_load_gif_from_memory` fails it returns a null pointer and may keep the `z` variable uninitialized.
    In case the caller also sets the flip vertically flag, it continues and calls `stbi__vertical_flip_slices`
    with the null pointer result value and the uninitialized `z` value. This may result in a program crash.
    (CVE-2023-45667)

  - Double Free vulnerability in Nothings Stb Image.h v.2.28 allows a remote attacker to cause a denial of
    service via a crafted file to the stbi_load_gif_main function. (CVE-2023-43281)

  - stb_vorbis is a single file MIT licensed library for processing ogg vorbis files. A crafted file may
    trigger out of bounds write in `f->vendor[len] = (char)'\0';`. The root cause is that if the len read in
    `start_decoder` is `-1` and `len + 1` becomes 0 when passed to `setup_malloc`. The `setup_malloc` behaves
    differently when `f->alloc.alloc_buffer` is pre-allocated. Instead of returning `NULL` as in `malloc` case
    it shifts the pre-allocated buffer by zero and returns the currently available memory block. This issue
    may lead to code execution. (CVE-2023-45675)

Note that Nessus has not tested for these issues but has instead relied only on the application's self-reported version
number.");
  script_set_attribute(attribute:"see_also", value:"https://bodhi.fedoraproject.org/updates/FEDORA-2023-a93c06a1d9");
  script_set_attribute(attribute:"solution", value:
"Update the affected stb and / or usd packages.");
  script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:C/I:C/A:C");
  script_set_cvss_temporal_vector("CVSS2#E:POC/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:P/RL:O/RC:C");
  script_set_attribute(attribute:"cvss_score_source", value:"CVE-2023-45666");

  script_set_attribute(attribute:"exploitability_ease", value:"Exploits are available");
  script_set_attribute(attribute:"exploit_available", value:"true");

  script_set_attribute(attribute:"vuln_publication_date", value:"2023/10/21");
  script_set_attribute(attribute:"patch_publication_date", value:"2023/10/26");
  script_set_attribute(attribute:"plugin_publication_date", value:"2023/11/04");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:fedoraproject:fedora:37");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:fedoraproject:fedora:stb");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:fedoraproject:fedora:usd");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"Fedora Local Security Checks");

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

  script_dependencies("ssh_get_info.nasl");
  script_require_keys("Host/local_checks_enabled", "Host/RedHat/release", "Host/RedHat/rpm-list");

  exit(0);
}


include('rpm.inc');

if (!get_kb_item('Host/local_checks_enabled')) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);
var os_release = get_kb_item('Host/RedHat/release');
if (isnull(os_release) || 'Fedora' >!< os_release) audit(AUDIT_OS_NOT, 'Fedora');
var os_ver = pregmatch(pattern: "Fedora.*release ([0-9]+)", string:os_release);
if (isnull(os_ver)) audit(AUDIT_UNKNOWN_APP_VER, 'Fedora');
os_ver = os_ver[1];
if (! preg(pattern:"^37([^0-9]|$)", string:os_ver)) audit(AUDIT_OS_NOT, 'Fedora 37', 'Fedora ' + os_ver);

if (!get_kb_item('Host/RedHat/rpm-list')) audit(AUDIT_PACKAGE_LIST_MISSING);

var cpu = get_kb_item('Host/cpu');
if (isnull(cpu)) audit(AUDIT_UNKNOWN_ARCH);
if ('x86_64' >!< cpu && cpu !~ "^i[3-6]86$" && 's390' >!< cpu && 'aarch64' >!< cpu) audit(AUDIT_LOCAL_CHECKS_NOT_IMPLEMENTED, 'Fedora', cpu);

var pkgs = [
    {'reference':'stb-0^20231011gitbeebb24-12.fc37', 'release':'FC37', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'usd-22.05b-28.fc37', 'release':'FC37', 'rpm_spec_vers_cmp':TRUE}
];

var flag = 0;
foreach package_array ( pkgs ) {
  var reference = NULL;
  var _release = NULL;
  var sp = NULL;
  var _cpu = NULL;
  var el_string = NULL;
  var rpm_spec_vers_cmp = NULL;
  var epoch = NULL;
  var allowmaj = NULL;
  if (!empty_or_null(package_array['reference'])) reference = package_array['reference'];
  if (!empty_or_null(package_array['release'])) _release = package_array['release'];
  if (!empty_or_null(package_array['sp'])) sp = package_array['sp'];
  if (!empty_or_null(package_array['cpu'])) _cpu = package_array['cpu'];
  if (!empty_or_null(package_array['el_string'])) el_string = package_array['el_string'];
  if (!empty_or_null(package_array['rpm_spec_vers_cmp'])) rpm_spec_vers_cmp = package_array['rpm_spec_vers_cmp'];
  if (!empty_or_null(package_array['epoch'])) epoch = package_array['epoch'];
  if (!empty_or_null(package_array['allowmaj'])) allowmaj = package_array['allowmaj'];
  if (reference && _release) {
    if (rpm_check(release:_release, sp:sp, cpu:_cpu, reference:reference, epoch:epoch, el_string:el_string, rpm_spec_vers_cmp:rpm_spec_vers_cmp, allowmaj:allowmaj)) flag++;
  }
}

if (flag)
{
  security_report_v4(
      port       : 0,
      severity   : SECURITY_HOLE,
      extra      : rpm_report_get()
  );
  exit(0);
}
else
{
  var tested = pkg_tests_get();
  if (tested) audit(AUDIT_PACKAGE_NOT_AFFECTED, tested);
  else audit(AUDIT_PACKAGE_NOT_INSTALLED, 'stb / usd');
}
VendorProductVersionCPE
fedoraprojectfedora37cpe:/o:fedoraproject:fedora:37
fedoraprojectfedorastbp-cpe:/a:fedoraproject:fedora:stb
fedoraprojectfedorausdp-cpe:/a:fedoraproject:fedora:usd

9.8 High

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

NONE

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

HIGH

Integrity Impact

HIGH

Availability Impact

HIGH

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

8.2 High

AI Score

Confidence

High

0.002 Low

EPSS

Percentile

52.0%