CVE-2026-59247 (GCVE-0-2026-59247)
Vulnerability from cvelistv5 – Published: 2026-07-29 14:24 – Updated: 2026-11-10 19:18- CWE-345 - Insufficient Verification of Data Authenticity
| URL | Tags |
|---|---|
| https://github.com/gleam-lang/gleam/security/advi… | vendor-advisoryrelated |
| https://cna.erlef.org/cves/CVE-2026-59247.html | related |
| https://osv.dev/vulnerability/EEF-CVE-2026-59247 | related |
| https://github.com/hexpm/specifications/blob/main… | related |
| https://github.com/gleam-lang/gleam/commit/8447b7… | related |
| https://github.com/gleam-lang/gleam/commit/c9c0d4… | patch |
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Gleam | Gleam |
Affected:
0.18.0-rc1 , < 1.18.0
(semver)
cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:* |
||
| Gleam | Gleam |
Affected:
v0.18.0-rc1-elixir , < v1.18.0-elixir
(other)
Affected: v0.18.0-rc1-erlang , < v1.18.0-erlang (other) Affected: v0.18.0-rc1-node , < v1.18.0-node (other) Affected: v0.18.0-rc1-node-slim , < v1.18.0-node-slim (other) Affected: v0.18.0-rc1-elixir-slim , < v1.18.0-elixir-slim (other) Affected: v0.18.0-rc1-erlang-slim , < v1.18.0-erlang-slim (other) Affected: v0.18.0-rc1-erlang-alpine , < v1.18.0-erlang-alpine (other) Affected: v0.18.0-rc1-elixir-alpine , < v1.18.0-elixir-alpine (other) Affected: v0.18.0-rc1-node-alpine , < v1.18.0-node-alpine (other) Affected: v0.18.0-rc1-scratch , < v1.18.0-scratch (other) cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:* |
||
| Gleam | Gleam |
Affected:
8447b78cc844ff4aec44eea23dbd68d1fea11f11 , < c9c0d48c123c8abae6db8dd61b25ccb427ed3d35
(git)
cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-59247",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-07-29T15:03:54.127187Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-07-29T15:09:39.613Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam",
"packageURL": "pkg:software-id/gleam.run/gleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"vendor": "Gleam",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0-rc1",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://ghcr.io",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam-lang/gleam",
"packageURL": "pkg:oci/gleam?repository_url=ghcr.io%2Fgleam-lang%2Fgleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"vendor": "Gleam",
"versions": [
{
"lessThan": "v1.18.0-elixir",
"status": "affected",
"version": "v0.18.0-rc1-elixir",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang",
"status": "affected",
"version": "v0.18.0-rc1-erlang",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node",
"status": "affected",
"version": "v0.18.0-rc1-node",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-slim",
"status": "affected",
"version": "v0.18.0-rc1-node-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-slim",
"status": "affected",
"version": "v0.18.0-rc1-elixir-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-slim",
"status": "affected",
"version": "v0.18.0-rc1-erlang-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-alpine",
"status": "affected",
"version": "v0.18.0-rc1-erlang-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-alpine",
"status": "affected",
"version": "v0.18.0-rc1-elixir-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-alpine",
"status": "affected",
"version": "v0.18.0-rc1-node-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-scratch",
"status": "affected",
"version": "v0.18.0-rc1-scratch",
"versionType": "other"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam-lang/gleam",
"packageURL": "pkg:github/gleam-lang/gleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"repo": "https://github.com/gleam-lang/gleam",
"vendor": "Gleam",
"versions": [
{
"lessThan": "c9c0d48c123c8abae6db8dd61b25ccb427ed3d35",
"status": "affected",
"version": "8447b78cc844ff4aec44eea23dbd68d1fea11f11",
"versionType": "git"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*",
"versionEndExcluding": "1.18.0",
"versionStartIncluding": "0.18.0-rc1",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
],
"operator": "AND"
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "John Downey"
},
{
"lang": "en",
"type": "remediation developer",
"value": "John Downey"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Louis Pilfold"
}
],
"datePublic": "2026-07-29T14:24:55.000Z",
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eInsufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\u003c/p\u003e\n\u003cp\u003eDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 \u003ccode\u003eouter_checksum\u003c/code\u003e. After resolving versions, \u003ccode\u003egleam_cli::dependencies::lookup_package\u003c/code\u003e makes a second request to the unsigned Hex API through \u003ccode\u003egleam_core::hex::get_package_release\u003c/code\u003e and records the \u003ccode\u003eouter_checksum\u003c/code\u003e and dependency names from that JSON response into \u003ccode\u003emanifest.toml\u003c/code\u003e, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\u003c/p\u003e\n\u003cp\u003eAn adversary in the middle who can intercept TLS with a certificate trusted by the Gleam process (for example a TLS-inspecting proxy using a CA in the operating system trust store or added through \u003ccode\u003eGLEAM_CACERTS_PATH\u003c/code\u003e), and who can modify both the API release response and the corresponding repository tarball, can supply a package archive with a matching forged checksum without the Hex repository signing key. Gleam verifies the forged tarball against the forged checksum, accepts it, and extracts it as a dependency source, resulting in loss of integrity of the downloaded package contents.\u003c/p\u003e\n\u003cp\u003eOnly projects that resolve or update Hex dependencies are affected, which happens when the manifest is missing, a dependency is added or updated, or dependency requirements change. Builds that reuse an unchanged, known-good \u003ccode\u003emanifest.toml\u003c/code\u003e continue to verify tarballs against its pinned checksum.\u003c/p\u003e\n\u003cp\u003eThis issue affects gleam: from 0.18.0-rc1 before 1.18.0.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\n\nDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 `outer_checksum`. After resolving versions, `gleam_cli::dependencies::lookup_package` makes a second request to the unsigned Hex API through `gleam_core::hex::get_package_release` and records the `outer_checksum` and dependency names from that JSON response into `manifest.toml`, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\n\nAn adversary in the middle who can intercept TLS with a certificate trusted by the Gleam process (for example a TLS-inspecting proxy using a CA in the operating system trust store or added through `GLEAM_CACERTS_PATH`), and who can modify both the API release response and the corresponding repository tarball, can supply a package archive with a matching forged checksum without the Hex repository signing key. Gleam verifies the forged tarball against the forged checksum, accepts it, and extracts it as a dependency source, resulting in loss of integrity of the downloaded package contents.\n\nOnly projects that resolve or update Hex dependencies are affected, which happens when the manifest is missing, a dependency is added or updated, or dependency requirements change. Builds that reuse an unchanged, known-good `manifest.toml` continue to verify tarballs against its pinned checksum.\n\nThis issue affects gleam: from 0.18.0-rc1 before 1.18.0."
}
],
"value": "Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\n\nDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 outer_checksum. After resolving versions, gleam_cli::dependencies::lookup_package makes a second request to the unsigned Hex API through gleam_core::hex::get_package_release and records the outer_checksum and dependency names from that JSON response into manifest.toml, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\n\nAn adversary in the middle who can intercept TLS with a certificate trusted by the Gleam process (for example a TLS-inspecting proxy using a CA in the operating system trust store or added through GLEAM_CACERTS_PATH), and who can modify both the API release response and the corresponding repository tarball, can supply a package archive with a matching forged checksum without the Hex repository signing key. Gleam verifies the forged tarball against the forged checksum, accepts it, and extracts it as a dependency source, resulting in loss of integrity of the downloaded package contents.\n\nOnly projects that resolve or update Hex dependencies are affected, which happens when the manifest is missing, a dependency is added or updated, or dependency requirements change. Builds that reuse an unchanged, known-good manifest.toml continue to verify tarballs against its pinned checksum.\n\nThis issue affects gleam: from 0.18.0-rc1 before 1.18.0."
}
],
"impacts": [
{
"capecId": "CAPEC-94",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-94 Adversary in the Middle (AiTM)"
}
]
},
{
"capecId": "CAPEC-185",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-185 Malicious Software Download"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-345",
"description": "CWE-345 Insufficient Verification of Data Authenticity",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T19:18:20.583Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"name": "Insufficient Verification of Hex Package Metadata in Gleam",
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/gleam-lang/gleam/security/advisories/GHSA-4vvc-458m-r82g"
},
{
"name": "EEF CNA record for CVE-2026-59247",
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-59247.html"
},
{
"name": "OSV record EEF-CVE-2026-59247",
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-59247"
},
{
"tags": [
"related"
],
"url": "https://github.com/hexpm/specifications/blob/main/registry-v2.md"
},
{
"name": "Introducing commit 8447b78 in gleam-lang/gleam",
"tags": [
"related"
],
"url": "https://github.com/gleam-lang/gleam/commit/8447b78cc844ff4aec44eea23dbd68d1fea11f11"
},
{
"name": "Fix commit c9c0d48 in gleam-lang/gleam",
"tags": [
"patch"
],
"url": "https://github.com/gleam-lang/gleam/commit/c9c0d48c123c8abae6db8dd61b25ccb427ed3d35"
}
],
"source": {
"discovery": "INTERNAL"
},
"title": "Insufficient verification of Hex package metadata in Gleam"
}
},
"cveMetadata": {
"assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"assignerShortName": "EEF",
"cveId": "CVE-2026-59247",
"datePublished": "2026-07-29T14:24:55.499Z",
"dateReserved": "2026-07-04T04:24:03.652Z",
"dateUpdated": "2026-11-10T19:18:20.583Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-59247",
"date": "2026-11-13",
"epss": "0.00196",
"percentile": "0.09375"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam",
"packageURL": "pkg:software-id/gleam.run/gleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"vendor": "Gleam",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0-rc1",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://ghcr.io",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam-lang/gleam",
"packageURL": "pkg:oci/gleam?repository_url=ghcr.io%2Fgleam-lang%2Fgleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"vendor": "Gleam",
"versions": [
{
"lessThan": "v1.18.0-elixir",
"status": "affected",
"version": "v0.18.0-rc1-elixir",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang",
"status": "affected",
"version": "v0.18.0-rc1-erlang",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node",
"status": "affected",
"version": "v0.18.0-rc1-node",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-slim",
"status": "affected",
"version": "v0.18.0-rc1-node-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-slim",
"status": "affected",
"version": "v0.18.0-rc1-elixir-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-slim",
"status": "affected",
"version": "v0.18.0-rc1-erlang-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-alpine",
"status": "affected",
"version": "v0.18.0-rc1-erlang-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-alpine",
"status": "affected",
"version": "v0.18.0-rc1-elixir-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-alpine",
"status": "affected",
"version": "v0.18.0-rc1-node-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-scratch",
"status": "affected",
"version": "v0.18.0-rc1-scratch",
"versionType": "other"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam-lang/gleam",
"packageURL": "pkg:github/gleam-lang/gleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"repo": "https://github.com/gleam-lang/gleam",
"vendor": "Gleam",
"versions": [
{
"lessThan": "c9c0d48c123c8abae6db8dd61b25ccb427ed3d35",
"status": "affected",
"version": "8447b78cc844ff4aec44eea23dbd68d1fea11f11",
"versionType": "git"
}
]
}
],
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\n\nDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 outer_checksum. After resolving versions, gleam_cli::dependencies::lookup_package makes a second request to the unsigned Hex API through gleam_core::hex::get_package_release and records the outer_checksum and dependency names from that JSON response into manifest.toml, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\n\nAn adversary in the middle who can intercept TLS with a certificate trusted by the Gleam process (for example a TLS-inspecting proxy using a CA in the operating system trust store or added through GLEAM_CACERTS_PATH), and who can modify both the API release response and the corresponding repository tarball, can supply a package archive with a matching forged checksum without the Hex repository signing key. Gleam verifies the forged tarball against the forged checksum, accepts it, and extracts it as a dependency source, resulting in loss of integrity of the downloaded package contents.\n\nOnly projects that resolve or update Hex dependencies are affected, which happens when the manifest is missing, a dependency is added or updated, or dependency requirements change. Builds that reuse an unchanged, known-good manifest.toml continue to verify tarballs against its pinned checksum.\n\nThis issue affects gleam: from 0.18.0-rc1 before 1.18.0."
},
{
"lang": "es",
"value": "Vulnerabilidad de verificaci\u00f3n insuficiente de la autenticidad de los datos en Gleam permite a un adversario en el medio sustituir contenidos falsificados de paquetes Hex durante la resoluci\u00f3n de dependencias.\n\nDurante la resoluci\u00f3n de dependencias, Gleam obtiene metadatos del paquete del repositorio Hex verificado por firma, que cubre los requisitos de dependencia de cada lanzamiento y el outer_checksum SHA-256. Despu\u00e9s de resolver las versiones, gleam_cli::dependencies::lookup_package realiza una segunda solicitud a la API Hex sin firmar a trav\u00e9s de gleam_core::hex::get_package_release y registra el outer_checksum y los nombres de las dependencias de esa respuesta JSON en manifest.toml, en lugar de los valores de los metadatos del repositorio verificado. La firma del repositorio Hex no cubre la respuesta de la API.\n\nUn adversario en el medio que puede interceptar TLS con un certificado de confianza para el proceso Gleam (por ejemplo, un proxy de inspecci\u00f3n de TLS que utiliza una CA en el almac\u00e9n de confianza del sistema operativo o a\u00f1adido a trav\u00e9s de GLEAM_CACERTS_PATH), y que puede modificar tanto la respuesta de lanzamiento de la API como el tarball del repositorio correspondiente, puede suministrar un archivo de paquete con un checksum falsificado coincidente sin la clave de firma del repositorio Hex. Gleam verifica el tarball falsificado contra el checksum falsificado, lo acepta y lo extrae como fuente de dependencia, lo que resulta en la p\u00e9rdida de integridad de los contenidos del paquete descargado.\n\nSolo los proyectos que resuelven o actualizan dependencias Hex se ven afectados, lo que ocurre cuando falta el manifiesto, se a\u00f1ade o actualiza una dependencia, o cambian los requisitos de dependencia. Las compilaciones que reutilizan un manifest.toml inalterado y conocido como bueno contin\u00faan verificando los tarballs contra su checksum fijado. Este problema afecta a gleam: desde 0.18.0 antes de 1.18.0."
}
],
"id": "CVE-2026-59247",
"lastModified": "2026-11-10T20:19:28.443",
"metrics": {
"cvssMetricV40": [
{
"cvssData": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"availabilityRequirement": "NOT_DEFINED",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"confidentialityRequirement": "NOT_DEFINED",
"exploitMaturity": "NOT_DEFINED",
"integrityRequirement": "NOT_DEFINED",
"modifiedAttackComplexity": "NOT_DEFINED",
"modifiedAttackRequirements": "NOT_DEFINED",
"modifiedAttackVector": "NOT_DEFINED",
"modifiedPrivilegesRequired": "NOT_DEFINED",
"modifiedSubAvailabilityImpact": "NOT_DEFINED",
"modifiedSubConfidentialityImpact": "NOT_DEFINED",
"modifiedSubIntegrityImpact": "NOT_DEFINED",
"modifiedUserInteraction": "NOT_DEFINED",
"modifiedVulnAvailabilityImpact": "NOT_DEFINED",
"modifiedVulnConfidentialityImpact": "NOT_DEFINED",
"modifiedVulnIntegrityImpact": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/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",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary"
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"id": "CVE-2026-59247",
"options": [
{
"exploitation": "none"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-07-29T15:03:54.127187Z",
"version": "2.0.3"
}
}
]
},
"published": "2026-07-29T15:16:26.780",
"references": [
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://cna.erlef.org/cves/CVE-2026-59247.html"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://github.com/gleam-lang/gleam/commit/8447b78cc844ff4aec44eea23dbd68d1fea11f11"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://github.com/gleam-lang/gleam/commit/c9c0d48c123c8abae6db8dd61b25ccb427ed3d35"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://github.com/gleam-lang/gleam/security/advisories/GHSA-4vvc-458m-r82g"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://github.com/hexpm/specifications/blob/main/registry-v2.md"
},
{
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-59247"
}
],
"sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"vulnStatus": "Deferred",
"weaknesses": [
{
"description": [
{
"lang": "en",
"value": "CWE-345"
}
],
"source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"type": "Secondary"
}
]
}
},
"vulnrichment": {
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-59247",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-07-29T15:03:54.127187Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-07-29T15:09:30.653Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam",
"packageURL": "pkg:software-id/gleam.run/gleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"vendor": "Gleam",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0-rc1",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://ghcr.io",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam-lang/gleam",
"packageURL": "pkg:oci/gleam?repository_url=ghcr.io%2Fgleam-lang%2Fgleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"vendor": "Gleam",
"versions": [
{
"lessThan": "v1.18.0-elixir",
"status": "affected",
"version": "v0.18.0-rc1-elixir",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang",
"status": "affected",
"version": "v0.18.0-rc1-erlang",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node",
"status": "affected",
"version": "v0.18.0-rc1-node",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-slim",
"status": "affected",
"version": "v0.18.0-rc1-node-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-slim",
"status": "affected",
"version": "v0.18.0-rc1-elixir-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-slim",
"status": "affected",
"version": "v0.18.0-rc1-erlang-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-alpine",
"status": "affected",
"version": "v0.18.0-rc1-erlang-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-alpine",
"status": "affected",
"version": "v0.18.0-rc1-elixir-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-alpine",
"status": "affected",
"version": "v0.18.0-rc1-node-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-scratch",
"status": "affected",
"version": "v0.18.0-rc1-scratch",
"versionType": "other"
}
]
},
{
"collectionURL": "https://github.com",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam-lang/gleam",
"packageURL": "pkg:github/gleam-lang/gleam",
"product": "Gleam",
"programFiles": [
"compiler-cli/src/dependencies.rs",
"compiler-cli/src/dependencies/dependency_manager.rs"
],
"programRoutines": [
{
"name": "gleam_cli::dependencies::lookup_package"
},
{
"name": "gleam_cli::dependencies::dependency_manager::DependencyManager::perform_version_resolution"
}
],
"repo": "https://github.com/gleam-lang/gleam",
"vendor": "Gleam",
"versions": [
{
"lessThan": "c9c0d48c123c8abae6db8dd61b25ccb427ed3d35",
"status": "affected",
"version": "8447b78cc844ff4aec44eea23dbd68d1fea11f11",
"versionType": "git"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*",
"versionEndExcluding": "1.18.0",
"versionStartIncluding": "0.18.0-rc1",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
],
"operator": "AND"
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "John Downey"
},
{
"lang": "en",
"type": "remediation developer",
"value": "John Downey"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "Louis Pilfold"
}
],
"datePublic": "2026-07-29T14:24:55.000Z",
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eInsufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\u003c/p\u003e\n\u003cp\u003eDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 \u003ccode\u003eouter_checksum\u003c/code\u003e. After resolving versions, \u003ccode\u003egleam_cli::dependencies::lookup_package\u003c/code\u003e makes a second request to the unsigned Hex API through \u003ccode\u003egleam_core::hex::get_package_release\u003c/code\u003e and records the \u003ccode\u003eouter_checksum\u003c/code\u003e and dependency names from that JSON response into \u003ccode\u003emanifest.toml\u003c/code\u003e, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\u003c/p\u003e\n\u003cp\u003eAn adversary in the middle who can intercept TLS with a certificate trusted by the Gleam process (for example a TLS-inspecting proxy using a CA in the operating system trust store or added through \u003ccode\u003eGLEAM_CACERTS_PATH\u003c/code\u003e), and who can modify both the API release response and the corresponding repository tarball, can supply a package archive with a matching forged checksum without the Hex repository signing key. Gleam verifies the forged tarball against the forged checksum, accepts it, and extracts it as a dependency source, resulting in loss of integrity of the downloaded package contents.\u003c/p\u003e\n\u003cp\u003eOnly projects that resolve or update Hex dependencies are affected, which happens when the manifest is missing, a dependency is added or updated, or dependency requirements change. Builds that reuse an unchanged, known-good \u003ccode\u003emanifest.toml\u003c/code\u003e continue to verify tarballs against its pinned checksum.\u003c/p\u003e\n\u003cp\u003eThis issue affects gleam: from 0.18.0-rc1 before 1.18.0.\u003c/p\u003e"
},
{
"base64": false,
"type": "text/markdown",
"value": "Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\n\nDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 `outer_checksum`. After resolving versions, `gleam_cli::dependencies::lookup_package` makes a second request to the unsigned Hex API through `gleam_core::hex::get_package_release` and records the `outer_checksum` and dependency names from that JSON response into `manifest.toml`, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\n\nAn adversary in the middle who can intercept TLS with a certificate trusted by the Gleam process (for example a TLS-inspecting proxy using a CA in the operating system trust store or added through `GLEAM_CACERTS_PATH`), and who can modify both the API release response and the corresponding repository tarball, can supply a package archive with a matching forged checksum without the Hex repository signing key. Gleam verifies the forged tarball against the forged checksum, accepts it, and extracts it as a dependency source, resulting in loss of integrity of the downloaded package contents.\n\nOnly projects that resolve or update Hex dependencies are affected, which happens when the manifest is missing, a dependency is added or updated, or dependency requirements change. Builds that reuse an unchanged, known-good `manifest.toml` continue to verify tarballs against its pinned checksum.\n\nThis issue affects gleam: from 0.18.0-rc1 before 1.18.0."
}
],
"value": "Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\n\nDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 outer_checksum. After resolving versions, gleam_cli::dependencies::lookup_package makes a second request to the unsigned Hex API through gleam_core::hex::get_package_release and records the outer_checksum and dependency names from that JSON response into manifest.toml, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\n\nAn adversary in the middle who can intercept TLS with a certificate trusted by the Gleam process (for example a TLS-inspecting proxy using a CA in the operating system trust store or added through GLEAM_CACERTS_PATH), and who can modify both the API release response and the corresponding repository tarball, can supply a package archive with a matching forged checksum without the Hex repository signing key. Gleam verifies the forged tarball against the forged checksum, accepts it, and extracts it as a dependency source, resulting in loss of integrity of the downloaded package contents.\n\nOnly projects that resolve or update Hex dependencies are affected, which happens when the manifest is missing, a dependency is added or updated, or dependency requirements change. Builds that reuse an unchanged, known-good manifest.toml continue to verify tarballs against its pinned checksum.\n\nThis issue affects gleam: from 0.18.0-rc1 before 1.18.0."
}
],
"impacts": [
{
"capecId": "CAPEC-94",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-94 Adversary in the Middle (AiTM)"
}
]
},
{
"capecId": "CAPEC-185",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-185 Malicious Software Download"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-345",
"description": "CWE-345 Insufficient Verification of Data Authenticity",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T19:18:20.583Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"name": "Insufficient Verification of Hex Package Metadata in Gleam",
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/gleam-lang/gleam/security/advisories/GHSA-4vvc-458m-r82g"
},
{
"name": "EEF CNA record for CVE-2026-59247",
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-59247.html"
},
{
"name": "OSV record EEF-CVE-2026-59247",
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-59247"
},
{
"tags": [
"related"
],
"url": "https://github.com/hexpm/specifications/blob/main/registry-v2.md"
},
{
"name": "Introducing commit 8447b78 in gleam-lang/gleam",
"tags": [
"related"
],
"url": "https://github.com/gleam-lang/gleam/commit/8447b78cc844ff4aec44eea23dbd68d1fea11f11"
},
{
"name": "Fix commit c9c0d48 in gleam-lang/gleam",
"tags": [
"patch"
],
"url": "https://github.com/gleam-lang/gleam/commit/c9c0d48c123c8abae6db8dd61b25ccb427ed3d35"
}
],
"source": {
"discovery": "INTERNAL"
},
"title": "Insufficient verification of Hex package metadata in Gleam"
}
},
"cveMetadata": {
"assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"assignerShortName": "EEF",
"cveId": "CVE-2026-59247",
"datePublished": "2026-07-29T14:24:55.499Z",
"dateReserved": "2026-07-04T04:24:03.652Z",
"dateUpdated": "2026-11-10T19:18:20.583Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.