freerdp: Fix of 6 CVEs
- CVE-2026-91953, CVE-2026-91964: bound every write in nego_send_negotiation_request() with Stream_EnsureRemainingCapacity(); the routing token taken from the server's LB_LOAD_BALANCE_INFO was written into a fixed 512 byte stream unchecked, overflowing the heap allocation - CVE-2026-91963: allocate wStream buffers with calloc() instead of malloc(), so the urbdrc completion path can no longer return the untouched tail of a freshly allocated buffer - and with it live heap pointers - to the server when a USB transfer returns short - CVE-2026-91959: require four remaining bytes in rts_read_result() before reading result and reason; a malicious RD Gateway could end a BIND_ACK fragment two bytes into a result and make the parser over-read it - CVE-2026-91957: do not free the SMARTCARD_DEVICE on the DeviceServiceEntry() failure path once RegisterDevice() has succeeded; devman kept the freed pointer and dereferenced DEVICE.Free through it on channel teardown - CVE-2026-91956: bound the interface, alternate-setting and endpoint indices in func_get_ep_desc(); it indexed by array position while the validator indexed by InterfaceNumber, so a permuted descriptor produced an out-of-bounds read of a pointer that was then dereferenced
- Products
- freerdp, freerdp-devel, freerdp-libs, libwinpr, libwinpr-devel
- Affected versions
- Not specified
- Fixed versions
- 2.1.1-5.0.9.el7_9.tuxcare.els5
- CVEs
- CVE-2026-91953, CVE-2026-91956, CVE-2026-91957, CVE-2026-91959, CVE-2026-91963, CVE-2026-91964
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 11:49 UTC · Revision 1
Source evidence
- CVE-2026-91953, CVE-2026-91964: bound every write in nego_send_negotiation_request() with Stream_EnsureRemainingCapacity(); the routing token taken from the server's LB_LOAD_BALANCE_INFO was written into a fixed 512 byte stream unchecked, overflowing the heap allocation - CVE-2026-91963: allocate wStream buffers with calloc() instead of malloc(), so the urbdrc completion path can no longer return the untouched tail of a freshly allocated buffer - and with it live heap pointers - to the server when a USB transfer returns short - CVE-2026-91959: require four remaining bytes in rts_read_result() before reading result and reason; a malicious RD Gateway could end a BIND_ACK fragment two bytes into a result and make the parser over-read it - CVE-2026-91957: do not free the SMARTCARD_DEVICE on the DeviceServiceEntry() failure path once RegisterDevice() has succeeded; devman kept the freed pointer and dereferenced DEVICE.Free through it on channel teardown - CVE-2026-91956: bound the interface, alternate-setting and endpoint indices in func_get_ep_desc(); it indexed by array position while the validator indexed by InterfaceNumber, so a permuted descriptor produced an out-of-bounds read of a pointer that was then dereferenced
osv:CLSA-2026-1791569293
freerdp
Fixed versions: 2.1.1-5.0.9.el7_9.tuxcare.els5
freerdp-devel
Fixed versions: 2.1.1-5.0.9.el7_9.tuxcare.els5
freerdp-libs
Fixed versions: 2.1.1-5.0.9.el7_9.tuxcare.els5
libwinpr
Fixed versions: 2.1.1-5.0.9.el7_9.tuxcare.els5
libwinpr-devel
Fixed versions: 2.1.1-5.0.9.el7_9.tuxcare.els5
Complete source record
{
"id": "7468e0719422193c81ccbb2390f790a7188d2f2b94fdb242a3e43da2bbbf8478",
"url": "https://osv.dev/vulnerability/CLSA-2026-1791569293",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "freerdp: Fix of 6 CVEs",
"summary": "- CVE-2026-91953, CVE-2026-91964: bound every write in nego_send_negotiation_request() with Stream_EnsureRemainingCapacity(); the routing token taken from the server's LB_LOAD_BALANCE_INFO was written into a fixed 512 byte stream unchecked, overflowing the heap allocation - CVE-2026-91963: allocate wStream buffers with calloc() instead of malloc(), so the urbdrc completion path can no longer return the untouched tail of a freshly allocated buffer - and with it live heap pointers - to the server when a USB transfer returns short - CVE-2026-91959: require four remaining bytes in rts_read_result() before reading result and reason; a malicious RD Gateway could end a BIND_ACK fragment two bytes into a result and make the parser over-read it - CVE-2026-91957: do not free the SMARTCARD_DEVICE on the DeviceServiceEntry() failure path once RegisterDevice() has succeeded; devman kept the freed pointer and dereferenced DEVICE.Free through it on channel teardown - CVE-2026-91956: bound the interface, alternate-setting and endpoint indices in func_get_ep_desc(); it indexed by array position while the validator indexed by InterfaceNumber, so a permuted descriptor produced an out-of-bounds read of a pointer that was then dereferenced",
"evidence": "osv:CLSA-2026-1791569293",
"products": [
{
"name": {
"value": "freerdp",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.1.1-5.0.9.el7_9.tuxcare.els5",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "freerdp-devel",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.1.1-5.0.9.el7_9.tuxcare.els5",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "freerdp-libs",
"evidence": "/affected/2/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.1.1-5.0.9.el7_9.tuxcare.els5",
"evidence": "/affected/2/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "libwinpr",
"evidence": "/affected/3/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.1.1-5.0.9.el7_9.tuxcare.els5",
"evidence": "/affected/3/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "libwinpr-devel",
"evidence": "/affected/4/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2.1.1-5.0.9.el7_9.tuxcare.els5",
"evidence": "/affected/4/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "CLSA-2026-1791569293",
"aliases": [
"CLSA-2026-1791569293"
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.1.1-5.0.9.el7_9.tuxcare.els5"
}
]
}
],
"package": {
"name": "freerdp",
"purl": "pkg:rpm/tuxcare/freerdp?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1791569293.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.1.1-5.0.9.el7_9.tuxcare.els5"
}
]
}
],
"package": {
"name": "freerdp-devel",
"purl": "pkg:rpm/tuxcare/freerdp-devel?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1791569293.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.1.1-5.0.9.el7_9.tuxcare.els5"
}
]
}
],
"package": {
"name": "freerdp-libs",
"purl": "pkg:rpm/tuxcare/freerdp-libs?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1791569293.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.1.1-5.0.9.el7_9.tuxcare.els5"
}
]
}
],
"package": {
"name": "libwinpr",
"purl": "pkg:rpm/tuxcare/libwinpr?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1791569293.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2.1.1-5.0.9.el7_9.tuxcare.els5"
}
]
}
],
"package": {
"name": "libwinpr-devel",
"purl": "pkg:rpm/tuxcare/libwinpr-devel?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1791569293.json"
}
}
],
"modified": "2026-10-26T09:43:26.592185570Z",
"provider": "osv",
"upstream": [
"CVE-2026-91953",
"CVE-2026-91956",
"CVE-2026-91957",
"CVE-2026-91959",
"CVE-2026-91963",
"CVE-2026-91964"
],
"references": [
"https://errata.tuxcare.com/els_os/oraclelinux7els/CLSA-2026-1791569293.html",
"https://nvd.nist.gov/vuln/detail/CVE-2026-91953",
"https://nvd.nist.gov/vuln/detail/CVE-2026-91956",
"https://nvd.nist.gov/vuln/detail/CVE-2026-91957",
"https://nvd.nist.gov/vuln/detail/CVE-2026-91959",
"https://nvd.nist.gov/vuln/detail/CVE-2026-91963",
"https://nvd.nist.gov/vuln/detail/CVE-2026-91964"
]
},
"related_cves": [
{
"value": "CVE-2026-91953",
"evidence": "/upstream"
},
{
"value": "CVE-2026-91956",
"evidence": "/upstream"
},
{
"value": "CVE-2026-91957",
"evidence": "/upstream"
},
{
"value": "CVE-2026-91959",
"evidence": "/upstream"
},
{
"value": "CVE-2026-91963",
"evidence": "/upstream"
},
{
"value": "CVE-2026-91964",
"evidence": "/upstream"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 449911,
"published_at": "2026-10-09T18:08:29+00:00"
}