CVE-2026-47699
Full vulnerability record from the local CVENow database.
Description
Confidential Containers Guest Components provides guest tools and components for confidential container workloads. From 0.16.0 until 0.20.0, a crafted OCI image layer can make image_rs::stream::unpack::unpack() create a hardlink outside its destination directory. In image-rs/src/stream/unpack.rs, try_hardlink_fallback() validates the hardlink source but computes the destination with destination.join(&entry_rel). Rust Path::join replaces the base when entry_rel is an absolute tar entry path, so fs::hard_link(&src_canon, &dst_entry_abs) can write attacker-controlled content to an arbitrary absolute path. In Confidential Containers the workload owner already controls trusted image content, so the issue is a workload-owner escape into the pod virtual machine rather than a crossing of the image trust boundary, but it may enable access to pod virtual machine capabilities and attestation abuse. This issue is fixed in version 0.20.0.
View original CVE JSON
{
"id": "CVE-2026-47699",
"sourceIdentifier": "[email protected]",
"published": "2026-08-18T22:16:52.127",
"lastModified": "2026-10-22T17:09:59.477",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Confidential Containers Guest Components provides guest tools and components for confidential container workloads. From 0.16.0 until 0.20.0, a crafted OCI image layer can make image_rs::stream::unpack::unpack() create a hardlink outside its destination directory. In image-rs/src/stream/unpack.rs, try_hardlink_fallback() validates the hardlink source but computes the destination with destination.join(&entry_rel). Rust Path::join replaces the base when entry_rel is an absolute tar entry path, so fs::hard_link(&src_canon, &dst_entry_abs) can write attacker-controlled content to an arbitrary absolute path. In Confidential Containers the workload owner already controls trusted image content, so the issue is a workload-owner escape into the pod virtual machine rather than a crossing of the image trust boundary, but it may enable access to pod virtual machine capabilities and attestation abuse. This issue is fixed in version 0.20.0."
},
{
"lang": "es",
"value": "Componentes de invitado de Contenedores Confidenciales proporciona herramientas y componentes de invitado para cargas de trabajo de contenedores confidenciales. Desde la versión 0.16.0 hasta la 0.20.0, una capa de imagen OCI manipulada puede hacer que image_rs::stream::unpack::unpack() cree un enlace duro fuera de su directorio de destino. En image-rs/src/stream/unpack.rs, try_hardlink_fallback() valida el origen del enlace duro pero calcula el destino con destination.join(&entry_rel). Path::join de Rust reemplaza la base cuando entry_rel es una ruta de entrada tar absoluta, por lo que fs::hard_link(&src_canon, &dst_entry_abs) puede escribir contenido controlado por el atacante en una ruta absoluta arbitraria. En Contenedores Confidenciales, el propietario de la carga de trabajo ya controla el contenido de la imagen de confianza, por lo que el problema es un escape del propietario de la carga de trabajo hacia la máquina virtual del pod en lugar de un cruce del límite de confianza de la imagen, pero puede permitir el acceso a las capacidades de la máquina virtual del pod y el abuso de la atestación. Este problema está solucionado en la versión 0.20.0."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "confidential-containers",
"product": "guest-components",
"versions": [
{
"version": ">= 0.16.0, < 0.20.0",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N",
"baseScore": 6.4,
"baseSeverity": "MEDIUM",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "LOW",
"userInteraction": "NONE",
"scope": "CHANGED",
"confidentialityImpact": "LOW",
"integrityImpact": "LOW",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 3.1,
"impactScore": 2.7
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-08-21T19:17:03.503833Z",
"id": "CVE-2026-47699",
"options": [
{
"exploitation": "none"
},
{
"automatable": "no"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-22"
},
{
"lang": "en",
"value": "CWE-59"
}
]
}
],
"references": [
{
"url": "https://github.com/confidential-containers/guest-components/commit/14fbb711af0b29bb9cad307969d57b0de9b85d7f",
"source": "[email protected]"
},
{
"url": "https://github.com/confidential-containers/guest-components/commit/7cc1bc458973310296e58aedbb15cb7963297bbe",
"source": "[email protected]"
},
{
"url": "https://github.com/confidential-containers/guest-components/pull/1440",
"source": "[email protected]"
},
{
"url": "https://github.com/confidential-containers/guest-components/pull/1457",
"source": "[email protected]"
},
{
"url": "https://github.com/confidential-containers/guest-components/releases/tag/v0.20.0",
"source": "[email protected]"
},
{
"url": "https://github.com/confidential-containers/guest-components/security/advisories/GHSA-84rc-2q4r-45pc",
"source": "[email protected]"
}
]
}