CVE-2026-1965
libcurl can in some circumstances reuse the wrong connection when asked to do an Negotiate-authenticated HTTP or HTTPS request.
libcurl features a pool of recent connections so that subsequent requests can reuse an existing connection to avoid overhead.
When reusing a connection a range of criterion must first be met. Due to a logical error in the code, a request that was issued by an application could wrongfully reuse an existing connection to the same server that was authenticated using different credentials. One underlying reason being that Negotiate sometimes authenticates *connections* and not *requests*, contrary to how HTTP is designed to work.
Leer descripción completaMostrar menos
An application that allows Negotiate authentication to a server (that responds wanting Negotiate) with `user1:password1` and then does another operation to the same server also using Negotiate but with `user2:password2` (while the previous connection is still alive) - the second request wrongly reused the same connection and since it then sees that the Negotiate negotiation is already made, it sends the request over that connection thinking it uses the user2 credentials when it is in fact still using the connection authenticated for user1...
The set of authentication methods to use is set with `CURLOPT_HTTPAUTH`.
Applications can disable libcurl's reuse of connections and thus mitigate this problem, by using one of the following libcurl options to alter how connections are or are not reused: `CURLOPT_FRESH_CONNECT`, `CURLOPT_MAXCONNECTS` and `CURLMOPT_MAX_HOST_CONNECTIONS` (if using the curl_multi API).
CVSS
- Versión: 3.1
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N
- Puntuación base: 6.5
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días: 0.26%
- Percentil entre todas las CVEs puntuadas: 16
- Fecha de la puntuación: 5/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Tecnologías afectadas (1)
CWE
- CWE-305
- CWE-305
Referencias
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-1965",
"cveTags": [],
"metrics": {
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-1965",
"role": "CISA Coordinator",
"options": [
{
"exploitation": "none"
},
{
"automatable": "no"
},
{
"technicalImpact": "partial"
}
],
"version": "2.0.3",
"timestamp": "2026-03-11T14:31:56.061598Z"
}
}
],
"cvssMetricV31": [
{
"type": "Secondary",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"cvssData": {
"scope": "UNCHANGED",
"version": "3.1",
"baseScore": 6.5,
"attackVector": "NETWORK",
"baseSeverity": "MEDIUM",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N",
"integrityImpact": "HIGH",
"userInteraction": "NONE",
"attackComplexity": "LOW",
"availabilityImpact": "NONE",
"privilegesRequired": "LOW",
"confidentialityImpact": "NONE"
},
"impactScore": 3.6,
"exploitabilityScore": 2.8
}
]
},
"affected": [
{
"source": "2499f714-1537-4658-8207-48ae4bb9eae9",
"affectedData": [
{
"vendor": "curl",
"product": "curl",
"versions": [
{
"status": "affected",
"version": "7.10.6",
"lessThan": "8.14.2",
"versionType": "semver"
},
{
"status": "affected",
"version": "8.15.0",
"lessThan": "8.16.1",
"versionType": "semver"
},
{
"status": "affected",
"version": "8.17.0",
"lessThan": "8.19.0",
"versionType": "semver"
}
],
"defaultStatus": "unaffected"
},
{
"repo": "https://github.com/curl/curl.git",
"vendor": "curl",
"product": "curl",
"versions": [
{
"status": "affected",
"version": "e56ae1426cb7a0a4a427cf8d6099a821fdaae428",
"lessThan": "f1a39f221d57354990e3eeeddc3404aede2aff70",
"versionType": "git"
}
],
"defaultStatus": "unaffected"
},
{
"vendor": "curl",
"product": "curl",
"versions": [
{
"status": "affected",
"version": "8.18.0"
},
{
"status": "affected",
"version": "8.17.0"
},
{
"status": "affected",
"version": "8.16.0"
},
{
"status": "affected",
"version": "8.15.0"
},
{
"status": "affected",
"version": "8.14.1"
},
{
"status": "affected",
"version": "8.14.0"
},
{
"status": "affected",
"version": "8.13.0"
},
{
"status": "affected",
"version": "8.12.1"
},
{
"status": "affected",
"version": "8.12.0"
},
{
"status": "affected",
"version": "8.11.1"
},
{
"status": "affected",
"version": "8.11.0"
},
{
"status": "affected",
"version": "8.10.1"
},
{
"status": "affected",
"version": "8.10.0"
},
{
"status": "affected",
"version": "8.9.1"
},
{
"status": "affected",
"version": "8.9.0"
},
{
"status": "affected",
"version": "8.8.0"
},
{
"status": "affected",
"version": "8.7.1"
},
{
"status": "affected",
"version": "8.7.0"
},
{
"status": "affected",
"version": "8.6.0"
},
{
"status": "affected",
"version": "8.5.0"
},
{
"status": "affected",
"version": "8.4.0"
},
{
"status": "affected",
"version": "8.3.0"
},
{
"status": "affected",
"version": "8.2.1"
},
{
"status": "affected",
"version": "8.2.0"
},
{
"status": "affected",
"version": "8.1.2"
},
{
"status": "affected",
"version": "8.1.1"
},
{
"status": "affected",
"version": "8.1.0"
},
{
"status": "affected",
"version": "8.0.1"
},
{
"status": "affected",
"version": "8.0.0"
},
{
"status": "affected",
"version": "7.88.1"
},
{
"status": "affected",
"version": "7.88.0"
},
{
"status": "affected",
"version": "7.87.0"
},
{
"status": "affected",
"version": "7.86.0"
},
{
"status": "affected",
"version": "7.85.0"
},
{
"status": "affected",
"version": "7.84.0"
},
{
"status": "affected",
"version": "7.83.1"
},
{
"status": "affected",
"version": "7.83.0"
},
{
"status": "affected",
"version": "7.82.0"
},
{
"status": "affected",
"version": "7.81.0"
},
{
"status": "affected",
"version": "7.80.0"
},
{
"status": "affected",
"version": "7.79.1"
},
{
"status": "affected",
"version": "7.79.0"
},
{
"status": "affected",
"version": "7.78.0"
},
{
"status": "affected",
"version": "7.77.0"
},
{
"status": "affected",
"version": "7.76.1"
},
{
"status": "affected",
"version": "7.76.0"
},
{
"status": "affected",
"version": "7.75.0"
},
{
"status": "affected",
"version": "7.74.0"
},
{
"status": "affected",
"version": "7.73.0"
},
{
"status": "affected",
"version": "7.72.0"
},
{
"status": "affected",
"version": "7.71.1"
},
{
"status": "affected",
"version": "7.71.0"
},
{
"status": "affected",
"version": "7.70.0"
},
{
"status": "affected",
"version": "7.69.1"
},
{
"status": "affected",
"version": "7.69.0"
},
{
"status": "affected",
"version": "7.68.0"
},
{
"status": "affected",
"version": "7.67.0"
},
{
"status": "affected",
"version": "7.66.0"
},
{
"status": "affected",
"version": "7.65.3"
},
{
"status": "affected",
"version": "7.65.2"
},
{
"status": "affected",
"version": "7.65.1"
},
{
"status": "affected",
"version": "7.65.0"
},
{
"status": "affected",
"version": "7.64.1"
},
{
"status": "affected",
"version": "7.64.0"
},
{
"status": "affected",
"version": "7.63.0"
},
{
"status": "affected",
"version": "7.62.0"
},
{
"status": "affected",
"version": "7.61.1"
},
{
"status": "affected",
"version": "7.61.0"
},
{
"status": "affected",
"version": "7.60.0"
},
{
"status": "affected",
"version": "7.59.0"
},
{
"status": "affected",
"version": "7.58.0"
},
{
"status": "affected",
"version": "7.57.0"
},
{
"status": "affected",
"version": "7.56.1"
},
{
"status": "affected",
"version": "7.56.0"
},
{
"status": "affected",
"version": "7.55.1"
},
{
"status": "affected",
"version": "7.55.0"
},
{
"status": "affected",
"version": "7.54.1"
},
{
"status": "affected",
"version": "7.54.0"
},
{
"status": "affected",
"version": "7.53.1"
},
{
"status": "affected",
"version": "7.53.0"
},
{
"status": "affected",
"version": "7.52.1"
},
{
"status": "affected",
"version": "7.52.0"
},
{
"status": "affected",
"version": "7.51.0"
},
{
"status": "affected",
"version": "7.50.3"
},
{
"status": "affected",
"version": "7.50.2"
},
{
"status": "affected",
"version": "7.50.1"
},
{
"status": "affected",
"version": "7.50.0"
},
{
"status": "affected",
"version": "7.49.1"
},
{
"status": "affected",
"version": "7.49.0"
},
{
"status": "affected",
"version": "7.48.0"
},
{
"status": "affected",
"version": "7.47.1"
},
{
"status": "affected",
"version": "7.47.0"
},
{
"status": "affected",
"version": "7.46.0"
},
{
"status": "affected",
"version": "7.45.0"
},
{
"status": "affected",
"version": "7.44.0"
},
{
"status": "affected",
"version": "7.43.0"
},
{
"status": "affected",
"version": "7.42.1"
},
{
"status": "affected",
"version": "7.42.0"
},
{
"status": "affected",
"version": "7.41.0"
},
{
"status": "affected",
"version": "7.40.0"
},
{
"status": "affected",
"version": "7.39.0"
},
{
"status": "affected",
"version": "7.38.0"
},
{
"status": "affected",
"version": "7.37.1"
},
{
"status": "affected",
"version": "7.37.0"
},
{
"status": "affected",
"version": "7.36.0"
},
{
"status": "affected",
"version": "7.35.0"
},
{
"status": "affected",
"version": "7.34.0"
},
{
"status": "affected",
"version": "7.33.0"
},
{
"status": "affected",
"version": "7.32.0"
},
{
"status": "affected",
"version": "7.31.0"
},
{
"status": "affected",
"version": "7.30.0"
},
{
"status": "affected",
"version": "7.29.0"
},
{
"status": "affected",
"version": "7.28.1"
},
{
"status": "affected",
"version": "7.28.0"
},
{
"status": "affected",
"version": "7.27.0"
},
{
"status": "affected",
"version": "7.26.0"
},
{
"status": "affected",
"version": "7.25.0"
},
{
"status": "affected",
"version": "7.24.0"
},
{
"status": "affected",
"version": "7.23.1"
},
{
"status": "affected",
"version": "7.23.0"
},
{
"status": "affected",
"version": "7.22.0"
},
{
"status": "affected",
"version": "7.21.7"
},
{
"status": "affected",
"version": "7.21.6"
},
{
"status": "affected",
"version": "7.21.5"
},
{
"status": "affected",
"version": "7.21.4"
},
{
"status": "affected",
"version": "7.21.3"
},
{
"status": "affected",
"version": "7.21.2"
},
{
"status": "affected",
"version": "7.21.1"
},
{
"status": "affected",
"version": "7.21.0"
},
{
"status": "affected",
"version": "7.20.1"
},
{
"status": "affected",
"version": "7.20.0"
},
{
"status": "affected",
"version": "7.19.7"
},
{
"status": "affected",
"version": "7.19.6"
},
{
"status": "affected",
"version": "7.19.5"
},
{
"status": "affected",
"version": "7.19.4"
},
{
"status": "affected",
"version": "7.19.3"
},
{
"status": "affected",
"version": "7.19.2"
},
{
"status": "affected",
"version": "7.19.1"
},
{
"status": "affected",
"version": "7.19.0"
},
{
"status": "affected",
"version": "7.18.2"
},
{
"status": "affected",
"version": "7.18.1"
},
{
"status": "affected",
"version": "7.18.0"
},
{
"status": "affected",
"version": "7.17.1"
},
{
"status": "affected",
"version": "7.17.0"
},
{
"status": "affected",
"version": "7.16.4"
},
{
"status": "affected",
"version": "7.16.3"
},
{
"status": "affected",
"version": "7.16.2"
},
{
"status": "affected",
"version": "7.16.1"
},
{
"status": "affected",
"version": "7.16.0"
},
{
"status": "affected",
"version": "7.15.5"
},
{
"status": "affected",
"version": "7.15.4"
},
{
"status": "affected",
"version": "7.15.3"
},
{
"status": "affected",
"version": "7.15.2"
},
{
"status": "affected",
"version": "7.15.1"
},
{
"status": "affected",
"version": "7.15.0"
},
{
"status": "affected",
"version": "7.14.1"
},
{
"status": "affected",
"version": "7.14.0"
},
{
"status": "affected",
"version": "7.13.2"
},
{
"status": "affected",
"version": "7.13.1"
},
{
"status": "affected",
"version": "7.13.0"
},
{
"status": "affected",
"version": "7.12.3"
},
{
"status": "affected",
"version": "7.12.2"
},
{
"status": "affected",
"version": "7.12.1"
},
{
"status": "affected",
"version": "7.12.0"
},
{
"status": "affected",
"version": "7.11.2"
},
{
"status": "affected",
"version": "7.11.1"
},
{
"status": "affected",
"version": "7.11.0"
},
{
"status": "affected",
"version": "7.10.8"
},
{
"status": "affected",
"version": "7.10.7"
},
{
"status": "affected",
"version": "7.10.6"
}
],
"defaultStatus": "unaffected"
}
]
}
],
"published": "2026-03-11T11:15:59.177",
"references": [
{
"url": "https://curl.se/docs/CVE-2026-1965.html",
"tags": [
"Patch",
"Vendor Advisory"
],
"source": "2499f714-1537-4658-8207-48ae4bb9eae9"
},
{
"url": "https://curl.se/docs/CVE-2026-1965.json",
"tags": [
"Vendor Advisory"
],
"source": "2499f714-1537-4658-8207-48ae4bb9eae9"
}
],
"vulnStatus": "Modified",
"weaknesses": [
{
"type": "Secondary",
"source": "2499f714-1537-4658-8207-48ae4bb9eae9",
"description": [
{
"lang": "en",
"value": "CWE-305"
}
]
},
{
"type": "Secondary",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"description": [
{
"lang": "en",
"value": "CWE-305"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "libcurl can in some circumstances reuse the wrong connection when asked to do\nan Negotiate-authenticated HTTP or HTTPS request.\n\nlibcurl features a pool of recent connections so that subsequent requests can\nreuse an existing connection to avoid overhead.\n\nWhen reusing a connection a range of criterion must first be met. Due to a\nlogical error in the code, a request that was issued by an application could\nwrongfully reuse an existing connection to the same server that was\nauthenticated using different credentials. One underlying reason being that\nNegotiate sometimes authenticates *connections* and not *requests*, contrary\nto how HTTP is designed to work.\n\nAn application that allows Negotiate authentication to a server (that responds\nwanting Negotiate) with `user1:password1` and then does another operation to\nthe same server also using Negotiate but with `user2:password2` (while the\nprevious connection is still alive) - the second request wrongly reused the\nsame connection and since it then sees that the Negotiate negotiation is\nalready made, it sends the request over that connection thinking it uses\nthe user2 credentials when it is in fact still using the connection\nauthenticated for user1...\n\nThe set of authentication methods to use is set with `CURLOPT_HTTPAUTH`.\n\nApplications can disable libcurl's reuse of connections and thus mitigate this\nproblem, by using one of the following libcurl options to alter how\nconnections are or are not reused: `CURLOPT_FRESH_CONNECT`,\n`CURLOPT_MAXCONNECTS` and `CURLMOPT_MAX_HOST_CONNECTIONS` (if using the\ncurl_multi API)."
},
{
"lang": "es",
"value": "libcurl puede en algunas circunstancias reutilizar la conexión incorrecta cuando se le pide que realice una solicitud HTTP o HTTPS autenticada con Negotiate.\n\nlibcurl cuenta con un grupo de conexiones recientes para que las solicitudes posteriores puedan reutilizar una conexión existente y evitar la sobrecarga.\n\nAl reutilizar una conexión, una serie de criterios deben cumplirse primero. Debido a un error lógico en el código, una solicitud emitida por una aplicación podría reutilizar erróneamente una conexión existente al mismo servidor que fue autenticado usando credenciales diferentes. Una razón subyacente es que Negotiate a veces autentica *conexiones* y no *solicitudes*, al contrario de cómo HTTP está diseñado para funcionar.\n\nUna aplicación que permite la autenticación Negotiate a un servidor (que responde queriendo Negotiate) con 'user1:password1' y luego realiza otra operación al mismo servidor también usando Negotiate pero con 'user2:password2' (mientras la conexión anterior sigue activa) - la segunda solicitud reutilizó erróneamente la misma conexión y dado que luego ve que la negociación de Negotiate ya está hecha, simplemente envía la solicitud a través de esa conexión pensando que usa las credenciales de user2 cuando de hecho sigue usando la conexión autenticada para user1...\n\nEl conjunto de métodos de autenticación a usar se establece con 'CURLOPT_HTTPAUTH'.\n\nLas aplicaciones pueden deshabilitar la reutilización de conexiones de libcurl y así mitigar este problema, usando una de las siguientes opciones de libcurl para alterar cómo las conexiones son o no son reutilizadas: 'CURLOPT_FRESH_CONNECT', 'CURLOPT_MAXCONNECTS' y 'CURLMOPT_MAX_HOST_CONNECTIONS' (si se usa la API curl_multi)."
}
],
"lastModified": "2026-09-15T07:16:27.523",
"configurations": [
{
"nodes": [
{
"negate": false,
"cpeMatch": [
{
"criteria": "cpe:2.3:a:haxx:curl:*:*:*:*:*:*:*:*",
"vulnerable": true,
"matchCriteriaId": "16DD9E3A-305E-4F7E-A8A1-FFFD1D44B147",
"versionEndExcluding": "8.19.0",
"versionStartIncluding": "7.10.6"
}
],
"operator": "OR"
}
]
}
],
"sourceIdentifier": "2499f714-1537-4658-8207-48ae4bb9eae9"
}