Lucene search
+L

Amazon Linux 2 : freerdp, --advisory ALAS2-2026-3887 (ALAS-2026-3887)

🗓️ 31 Aug 2026 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 2 Views

FreeRDP before 3.29.0 has RDP file parsing, TLS cert validation, and null deref vulnerabilities.

Related
Refs
Code
ReporterTitlePublishedViews
Family
attackerkb
ATTACKERKB
CVE-2026-67289
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-67298
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-67295
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-67301
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-66402
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-67291
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-67293
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-64624
20 Jul 202621:50
attackerkb
attackerkb
ATTACKERKB
CVE-2026-67294
1 Aug 202612:22
attackerkb
attackerkb
ATTACKERKB
CVE-2026-67299
1 Aug 202612:22
attackerkb
Rows per page
#%NASL_MIN_LEVEL 80900
##
# (C) Tenable, Inc.
#
# The descriptive text and package checks in this plugin were
# extracted from Amazon Linux 2 Security Advisory ALAS-2026-3887.
##

include('compat.inc');

if (description)
{
  script_id(341869);
  script_version("1.1");
  script_set_attribute(attribute:"plugin_modification_date", value:"2026/08/31");

  script_cve_id(
    "CVE-2026-64624",
    "CVE-2026-66402",
    "CVE-2026-67288",
    "CVE-2026-67289",
    "CVE-2026-67291",
    "CVE-2026-67293",
    "CVE-2026-67294",
    "CVE-2026-67295",
    "CVE-2026-67298",
    "CVE-2026-67299",
    "CVE-2026-67300",
    "CVE-2026-67301",
    "CVE-2026-67306",
    "CVE-2026-68580"
  );
  script_xref(name:"IAVA", value:"2026-A-0867");

  script_name(english:"Amazon Linux 2 : freerdp, --advisory ALAS2-2026-3887 (ALAS-2026-3887)");

  script_set_attribute(attribute:"synopsis", value:
"The remote Amazon Linux 2 host is missing a security update.");
  script_set_attribute(attribute:"description", value:
"The version of freerdp installed on the remote host is prior to 2.11.7-1. It is, therefore, affected by multiple
vulnerabilities as referenced in the ALAS2-2026-3887 advisory.

    FreeRDP before 3.28.0 treats lines beginning with forward slash in RDP files as raw command-line options,
    exposing the entire CLI parser surface to untrusted files. Attackers can craft malicious RDP files with
    /rdp2tcp, /cert:ignore, or /drive options to execute arbitrary commands, bypass certificate validation, or
    expose local filesystems without user interaction. (CVE-2026-64624)

    FreeRDP before 3.29.0 (affected versions <= 3.28.0) contains multiple TLS certificate identity validation
    weaknesses in tls_verify_certificate(), tls_match_hostname(), and x509_utils_get_dns_names(). Because
    FreeRDP performs custom Common Name and DNS SAN string matching instead of using OpenSSL's length-aware
    identity validation APIs, it (1) truncates DNS SAN values at embedded NUL bytes (accepting e.g.
    'victim.example\0.attacker.example' as 'victim.example'), (2) accepts a matching Common Name even when
    non-matching DNS SAN entries are present, and (3) accepts IP-literal targets via DNS/CN matching without
    comparing iPAddress SANs. Under a trusted or misissued certificate chain, an attacker positioned to
    present such a certificate can bypass server identity verification, weakening TLS server authentication.
    (CVE-2026-66402)

    FreeRDP before 3.29.0 contains a null pointer dereference vulnerability in smartcard cache request
    decoders that accept NULL NDR pointers for LookupName in SCARD_IOCTL_READCACHEA and
    SCARD_IOCTL_WRITECACHEA operations. When smartcard emulation is enabled, attackers can send crafted
    smartcard cache requests with NULL lookup-name pointers to trigger strlen() on a null pointer, causing
    client process termination. (CVE-2026-67288)

    FreeRDP before 3.29.0 (affected versions <= 3.28.0) does not validate CRLF and control characters in the
    server-controlled RDP redirection TargetNetAddress field. This value is copied into the client's
    ServerHostname and, when the client connects through an HTTP proxy, is written directly into the proxy
    CONNECT request line and Host header by http_proxy_connect() without filtering. A malicious or compromised
    RDP server can send a crafted redirection PDU containing embedded control characters to inject arbitrary
    headers/requests into the HTTP proxy CONNECT request. (CVE-2026-67289)

    FreeRDP before 3.29.0 (affected versions <= 3.28.0) contains a heap out-of-bounds read in
    update_process_glyph_fragments()/glyph_cache_fragment_put() in libfreerdp/cache/glyph.c. When handling a
    GLYPH_FRAGMENT_ADD update, the code reads a one-byte server-controlled declared fragment size but does not
    verify it fits within the remaining received buffer before allocating and copying that many bytes. A
    malicious RDP server can send a short fragment with an oversized declared size, causing the client to read
    beyond the allocated buffer, resulting in an out-of-bounds read and client crash. (CVE-2026-67291)

    FreeRDP before 3.29.0 (affected versions <= 3.28.0) contains an improper certificate hostname validation
    vulnerability. The TLS hostname matcher (tls_match_hostname() in libfreerdp/crypto/tls.c) treats a
    wildcard pattern such as *.example.com as matching any hostname ending in .example.com, so it incorrectly
    accepts a wildcard certificate for multi-label subdomains like a.b.example.com (which OpenSSL's
    X509_check_host() rejects). This weakens TLS server authentication under wildcard-certificate conditions.
    (CVE-2026-67293)

    FreeRDP before 3.29.0 improperly validates the Extended Key Usage (EKU) purpose of the peer certificate
    during client-side server TLS authentication. In x509_utils_verify(), when server-purpose
    (X509_PURPOSE_SSL_SERVER) verification fails, the code falls back to client-purpose and any-purpose
    verification, so a trusted, hostname-matching certificate valid only for clientAuth can be accepted as the
    RDP server certificate. In environments relying on EKU separation between client and server certificates,
    this allows a clientAuth-only certificate issued by a trusted CA to bypass server certificate purpose
    validation. (CVE-2026-67294)

    FreeRDP before 3.29.0 fails to properly validate server-supplied RDPDR paths in drive redirection,
    allowing attackers to access prefix-sibling paths outside the configured shared root. A malicious RDP
    server can read, write, delete, and enumerate files in sibling directories by sending non-rooted paths
    that bypass the shared-root boundary check. (CVE-2026-67295)

    FreeRDP versions 3.28.0 and earlier contain a heap buffer overflow in the server-side RAIL channel handler
    (rail_server_handle_messages() in channels/rail/server/rail_main.c). When processing a RAIL PDU header,
    the code subtracts RAIL_PDU_HEADER_LENGTH from the peer-controlled orderLength field without first
    verifying orderLength is at least the header length. For orderLength values 0..3 this causes an unsigned
    integer underflow to a very large size, which bypasses the Stream_EnsureRemainingCapacity() capacity check
    (due to pointer arithmetic wraparound) and is then passed to WTSVirtualChannelRead(), resulting in an out-
    of-bounds heap write. A malicious or compromised RDP client can exploit this to corrupt the heap and crash
    the server. Fixed in FreeRDP 3.29.0. (CVE-2026-67298)

    FreeRDP before 3.29.0 contains a client-side heap use-after-free in the async update message proxy for
    WINDOW_ICON_ORDER when AsyncUpdate is enabled (e.g. xfreerdp /async-update). In
    update_message_WindowIcon() a shallow CopyMemory() overwrites a freshly allocated lParam->iconInfo with
    the parser-owned windowIcon->iconInfo pointer. After the parser callback returns,
    update_recv_window_info_order() frees window_icon.iconInfo, but the queued async message still retains and
    later dispatches that stale pointer. A malicious or compromised RDP server sending a crafted RAIL Window
    Alternate Secondary Order with WINDOW_ORDER_ICON can trigger use-after-free, leading to memory corruption
    and client crash. (CVE-2026-67299)

    FreeRDP before 3.29.0 contains client-side heap use-after-free vulnerabilities in the async update message
    proxy for RAIL WINDOW_STATE_ORDER and NOTIFY_ICON_STATE_ORDER when AsyncUpdate is enabled. When a
    malicious or compromised RDP server sends crafted update orders, the message proxy shallow-copies
    structures containing nested parser-owned pointers (e.g., titleInfo.string, windowRects, visibilityRects,
    icon buffers). The parser frees those nested buffers after the callback returns, so the queued async
    message later dispatches stale pointers, potentially causing memory corruption or a client crash.
    (CVE-2026-67300)

    FreeRDP before 3.29.0 contains out-of-bounds read vulnerabilities in the async update message proxy for
    the PolygonSC and PolygonCB primary drawing orders. When AsyncUpdate is enabled (e.g., xfreerdp /async-
    update), update_message_PolygonSC() and update_message_PolygonCB() allocate a fresh points array but copy
    point data from the address of the order structure instead of from polygonSC->points / polygonCB->points,
    resulting in a client-side out-of-bounds read. A malicious or compromised RDP server sending crafted
    PolygonSC/PolygonCB update orders can trigger memory disclosure or a client crash. (CVE-2026-67301)

    FreeRDP versions 3.28.0 and earlier contain an out-of-bounds read vulnerability in the RDP6 planar RLE
    bitmap decoder functions planar_decompress_plane_rle and planar_decompress_plane_rle_only in
    libfreerdp/codec/planar.c. Only the 1-byte control byte is bounds-checked; the subsequent 0-15 attacker-
    declared raw bytes are read without validating that the source buffer contains them. A malicious or
    compromised RDP server can send a truncated planar-encoded bitmap or surface update (reachable via both
    the Bitmap Update PDU and RDPGFX Surface Command paths) that causes the client to read past the end of the
    source buffer. The issue is fixed in FreeRDP 3.29.0. (CVE-2026-67306)

    FreeRDP before 3.29.0 contains integer overflow vulnerabilities in the audio input redirection channel
    (audin) across ALSA, sndio, WinMM, and OpenSL ES backends that fail to validate the FramesPerPacket
    parameter from RDP servers. Attackers can supply a malicious FramesPerPacket value causing allocation size
    wraparound, resulting in heap-based buffer overflow on ALSA or denial of service on all platforms.
    (CVE-2026-68580)

Tenable has extracted the preceding description block directly from the tested product security advisory.

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://alas.aws.amazon.com//AL2/ALAS2-2026-3887.html");
  script_set_attribute(attribute:"see_also", value:"https://alas.aws.amazon.com/faqs.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-64624.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-66402.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67288.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67289.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67291.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67293.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67294.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67295.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67298.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67299.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67300.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67301.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-67306.html");
  script_set_attribute(attribute:"see_also", value:"https://explore.alas.aws.amazon.com/CVE-2026-68580.html");
  script_set_attribute(attribute:"solution", value:
"Run 'yum update freerdp' or
  or 'yum update --advisory ALAS2-2026-3887' to update your system.");
  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: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:"cvss4_vector", value:"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N");
  script_set_attribute(attribute:"cvss4_threat_vector", value:"CVSS:4.0/E:U");
  script_set_attribute(attribute:"cvss_score_source", value:"CVE-2026-67289");
  script_set_attribute(attribute:"cvss4_score_source", value:"CVE-2026-67294");

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

  script_set_attribute(attribute:"vuln_publication_date", value:"2026/07/20");
  script_set_attribute(attribute:"patch_publication_date", value:"2026/08/31");
  script_set_attribute(attribute:"plugin_publication_date", value:"2026/08/31");

  script_set_attribute(attribute:"plugin_type", value:"local");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:amazon:linux:freerdp");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:amazon:linux:freerdp-debuginfo");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:amazon:linux:freerdp-devel");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:amazon:linux:freerdp-libs");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:amazon:linux:libwinpr");
  script_set_attribute(attribute:"cpe", value:"p-cpe:/a:amazon:linux:libwinpr-devel");
  script_set_attribute(attribute:"cpe", value:"cpe:/o:amazon:linux:2");
  script_set_attribute(attribute:"generated_plugin", value:"current");
  script_set_attribute(attribute:"stig_severity", value:"I");
  script_end_attributes();

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

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

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

  exit(0);
}

