CVE-2026-59247 (GCVE-0-2026-59247)
Vulnerability from cvelistv5 – Published: 2026-07-29 14:24 – Updated: 2026-09-08 01:07
VLAI
EPSS
VEX
Title
Insufficient verification of Hex package metadata in Gleam
Summary
Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.
During dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release's 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.
An 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.
Only 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. This issue affects gleam: from 0.18.0 before 1.18.0.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-07-29 15:03 UTC
CWE
- CWE-345 - Insufficient Verification of Data Authenticity
Assigner
References
5 references
| 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/gleam-lang/gleam/commit/c9c0d4… | patch |
| https://github.com/hexpm/specifications/blob/main… | related |
Impacted products
3 products
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| gleam-lang | gleam |
Affected:
0.18.0 , < 1.18.0
(semver)
cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:* |
||
| gleam-lang | gleam |
Affected:
0.18.0 , < 1.18.0
(semver)
Affected: 8447b78cc844ff4aec44eea23dbd68d1fea11f11 , < c9c0d48c123c8abae6db8dd61b25ccb427ed3d35 (git) cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:* |
||
| gleam-lang | gleam |
Affected:
v0.18.0-elixir , < v1.18.0-elixir
(other)
Affected: v0.18.0-elixir-slim , < v1.18.0-elixir-slim (other) Affected: v0.18.0-elixir-alpine , < v1.18.0-elixir-alpine (other) Affected: v0.18.0-erlang , < v1.18.0-erlang (other) Affected: v0.18.0-erlang-slim , < v1.18.0-erlang-slim (other) Affected: v0.18.0-erlang-alpine , < v1.18.0-erlang-alpine (other) Affected: v0.18.0-node , < v1.18.0-node (other) Affected: v0.18.0-node-slim , < v1.18.0-node-slim (other) Affected: v0.18.0-node-alpine , < v1.18.0-node-alpine (other) Affected: v1.6.0-scratch , < v1.18.0-scratch (other) 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": [
{
"collectionURL": "https://gleam.run",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam.run/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"
}
],
"repo": "https://github.com/gleam-lang/gleam",
"vendor": "gleam-lang",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0",
"versionType": "semver"
}
]
},
{
"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-lang",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0",
"versionType": "semver"
},
{
"lessThan": "c9c0d48c123c8abae6db8dd61b25ccb427ed3d35",
"status": "affected",
"version": "8447b78cc844ff4aec44eea23dbd68d1fea11f11",
"versionType": "git"
}
]
},
{
"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/gleam-lang",
"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-lang",
"versions": [
{
"lessThan": "v1.18.0-elixir",
"status": "affected",
"version": "v0.18.0-elixir",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-slim",
"status": "affected",
"version": "v0.18.0-elixir-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-alpine",
"status": "affected",
"version": "v0.18.0-elixir-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang",
"status": "affected",
"version": "v0.18.0-erlang",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-slim",
"status": "affected",
"version": "v0.18.0-erlang-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-alpine",
"status": "affected",
"version": "v0.18.0-erlang-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node",
"status": "affected",
"version": "v0.18.0-node",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-slim",
"status": "affected",
"version": "v0.18.0-node-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-alpine",
"status": "affected",
"version": "v0.18.0-node-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-scratch",
"status": "affected",
"version": "v1.6.0-scratch",
"versionType": "other"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*",
"versionEndExcluding": "1.18.0",
"versionStartIncluding": "0.18.0",
"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"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\u003cp\u003eDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 \u003ctt\u003eouter_checksum\u003c/tt\u003e. After resolving versions, \u003ctt\u003egleam_cli::dependencies::lookup_package\u003c/tt\u003e makes a second request to the unsigned Hex API through \u003ctt\u003egleam_core::hex::get_package_release\u003c/tt\u003e and records the \u003ctt\u003eouter_checksum\u003c/tt\u003e and dependency names from that JSON response into \u003ctt\u003emanifest.toml\u003c/tt\u003e, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\u003c/p\u003e\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 \u003ctt\u003eGLEAM_CACERTS_PATH\u003c/tt\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\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 \u003ctt\u003emanifest.toml\u003c/tt\u003e continue to verify tarballs against its pinned checksum. This issue affects gleam: from 0.18.0 before 1.18.0.\u003c/p\u003e"
}
],
"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. This issue affects gleam: from 0.18.0 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": {
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"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"
},
"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-09-08T01:07:21.957Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/gleam-lang/gleam/security/advisories/GHSA-4vvc-458m-r82g"
},
{
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-59247.html"
},
{
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-59247"
},
{
"tags": [
"patch"
],
"url": "https://github.com/gleam-lang/gleam/commit/c9c0d48c123c8abae6db8dd61b25ccb427ed3d35"
},
{
"tags": [
"related"
],
"url": "https://github.com/hexpm/specifications/blob/main/registry-v2.md"
}
],
"source": {
"discovery": "INTERNAL"
},
"title": "Insufficient verification of Hex package metadata in Gleam",
"x_generator": {
"engine": "cvelib 1.8.0"
}
}
},
"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-09-08T01:07:21.957Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-59247",
"date": "2026-10-30",
"epss": "0.00182",
"percentile": "0.07811"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"collectionURL": "https://gleam.run",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam.run/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"
}
],
"repo": "https://github.com/gleam-lang/gleam",
"vendor": "gleam-lang",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0",
"versionType": "semver"
}
]
},
{
"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-lang",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0",
"versionType": "semver"
},
{
"lessThan": "c9c0d48c123c8abae6db8dd61b25ccb427ed3d35",
"status": "affected",
"version": "8447b78cc844ff4aec44eea23dbd68d1fea11f11",
"versionType": "git"
}
]
},
{
"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/gleam-lang",
"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-lang",
"versions": [
{
"lessThan": "v1.18.0-elixir",
"status": "affected",
"version": "v0.18.0-elixir",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-slim",
"status": "affected",
"version": "v0.18.0-elixir-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-alpine",
"status": "affected",
"version": "v0.18.0-elixir-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang",
"status": "affected",
"version": "v0.18.0-erlang",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-slim",
"status": "affected",
"version": "v0.18.0-erlang-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-alpine",
"status": "affected",
"version": "v0.18.0-erlang-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node",
"status": "affected",
"version": "v0.18.0-node",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-slim",
"status": "affected",
"version": "v0.18.0-node-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-alpine",
"status": "affected",
"version": "v0.18.0-node-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-scratch",
"status": "affected",
"version": "v1.6.0-scratch",
"versionType": "other"
}
]
}
],
"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. This issue affects gleam: from 0.18.0 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-10-23T23:10:00.157",
"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/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": [
{
"collectionURL": "https://gleam.run",
"cpes": [
"cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"gleam_cli::dependencies",
"gleam_cli::dependencies::dependency_manager"
],
"packageName": "gleam.run/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"
}
],
"repo": "https://github.com/gleam-lang/gleam",
"vendor": "gleam-lang",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0",
"versionType": "semver"
}
]
},
{
"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-lang",
"versions": [
{
"lessThan": "1.18.0",
"status": "affected",
"version": "0.18.0",
"versionType": "semver"
},
{
"lessThan": "c9c0d48c123c8abae6db8dd61b25ccb427ed3d35",
"status": "affected",
"version": "8447b78cc844ff4aec44eea23dbd68d1fea11f11",
"versionType": "git"
}
]
},
{
"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/gleam-lang",
"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-lang",
"versions": [
{
"lessThan": "v1.18.0-elixir",
"status": "affected",
"version": "v0.18.0-elixir",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-slim",
"status": "affected",
"version": "v0.18.0-elixir-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-elixir-alpine",
"status": "affected",
"version": "v0.18.0-elixir-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang",
"status": "affected",
"version": "v0.18.0-erlang",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-slim",
"status": "affected",
"version": "v0.18.0-erlang-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-erlang-alpine",
"status": "affected",
"version": "v0.18.0-erlang-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node",
"status": "affected",
"version": "v0.18.0-node",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-slim",
"status": "affected",
"version": "v0.18.0-node-slim",
"versionType": "other"
},
{
"lessThan": "v1.18.0-node-alpine",
"status": "affected",
"version": "v0.18.0-node-alpine",
"versionType": "other"
},
{
"lessThan": "v1.18.0-scratch",
"status": "affected",
"version": "v1.6.0-scratch",
"versionType": "other"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:gleam-lang:gleam:*:*:*:*:*:*:*:*",
"versionEndExcluding": "1.18.0",
"versionStartIncluding": "0.18.0",
"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"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Insufficient Verification of Data Authenticity vulnerability in Gleam allows an adversary in the middle to substitute forged Hex package contents during dependency resolution.\u003cp\u003eDuring dependency resolution Gleam fetches package metadata from the signature-verified Hex repository, which covers each release\u0027s dependency requirements and SHA-256 \u003ctt\u003eouter_checksum\u003c/tt\u003e. After resolving versions, \u003ctt\u003egleam_cli::dependencies::lookup_package\u003c/tt\u003e makes a second request to the unsigned Hex API through \u003ctt\u003egleam_core::hex::get_package_release\u003c/tt\u003e and records the \u003ctt\u003eouter_checksum\u003c/tt\u003e and dependency names from that JSON response into \u003ctt\u003emanifest.toml\u003c/tt\u003e, instead of the values from the verified repository metadata. The Hex repository signature does not cover the API response.\u003c/p\u003e\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 \u003ctt\u003eGLEAM_CACERTS_PATH\u003c/tt\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\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 \u003ctt\u003emanifest.toml\u003c/tt\u003e continue to verify tarballs against its pinned checksum. This issue affects gleam: from 0.18.0 before 1.18.0.\u003c/p\u003e"
}
],
"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. This issue affects gleam: from 0.18.0 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": {
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 7.6,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"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"
},
"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-09-08T01:07:21.957Z",
"orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
"shortName": "EEF"
},
"references": [
{
"tags": [
"vendor-advisory",
"related"
],
"url": "https://github.com/gleam-lang/gleam/security/advisories/GHSA-4vvc-458m-r82g"
},
{
"tags": [
"related"
],
"url": "https://cna.erlef.org/cves/CVE-2026-59247.html"
},
{
"tags": [
"related"
],
"url": "https://osv.dev/vulnerability/EEF-CVE-2026-59247"
},
{
"tags": [
"patch"
],
"url": "https://github.com/gleam-lang/gleam/commit/c9c0d48c123c8abae6db8dd61b25ccb427ed3d35"
},
{
"tags": [
"related"
],
"url": "https://github.com/hexpm/specifications/blob/main/registry-v2.md"
}
],
"source": {
"discovery": "INTERNAL"
},
"title": "Insufficient verification of Hex package metadata in Gleam",
"x_generator": {
"engine": "cvelib 1.8.0"
}
}
},
"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-09-08T01:07:21.957Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
}
}
Loading…
Loading…
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.
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.
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
Loading timeline…
Loading…
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
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.
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.
Loading…
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.