CVE-2026-103963: Glib-networking: unbounded tls 1.3 session ticket queue growth in glib-networking allows remote denial of service

Published May 4, 2026
·
Updated

A flaw was found in glib-networking. When establishing connections using Transport Layer Security (TLS) version 1.3, the client-side session cache does not limit the number of session tickets retained for a single host. A malicious server can exploit this by sending excessive session ticket messages, causing the client application to continuously consume memory. This unbounded memory growth can exhaust system memory, resulting in a Denial of Service (DoS).

Other sources

AIONLYREPORT package: glib-networking-2.80.0-3.el10 ------ Summary: Unbounded Memory Growth in TLS 1.3 Session Ticket Queue: a malicious or compromised TLS 1.3 server can cause a glib-networking client to accumulate an unbounded number of cached session tickets for one host during the cache lifetime, leading to process memory exhaustion and denial of service. Requirements to exploit: The victim must use glib-networking-2.80.0-3.el10 as a TLS client with session resumption enabled and connect to a TLS 1.3 server controlled by, or acting on behalf of, the attacker. The server must send excessive NewSessionTicket messages for the same client-side sessionid. Repeated connections to the same host identity make the imbalance easier to sustain because each lookup removes only one queued ticket. Component affected: glib-networking-2.80.0-3.el10, primarily tls/base/gtlssessioncache.c in gtlsstoresessiondata() and gtlslookupsessiondata(), with reachable call paths from tls/gnutls/gtlsclientconnection-gnutls.c and tls/openssl/gtlsclientconnection-openssl.c. Version affected: glib-networking-2.80.0-3.el10 Patch available: no released package fix established; proposed patch included below Version fixed: unknown Upstream coordination: Not notified. CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - 7.5 (HIGH) AV:N - The triggering input is delivered by a remote TLS server over the network. AC:L - No unusual preconditions are required beyond causing the client to process excessive TLS 1.3 session tickets. PR:N - The attacker does not need privileges on the client. UI:N - No additional user action is needed after the client initiates the TLS connection. S:U - The impact is confined to the vulnerable client process using the library. C:N - No confidentiality impact is established by the available evidence. I:N - No integrity impact is established by the available evidence. A:H - The queue can grow until the client process experiences significant memory pressure or denial of service. Impact: Important. The established impact is remote denial of service against client applications using this package. Red Hat guidance classifies flaws that allow remote users to cause denial of service as Important when the effect can compromise availability. This issue does not show code execution or confidentiality/integrity impact, so Critical is not justified. Although exploitation depends on the client connecting to a malicious or compromised TLS 1.3 endpoint, the vulnerable behavior is present in normal client-side operation and session resumption is enabled by default outside tests. Embargo: no Reason: The demonstrated impact is availability loss in client processes, with straightforward mitigation and no evidence of confidential data exposure, integrity impact, or system compromise. Acknowledgement: Aisle Research Vulnerability Details: gtlsstoresessiondata() creates a per-sessionid queue for TLS 1.3 tickets and appends every new ticket without any per-host bound. The global cache limit of 50 entries constrains the number of host identities in the table, but it does not constrain the number of TLS 1.3 tickets retained for a single host. Later, gtlslookupsessiondata() removes only one queued ticket per lookup. If a server issues tickets faster than the client consumes them, memory usage grows monotonically for that host. c #define SESSIONCACHEMAXSIZE 50 #define SESSIONCACHEMAXAGE (10ll 60ll GUSECPERSEC) / ten minutes / ... if ((protocolversion >= GTLSPROTOCOLVERSIONTLS13 && protocolversion < GTLSPROTOCOLVERSIONDTLS10) || protocolversion > GTLSPROTOCOLVERSIONDTLS12) { gqueuepushtail (cachedata->tls13sessiontickets, sessiondatatmp); } c / Note that session tickets should be used only once since TLS 1.3, so we remove from the queue after retrieval. See RFC 8446 §C.4. / sessiondata = gqueuepophead (cachedata->tls13sessiontickets);

