CVE-2023-5981
Medium · 5.9CVSS
5.9
EPSS
1.3%
Published
Nov 28, 2023
CISA due date
—
Cloudanix analysis
A flaw in how encryption padding is checked lets attackers potentially read messages that should stay private by measuring tiny differences in server response speed.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- High
- Impact
- Data Exposure
- Component
- Library
- Class
- Information Disclosure
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Timing side-channel in RSA-PSK ClientKeyExchange handling leaks whether PKCS#1 v1.5 padding is valid, enabling an attacker to distinguish correct versus malformed ciphertexts via response-time differences.
Why it matters to the business
Attackers may recover RSA-encrypted session keys or other sensitive material, leading to decryption of protected communications and exposure of confidential data in transit.
How an attack unfolds
An attacker repeatedly sends specially crafted RSA-PSK ClientKeyExchange messages containing malformed padding to a vulnerable server and measures the slight differences in response latency to perform an adaptive chosen-ciphertext attack that gradually recovers the plaintext.
How to fix it
Upgrade GnuTLS to the latest stable release that eliminates the timing difference; rebuild and restart all dependent services; disable RSA-PSK cipher suites if the upgrade cannot be performed immediately.
How to confirm the fix worked
Compare response-time distributions for valid versus invalid PKCS#1 v1.5 padding after the update; confirm the GnuTLS version string no longer matches the vulnerable range and re-run timing tests to verify constant-time behavior.
Typical attack path
- Scan for services using GnuTLS with RSA-PSK key exchange enabled
- Send multiple probe ClientKeyExchange records with varying padding errors
- Record high-resolution response times for each probe
- Use timing oracle to iteratively decrypt RSA ciphertext and recover premaster secret
- Derive session keys and decrypt subsequent traffic
How to detect it
Examine application and TLS handshake logs for unusually high volumes of RSA-PSK ClientKeyExchange messages from single sources; correlate with any observed timing anomalies or failed handshakes that may indicate probing.
What your security team should do
- Prioritize patching GnuTLS on all externally reachable systems within the next maintenance window
- Review deployed applications for RSA-PSK usage and replace with modern key-exchange methods where feasible
- Add GnuTLS version checks to vulnerability scanning policies
- Monitor for any public exploit code that targets this timing oracle
The record
A vulnerability was found that the response times to malformed ciphertexts in RSA-PSK ClientKeyExchange differ from response times of ciphertexts with correct PKCS#1 v1.5 padding.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | gnutls | 0 | 3.6.16-8.el8_9 |
| AlmaLinux:8 | gnutls | 0 | 3.6.16-8.el8_9.1 |
| AlmaLinux:8 | gnutls-c++ | 0 | 3.6.16-8.el8_9 |
| AlmaLinux:8 | gnutls-c++ | 0 | 3.6.16-8.el8_9.1 |
| AlmaLinux:8 | gnutls-dane | 0 | 3.6.16-8.el8_9 |
| AlmaLinux:8 | gnutls-dane | 0 | 3.6.16-8.el8_9.1 |
| AlmaLinux:8 | gnutls-devel | 0 | 3.6.16-8.el8_9 |
| AlmaLinux:8 | gnutls-devel | 0 | 3.6.16-8.el8_9.1 |
| AlmaLinux:8 | gnutls-utils | 0 | 3.6.16-8.el8_9 |
| AlmaLinux:8 | gnutls-utils | 0 | 3.6.16-8.el8_9.1 |
| AlmaLinux:9 | gnutls | 0 | 3.7.6-23.el9_3.3 |
| AlmaLinux:9 | gnutls-c++ | 0 | 3.7.6-23.el9_3.3 |
| AlmaLinux:9 | gnutls-dane | 0 | 3.7.6-23.el9_3.3 |
| AlmaLinux:9 | gnutls-devel | 0 | 3.7.6-23.el9_3.3 |
| AlmaLinux:9 | gnutls-utils | 0 | 3.7.6-23.el9_3.3 |
| Alpine:v3.18 | gnutls | 0 | 3.8.3-r0 |
| Alpine:v3.19 | gnutls | 0 | 3.8.3-r0 |
| Alpine:v3.20 | gnutls | 0 | 3.8.3-r0 |
| Alpine:v3.21 | gnutls | 0 | 3.8.3-r0 |
| Alpine:v3.22 | gnutls | 0 | 3.8.3-r0 |
| Debian:10 | gnutls28 | 0 | 3.6.7-4+deb10u11 |
| Debian:11 | gnutls28 | 0 | 3.7.1-5+deb11u4 |
| Debian:12 | gnutls28 | 0 | 3.7.9-2+deb12u1 |
| Debian:13 | gnutls28 | 0 | 3.8.2-1 |
| Mageia:9 | gnutls | 0 | 3.8.0-2.1.mga9 |
| Red Hat:enterprise_linux:8::appstream | gnutls | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-c++ | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-c++-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-dane | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-dane-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-debugsource | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-devel | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-utils | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::appstream | gnutls-utils-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-c++ | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-c++-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-dane | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-dane-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-debugsource | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-devel | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-utils | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:8::baseos | gnutls-utils-debuginfo | 0 | 0:3.6.16-8.el8_9 |
| Red Hat:enterprise_linux:9::appstream | gnutls | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-c++ | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-c++-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-dane | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-dane-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-debugsource | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-devel | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-utils | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::appstream | gnutls-utils-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-c++ | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-c++-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-dane | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-dane-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-debugsource | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-devel | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-utils | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:enterprise_linux:9::baseos | gnutls-utils-debuginfo | 0 | 0:3.7.6-23.el9_3.3 |
| Red Hat:rhel_eus:8.6::appstream | gnutls | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-c++ | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-c++-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-dane | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-dane-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-debugsource | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-devel | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-utils | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::appstream | gnutls-utils-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-c++ | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-c++-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-dane | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-dane-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-debugsource | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-devel | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-utils | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.6::baseos | gnutls-utils-debuginfo | 0 | 0:3.6.16-5.el8_6.2 |
| Red Hat:rhel_eus:8.8::appstream | gnutls | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-c++ | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-c++-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-dane | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-dane-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-debugsource | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-devel | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-utils | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::appstream | gnutls-utils-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-c++ | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-c++-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-dane | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-dane-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-debugsource | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-devel | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-utils | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:8.8::baseos | gnutls-utils-debuginfo | 0 | 0:3.6.16-7.el8_8.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-c++ | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-c++-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-dane | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-dane-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-debugsource | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-devel | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-utils | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::appstream | gnutls-utils-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-c++ | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-c++-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-dane | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-dane-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-debugsource | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-devel | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-utils | 0 | 0:3.7.6-21.el9_2.1 |
| Red Hat:rhel_eus:9.2::baseos | gnutls-utils-debuginfo | 0 | 0:3.7.6-21.el9_2.1 |
| Rocky Linux:8 | gnutls | 0 | 0:3.6.16-8.el8_9 |
| SUSE:Enterprise Storage 7.1 | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Enterprise Storage 7.1 | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP1-LTSS | gnutls | 0 | 3.6.7-150000.6.50.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP2-LTSS | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP2-LTSS | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-ESPOS | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise Micro 5.1 | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise Micro 5.1 | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise Micro 5.2 | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise Micro 5.2 | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise Micro 5.3 | gnutls | 0 | 3.7.3-150400.1.3.1 |
| SUSE:Linux Enterprise Micro 5.4 | gnutls | 0 | 3.7.3-150400.4.38.1 |
| SUSE:Linux Enterprise Micro 5.5 | gnutls | 0 | 3.7.3-150400.4.38.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP4 | gnutls | 0 | 3.7.3-150400.4.38.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP5 | gnutls | 0 | 3.7.3-150400.4.38.1 |
| SUSE:Linux Enterprise Server 15 SP1-LTSS | gnutls | 0 | 3.6.7-150000.6.50.1 |
| SUSE:Linux Enterprise Server 15 SP2-LTSS | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise Server 15 SP2-LTSS | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise Server 15 SP3-LTSS | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise Server 15 SP3-LTSS | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP1 | gnutls | 0 | 3.6.7-150000.6.50.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP2 | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP2 | gnutls | 0 | 3.6.7-150200.14.31.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP3 | gnutls | 0 | 3.6.7-150200.14.28.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP3 | gnutls | 0 | 3.6.7-150200.14.31.1 |
| Ubuntu:20.04:LTS | gnutls28 | 0 | 3.6.13-2ubuntu1.9 |
| Ubuntu:22.04:LTS | gnutls28 | 0 | 3.7.3-4ubuntu1.3 |
| Ubuntu:23.10 | gnutls28 | 0 | 3.8.1-4ubuntu1.1 |
| Ubuntu:Pro:16.04:LTS | gnutls28 | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | gnutls28 | 0 | 3.5.18-1ubuntu1.6+esm1 |
| openSUSE:Leap 15.4 | gnutls | 0 | 3.7.3-150400.4.38.1 |
| openSUSE:Leap 15.5 | gnutls | 0 | 3.7.3-150400.4.38.1 |
| openSUSE:Leap Micro 5.4 | gnutls | 0 | 3.7.3-150400.4.38.1 |
| openSUSE:Tumbleweed | gnutls | 0 | 3.8.2-1.1 |
Related vulnerabilities
- CVE-2024-28834 A flaw was found in GnuTLS. Also affects gnutls
- CVE-2024-0553 A vulnerability was found in GnuTLS. Also affects gnutls
- CVE-2024-28835 A flaw has been discovered in GnuTLS where an application crash can be induced when… Also affects gnutls
- CVE-2017-7507 GnuTLS version 3.5.12 and earlier is vulnerable to a NULL pointer dereference while… Also affects gnutls
- CVE-2011-3389 The SSL protocol, as used in certain configurations in Microsoft Windows and Microsoft… Also affects gnutls28
- CVE-2017-5334 Double free vulnerability in the gnutls_x509_ext_import_proxy function in GnuTLS before… Also affects gnutls28
- CVE-2016-7444 The gnutls_ocsp_resp_check_crt function in lib/x509/ocsp.c in GnuTLS before 3.4.15 and… Also affects gnutls28
- CVE-2015-7575 Mozilla Network Security Services (NSS) before 3.20.2, as used in Mozilla Firefox before… Also affects gnutls28