include("rpm2.inc");

if (!get_kb_item("Host/local_checks_enabled")) audit(AUDIT_LOCAL_CHECKS_NOT_ENABLED);

var alas_release = get_kb_item("Host/AmazonLinux/release");
if (isnull(alas_release) || !strlen(alas_release)) audit(AUDIT_OS_NOT, "Amazon Linux");
var os_ver = pregmatch(pattern: "^AL(A|\d+|-\d+)", string:alas_release);
if (isnull(os_ver)) audit(AUDIT_UNKNOWN_APP_VER, "Amazon Linux");
os_ver = os_ver[1];
if (os_ver != "2")
{
  if (os_ver == 'A') os_ver = 'AMI';
  audit(AUDIT_OS_NOT, "Amazon Linux 2", "Amazon Linux " + os_ver);
}

if (!get_kb_item("Host/AmazonLinux/rpm-list")) audit(AUDIT_PACKAGE_LIST_MISSING);

var pkgs = [
    {'reference':'freerdp-2.11.7-1.amzn2.0.14', 'cpu':'aarch64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-2.11.7-1.amzn2.0.14', 'cpu':'i686', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-2.11.7-1.amzn2.0.14', 'cpu':'x86_64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-debuginfo-2.11.7-1.amzn2.0.14', 'cpu':'aarch64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-debuginfo-2.11.7-1.amzn2.0.14', 'cpu':'i686', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-debuginfo-2.11.7-1.amzn2.0.14', 'cpu':'x86_64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-devel-2.11.7-1.amzn2.0.14', 'cpu':'aarch64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-devel-2.11.7-1.amzn2.0.14', 'cpu':'i686', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-devel-2.11.7-1.amzn2.0.14', 'cpu':'x86_64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-libs-2.11.7-1.amzn2.0.14', 'cpu':'aarch64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-libs-2.11.7-1.amzn2.0.14', 'cpu':'i686', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'freerdp-libs-2.11.7-1.amzn2.0.14', 'cpu':'x86_64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'libwinpr-2.11.7-1.amzn2.0.14', 'cpu':'aarch64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'libwinpr-2.11.7-1.amzn2.0.14', 'cpu':'i686', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'libwinpr-2.11.7-1.amzn2.0.14', 'cpu':'x86_64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'libwinpr-devel-2.11.7-1.amzn2.0.14', 'cpu':'aarch64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'libwinpr-devel-2.11.7-1.amzn2.0.14', 'cpu':'i686', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE},
    {'reference':'libwinpr-devel-2.11.7-1.amzn2.0.14', 'cpu':'x86_64', 'release':'AL2', 'rpm_spec_vers_cmp':TRUE}
];

var flag = 0;
foreach var 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;
  var exists_check = NULL;
  var cves = 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 (!empty_or_null(package_array['exists_check'])) exists_check = package_array['exists_check'];
  if (!empty_or_null(package_array['cves'])) cves = package_array['cves'];
  if (reference && _release && (!exists_check || rpm_exists(release:_release, rpm:exists_check))) {
    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, cves:cves)) 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, "freerdp / freerdp-debuginfo / freerdp-devel / etc");
}

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

31 Aug 2026 00:00Current
7.6High risk
Vulners AI Score7.6
CVSS 3.19.8
CVSS 49.3
EPSS0.00397
SSVC
2