CVE-2026-91957
FreeRDP before 3.31.0 Use-After-Free via smartcard worker
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- Passive
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
2.3
FreeRDP before 3.31.0 Use-After-Free via smartcard worker
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
- Record
CVE-2026-91957- CVSS 4.0
- 2.3 Low
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - CVSS 3.1
- 3.1 Low
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L - Weakness
- CWE-416
- Updated
- 2026-11-02
EUVDEUVD-2026-78633
2.3
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
- Record
EUVD-2026-78633- CVSS 4.0
- 2.3 Low
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-h5f5-2qh4-2xjm
2.3
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device...
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
- Record
GHSA-h5f5-2qh4-2xjm- CVSS 4.0
- 2.3 Low
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 3.1 Low
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L - Weakness
- CWE-416
- Updated
- 2026-11-02
NVD
2.3
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
- Record
CVE-2026-91957- CVSS 4.0
- 2.3 Low
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 3.1 Low
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L - Weakness
- CWE-416
- Updated
- 2026-11-02
OSV
2.3
FreeRDP before 3.31.0 Use-After-Free via smartcard worker
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
- Record
CVE-2026-91957- CVSS 4.0
- 2.3 Low
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-416
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-91957
2.3
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
- Record
DEBIAN-CVE-2026-91957- CVSS 4.0
- 2.3 Low
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-91957
2.3
FreeRDP before 3.31.0 contains a use-after-free vulnerability in the smartcard RDPDR device handler when worker thread creation fails after device registration. Attackers can trigger thread creation failure during channel setup to cause device pointer deallocation while devman retains a reference, leading to crash or code execution.
- Record
UBUNTU-CVE-2026-91957- CVSS 4.0
- 2.3 Low
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - CVSS 3.1
- 3.1 Low
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:N/A:L - Updated
- 2026-11-02
OSVCLSA-2026-1791568721 No score
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
- Record
CLSA-2026-1791568721- Updated
- 2026-11-02
OSVCLSA-2026-1791569293 No score
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
- Record
CLSA-2026-1791569293- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
freerdpTuxCare:CentOS:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
freerdp-develTuxCare:CentOS:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
freerdp-libsTuxCare:CentOS:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
libwinprTuxCare:CentOS:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
libwinpr-develTuxCare:CentOS:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
freerdpTuxCare:OracleLinux:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
freerdp-develTuxCare:OracleLinux:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
freerdp-libsTuxCare:OracleLinux:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
libwinprTuxCare:OracleLinux:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
libwinpr-develTuxCare:OracleLinux:7 From an advisory covering 6 CVEs |
before 2.1.1-5.0.9.el7_9.tuxcare.els5 | 2.1.1-5.0.9.el7_9.tuxcare.els5 |
Show 11 moreShow less
| Package | Affected | Fixed |
|---|---|---|
freerdp2Debian:12 |
All versions, plus listed versions 2.10.0+dfsg1-12.10.0+dfsg1-1.12.11.2+dfsg1-12.11.2+dfsg1-1.1~exp12.11.2+dfsg1-1.1~exp2 Show 8 moreShow less2.11.5+dfsg1-12.11.7+dfsg1-12.11.7+dfsg1-22.11.7+dfsg1-32.11.7+dfsg1-42.11.7+dfsg1-52.11.7+dfsg1-62.11.7+dfsg1-6~deb12u1 |
None known |
freerdp3Debian:13 |
All versions, plus listed versions 3.15.0+dfsg-2.13.15.0+dfsg-2.1+deb13u13.15.0+dfsg-2.1+deb13u23.15.0+dfsg-2.1+deb13u33.16.0+dfsg-1 Show 42 moreShow less3.16.0+dfsg-23.17.0+dfsg-13.17.1+dfsg-13.17.1+dfsg-23.17.2+dfsg-13.17.2+dfsg-23.17.2+dfsg-33.18.0+dfsg-13.19.0+dfsg-13.19.1+dfsg-13.20.0+dfsg-13.20.2+dfsg-13.21.0+dfsg-13.22.0+dfsg-13.22.0+dfsg-1~bpo13+03.22.0+dfsg-1~bpo13+13.22.0+dfsg-33.23.0+dfsg-13.23.0+dfsg-1~bpo13+13.24.0+dfsg-13.24.0+dfsg-23.24.1+dfsg-13.24.2+dfsg-13.24.2+dfsg-1~bpo13+13.25.0+dfsg-13.25.0+dfsg-23.25.0+dfsg-33.25.0+dfsg-43.25.0+dfsg-53.26.0+dfsg-13.26.0+dfsg-1~bpo13+13.27.0+dfsg-13.27.1+dfsg-13.28.0+dfsg-13.28.0+dfsg-23.29.0+dfsg-13.30.0+dfsg-13.30.0+dfsg-1~bpo13+13.31.0+dfsg-13.31.1+dfsg-13.31.1+dfsg-1~bpo13+13.32.0+dfsg-1 |
None known |
freerdp3Debian:14 |
before 3.31.0+dfsg-1, plus listed versions 3.15.0+dfsg-2.13.16.0+dfsg-13.16.0+dfsg-23.17.0+dfsg-13.17.1+dfsg-1 Show 35 moreShow less3.17.1+dfsg-23.17.2+dfsg-13.17.2+dfsg-23.17.2+dfsg-33.18.0+dfsg-13.19.0+dfsg-13.19.1+dfsg-13.20.0+dfsg-13.20.2+dfsg-13.21.0+dfsg-13.22.0+dfsg-13.22.0+dfsg-1~bpo13+03.22.0+dfsg-1~bpo13+13.22.0+dfsg-33.23.0+dfsg-13.23.0+dfsg-1~bpo13+13.24.0+dfsg-13.24.0+dfsg-23.24.1+dfsg-13.24.2+dfsg-13.24.2+dfsg-1~bpo13+13.25.0+dfsg-13.25.0+dfsg-23.25.0+dfsg-33.25.0+dfsg-43.25.0+dfsg-53.26.0+dfsg-13.26.0+dfsg-1~bpo13+13.27.0+dfsg-13.27.1+dfsg-13.28.0+dfsg-13.28.0+dfsg-23.29.0+dfsg-13.30.0+dfsg-13.30.0+dfsg-1~bpo13+1 |
3.31.0+dfsg-1 |
freerdpUbuntu:16.04:LTS |
All versions, plus listed versions 1.1.0~git20140921.1.440916e+dfsg1-5ubuntu11.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.21.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.31.1.0~git20140921.1.440916e+dfsg1-5ubuntu1.4 |
None known |
freerdp2Ubuntu:Pro:18.04:LTS |
All versions, plus listed versions 2.0.0~git20170725.1.1648deb+dfsg1-12.0.0~git20170725.1.1648deb+dfsg1-52.0.0~git20170725.1.1648deb+dfsg1-5ubuntu12.0.0~git20170725.1.1648deb+dfsg1-5ubuntu22.0.0~git20170725.1.1648deb+dfsg1-6 Show 14 moreShow less2.0.0~git20170725.1.1648deb+dfsg1-6build12.0.0~git20170725.1.1648deb+dfsg1-72.0.0~git20170725.1.1648deb+dfsg1-7ubuntu0.12.1.1+dfsg1-0ubuntu0.18.04.12.2.0+dfsg1-0ubuntu0.18.04.12.2.0+dfsg1-0ubuntu0.18.04.22.2.0+dfsg1-0ubuntu0.18.04.32.2.0+dfsg1-0ubuntu0.18.04.42.2.0+dfsg1-0ubuntu0.18.04.4+esm12.2.0+dfsg1-0ubuntu0.18.04.4+esm22.2.0+dfsg1-0ubuntu0.18.04.4+esm32.2.0+dfsg1-0ubuntu0.18.04.4+esm42.2.0+dfsg1-0ubuntu0.18.04.4+esm52.2.0+dfsg1-0ubuntu0.18.04.4+esm6 |
None known |
freerdpUbuntu:18.04:LTS |
All versions, plus listed versions 1.1.0~git20140921.1.440916e+dfsg1-15ubuntu11.1.0~git20140921.1.440916e+dfsg1-15ubuntu1.18.04.11.1.0~git20140921.1.440916e+dfsg1-15ubuntu1.18.04.2 |
None known |
freerdp2Ubuntu:Pro:20.04:LTS |
All versions, plus listed versions 2.0.0~git20190204.1.2693389a+dfsg1-12.0.0~git20190204.1.2693389a+dfsg1-22.0.0~git20190204.1.2693389a+dfsg1-2build12.0.0~git20190204.1.2693389a+dfsg1-2build22.1.1+dfsg1-0ubuntu0.20.04.1 Show 12 moreShow less2.2.0+dfsg1-0ubuntu0.20.04.12.2.0+dfsg1-0ubuntu0.20.04.22.2.0+dfsg1-0ubuntu0.20.04.32.2.0+dfsg1-0ubuntu0.20.04.42.2.0+dfsg1-0ubuntu0.20.04.52.2.0+dfsg1-0ubuntu0.20.04.62.6.1+dfsg1-0ubuntu0.20.04.12.6.1+dfsg1-0ubuntu0.20.04.22.6.1+dfsg1-0ubuntu0.20.04.2+esm12.6.1+dfsg1-0ubuntu0.20.04.2+esm22.6.1+dfsg1-0ubuntu0.20.04.2+esm32.6.1+dfsg1-0ubuntu0.20.04.2+esm4 |
None known |
freerdp2Ubuntu:22.04:LTS |
All versions, plus listed versions 2.3.0+dfsg1-2build12.3.0+dfsg1-2ubuntu12.3.0+dfsg1-2ubuntu22.4.1+dfsg1-12.4.1+dfsg1-1ubuntu1 Show 18 moreShow less2.4.1+dfsg1-1ubuntu22.5.0+dfsg1-12.6.0+dfsg1-12.6.1+dfsg1-12.6.1+dfsg1-32.6.1+dfsg1-3ubuntu12.6.1+dfsg1-3ubuntu22.6.1+dfsg1-3ubuntu2.12.6.1+dfsg1-3ubuntu2.22.6.1+dfsg1-3ubuntu2.32.6.1+dfsg1-3ubuntu2.42.6.1+dfsg1-3ubuntu2.52.6.1+dfsg1-3ubuntu2.62.6.1+dfsg1-3ubuntu2.72.6.1+dfsg1-3ubuntu2.82.6.1+dfsg1-3ubuntu2.92.6.1+dfsg1-3ubuntu2.102.6.1+dfsg1-3ubuntu2.11 |
None known |
freerdp3Ubuntu:24.04:LTS |
before 3.31.0+dfsg-0ubuntu0.24.04.1, plus listed versions 3.4.0+dfsg1-0ubuntu23.4.0+dfsg1-0ubuntu33.4.0+dfsg1-0ubuntu43.5.0+dfsg1-0ubuntu13.5.1+dfsg1-0ubuntu1 Show 7 moreShow less3.5.1+dfsg1-0ubuntu1.13.5.1+dfsg1-0ubuntu1.23.5.1+dfsg1-0ubuntu1.43.5.1+dfsg1-0ubuntu1.53.5.1+dfsg1-0ubuntu1.63.30.0+dfsg-0ubuntu0.24.04.13.30.0+dfsg-0ubuntu0.24.04.2 |
3.31.0+dfsg-0ubuntu0.24.04.1 |
freerdp2Ubuntu:Pro:24.04:LTS |
All versions, plus listed versions 2.10.0+dfsg1-1.1ubuntu12.11.2+dfsg1-12.11.2+dfsg1-1build12.11.2+dfsg1-1build32.11.5+dfsg1-1build1 Show 7 moreShow less2.11.5+dfsg1-1build22.11.5+dfsg1-1ubuntu0.1~esm12.11.5+dfsg1-1ubuntu0.1~esm22.11.5+dfsg1-1ubuntu0.1~esm32.11.5+dfsg1-1ubuntu0.1~esm42.11.5+dfsg1-1ubuntu0.1~esm52.11.5+dfsg1-1ubuntu0.1~esm6 |
None known |
freerdp3Ubuntu:26.04:LTS |
before 3.31.0+dfsg-0ubuntu0.26.04.1, plus listed versions 3.16.0+dfsg-23.18.0+dfsg-1ubuntu13.19.0+dfsg-13.19.1+dfsg-13.20.0+dfsg-1 Show 8 moreShow less3.20.2+dfsg-13.21.0+dfsg-13.22.0+dfsg-13.24.1+dfsg-1ubuntu13.24.2+dfsg-1ubuntu13.24.2+dfsg-1ubuntu1.13.30.0+dfsg-0ubuntu0.26.04.13.30.0+dfsg-0ubuntu0.26.04.2 |
3.31.0+dfsg-0ubuntu0.26.04.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-91957 is a low vulnerability (CVSS 2.3) in Freerdp, published September 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.37%, the 30th percentile. Fixed in freerdp3 3.31.0+dfsg-1.
References
github.com/FreeRDP/FreeRDP/security/advisories/GHSA-j5mq-3349-gwmm
vulncheck.com/advisories/freerdp-before-3.31.0-use-after-free-via-smartcard-worker
nvd.nist.gov/vuln/detail/CVE-2026-91957
github.com/advisories/GHSA-h5f5-2qh4-2xjm
errata.tuxcare.com/els_os/centos7els/CLSA-2026-1791568721.html
nvd.nist.gov/vuln/detail/CVE-2026-91953
Show 9 moreShow less
nvd.nist.gov/vuln/detail/CVE-2026-91956
nvd.nist.gov/vuln/detail/CVE-2026-91959
nvd.nist.gov/vuln/detail/CVE-2026-91963
nvd.nist.gov/vuln/detail/CVE-2026-91964
errata.tuxcare.com/els_os/oraclelinux7els/CLSA-2026-1791569293.html
github.com/CVEProject/cvelistV5/tree/main/cves/2026/91xxx/CVE-2026-91957.json
security-tracker.debian.org/tracker/CVE-2026-91957
ubuntu.com/security/CVE-2026-91957
cve.org/CVERecord?id=CVE-2026-91957