Session resumption is enabled by default outside tests through the session-resumption-enabled property. Both supported client backends store tickets in this shared cache: the GnuTLS path calls gtlsstoresessiondata() from handshakethreadsessionticketreceivedcb(), and the OpenSSL path calls it from gtlsclientconnectionopensslnewsession(). A relevant limiting factor is that cache entries expire after ten minutes, and the expiration time is set when the host entry is created. The available code does not refresh that expiration time on subsequent ticket stores. This means the growth is not permanent, but it remains numerically unbounded within the cache lifetime and can still be large enough to exhaust memory in a client process before expiry. Steps to reproduce: 1. Build the package with debug symbols or temporary logging enabled. 2. Add temporary logging in gtlsstoresessiondata() to print gqueuegetlength (cachedata->tls13sessiontickets) after each TLS 1.3 ticket is queued. 3. Run a TLS 1.3 server you control that emits many NewSessionTicket messages after a successful handshake. 4. Run any client linked against this package with session resumption enabled and connect repeatedly to the same host identity so the same sessionid is reused. 5. Observe that the queue length for that host grows while gtlslookupsessiondata() removes only one ticket per reconnect. 6. Monitor client RSS and confirm increasing memory consumption over time. 7. As a control, disable session resumption and verify that the queue growth stops. Mitigation: Until a package fix is available, disable TLS session resumption for affected client workloads where possible, or avoid connecting those clients to untrusted TLS 1.3 endpoints that can emit arbitrary numbers of session tickets. Deployments that do not use the client-side TLS session cache or do not negotiate TLS 1.3 are not exposed to this code path. Proposed Fix: Introduce a per-host cap for queued TLS 1.3 session tickets and evict the oldest entries before appending new ones. diff diff --git a/tls/base/gtlssessioncache.c b/tls/base/gtlssessioncache.c — a/tls/base/gtlssessioncache.c +++ b/tls/base/gtlssessioncache.c @@ -44,6 +44,7 @@ static GHashTable clientsessioncache; / (owned) GString -> (owned) GTlsCacheData / #define SESSIONCACHEMAXSIZE 50 #define SESSIONCACHEMAXAGE (10ll 60ll GUSECPERSEC) / ten minutes / +#define SESSIONCACHEMAXTLS13TICKETSPERHOST 32 @@ -154,6 +155,15 @@ gtlsstoresessiondata (gchar sessionid, protocolversion > GTLSPROTOCOLVERSIONDTLS12) { + while (gqueuegetlength (cachedata->tls13sessiontickets) >= + SESSIONCACHEMAXTLS13TICKETSPERHOST) + { + gpointer evicted = gqueuepophead (cachedata->tls13sessiontickets); + if (evicted && cachedata->decref) + cachedata->decref (evicted); + } + gqueuepushtail (cachedata->tls13sessiontickets, sessiondatatmp); } ------ This report was generated using AI technology. Always review AI-generated content prior to use

— Red Hat

Glib-networking: unbounded tls 1.3 session ticket queue growth in glib-networking allows remote denial of service

— Microsoft

Affected Software

11 affected components
debian/glib-networking*
debian/glib-networking*
debian/glib-networking*
debian/glib-networking<=2.74.0-4, <=2.80.1-1, <=2.90.0-2
ubuntu/glib-networking*
ubuntu/glib-networking*
ubuntu/glib-networking*
ubuntu/glib-networking*
ubuntu/glib-networking*
ubuntu/glib-networking*
ubuntu/glib-networking*

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Disable TLS session resumption for affected client workloads.

    glib-networking TLS client session-resumption-enabled = false
  2. Configuration

    Configure affected clients to avoid negotiating TLS 1.3 until a package fix is available.

    glib-networking TLS client TLS protocol negotiation = Do not negotiate TLS 1.3

Event History

May 4, 2026
Data Sourced
via Red Hat·03:58 PM
DescriptionSeverityAffected Software
Oct 30, 2026
CVE Published
via OSV·12:00 AM
Data Sourced
via OSV·12:00 AM
DescriptionSeverityAffected Software
CVE Published
via MITRE·04:08 AM
Data Sourced
via MITRE·04:08 AM
DescriptionSeverityWeakness
Data Sourced
via NVD·05:16 AM
DescriptionSeverityWeakness
Nov 3, 2026
Data Sourced
via Microsoft·09:06 AM
DescriptionSeverityWeakness

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203