Low
info leak uploading over WebSockets with GnuTLS
Type: advisorySources: OSV
When curl is built with GnuTLS, a malicious WebSocket server can make curl send memory past its send buffer. This is due to an out of bounds read following when `gnutls_record_send()` returns a number of bytes sent **greater than the number of bytes it was given to send**. GnuTLS does that after a blocked send.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-107928
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 09:38 UTC · Revision 1
Source evidence
info leak uploading over WebSockets with GnuTLS
core-osv · Original sourcePublished 14 Oct 2026, 08:00 UTC
When curl is built with GnuTLS, a malicious WebSocket server can make curl send memory past its send buffer. This is due to an out of bounds read following when `gnutls_record_send()` returns a number of bytes sent **greater than the number of bytes it was given to send**. GnuTLS does that after a blocked send.
osv:CURL-CVE-2026-107928
Complete source record
{
"id": "d5c6090b8b02e66e68afa6866091ee387f494864c84cca4d067ca256a352cf45",
"url": "https://osv.dev/vulnerability/CURL-CVE-2026-107928",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "info leak uploading over WebSockets with GnuTLS",
"summary": "When curl is built with GnuTLS, a malicious WebSocket server can make curl send memory past its send buffer. This is due to an out of bounds read following when `gnutls_record_send()` returns a number of bytes sent **greater than the number of bytes it was given to send**. GnuTLS does that after a blocked send.",
"evidence": "osv:CURL-CVE-2026-107928",
"products": [],
"severity": "low",
"structured": {
"id": "CURL-CVE-2026-107928",
"aliases": [
"CURL-CVE-2026-107928",
"CVE-2026-107928"
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "7.86.0"
},
{
"fixed": "8.14.3"
},
{
"introduced": "8.15.0"
},
{
"fixed": "8.16.2"
},
{
"introduced": "8.17.0"
},
{
"fixed": "8.20.2"
},
{
"introduced": "8.21.0"
},
{
"fixed": "8.23.0"
}
]
},
{
"repo": "https://github.com/curl/curl.git",
"type": "GIT",
"events": [
{
"introduced": "664249d095275ec532f55dd1752d80c8c1093a77"
},
{
"fixed": "64fb3e7a7b116f690966054f281624152d4a7651"
}
]
}
],
"versions": [
"8.22.0",
"8.21.0",
"8.20.0",
"8.19.0",
"8.18.0",
"8.17.0",
"8.16.0",
"8.15.0",
"8.14.1",
"8.14.0",
"8.13.0",
"8.12.1",
"8.12.0",
"8.11.1",
"8.11.0",
"8.10.1",
"8.10.0",
"8.9.1",
"8.9.0",
"8.8.0",
"8.7.1",
"8.7.0",
"8.6.0",
"8.5.0",
"8.4.0",
"8.3.0",
"8.2.1",
"8.2.0",
"8.1.2",
"8.1.1",
"8.1.0",
"8.0.1",
"8.0.0",
"7.88.1",
"7.88.0",
"7.87.0",
"7.86.0",
"rc-8_23_0-3",
"rc-8_23_0-2",
"rc-8_23_0-1",
"curl-8_22_0",
"rc-8_22_0-3",
"rc-8_22_0-2",
"rc-8_22_0-1",
"curl-8_21_0",
"rc-8_21_0-3",
"rc-8_21_0-2",
"rc-8_21_0-1",
"curl-8_20_0",
"rc-8_20_0-3",
"rc-8_20_0-2",
"rc-8_20_0-1",
"curl-8_19_0",
"rc-8_19_0-3",
"rc-8_19_0-2",
"rc-8_19_0-1",
"curl-8_18_0",
"rc-8_18_0-3",
"rc-8_18_0-2",
"rc-8_18_0-1",
"curl-8_17_0",
"curl-8_16_0",
"curl-8_15_0",
"curl-8_14_1",
"curl-8_14_0",
"curl-8_13_0",
"curl-8_12_1",
"curl-8_12_0",
"curl-8_11_1",
"curl-8_11_0",
"curl-8_10_1",
"curl-8_10_0",
"curl-8_9_1",
"curl-8_9_0",
"curl-8_8_0",
"curl-8_7_1",
"curl-8_7_0",
"curl-8_6_0",
"curl-8_5_0",
"tiny-curl-8_4_0",
"curl-8_4_0",
"curl-8_3_0",
"curl-8_2_1",
"curl-8_2_0",
"curl-8_1_2",
"curl-8_1_1",
"curl-8_1_0",
"curl-8_0_1",
"curl-8_0_0",
"curl-7_88_1",
"curl-7_88_0",
"curl-7_87_0",
"curl-7_86_0"
],
"database_specific": {
"source": "https://curl.se/docs/CURL-CVE-2026-107928.json",
"vanir_signatures": [
{
"id": "CURL-CVE-2026-107928-29f91023",
"digest": {
"length": 877,
"function_hash": "17004293909367189618465785831238528729"
},
"source": "https://github.com/curl/curl.git/commit/64fb3e7a7b116f690966054f281624152d4a7651",
"target": {
"file": "lib/vtls/gtls.c",
"function": "gtls_send"
},
"deprecated": false,
"signature_type": "Function",
"signature_version": "v1"
},
{
"id": "CURL-CVE-2026-107928-7be05e8d",
"digest": {
"threshold": 0.9,
"line_hashes": [
"237152868269477282733457753401809078536",
"310007984379778202135485959311979072715",
"331851364076556933562923024774740634706",
"25065144459799342202251174170785250709",
"159052280036624249758923391343624644361",
"292029669852123213529518847703179921945"
]
},
"source": "https://github.com/curl/curl.git/commit/64fb3e7a7b116f690966054f281624152d4a7651",
"target": {
"file": "lib/vtls/gtls.c"
},
"deprecated": false,
"signature_type": "Line",
"signature_version": "v1"
}
],
"vanir_signatures_modified": "2026-10-25T01:05:09Z"
}
}
],
"modified": "2026-10-25T01:05:09.809818175Z",
"provider": "osv",
"references": [],
"provider_metadata": {
"CWE": {
"id": "CWE-126",
"desc": "Buffer Over-read"
},
"URL": "https://curl.se/docs/CVE-2026-107928.json",
"www": "https://curl.se/docs/CVE-2026-107928.html",
"issue": "https://hackerone.com/reports/4099194",
"affects": "both",
"package": "curl",
"severity": "Low",
"last_affected": "8.22.0"
}
},
"related_cves": [
{
"value": "CVE-2026-107928",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/database_specific/severity"
},
"source_id": "core-osv",
"document_id": 444342,
"published_at": "2026-10-14T08:00:00+00:00"
}