CVE-2026-53951
Full vulnerability record from the local CVENow database.
Description
Copier is a library and CLI app for rendering project templates. In versions 9.5.0 through 9.15.1, the `trust` setting's prefix match (`copier/_settings.py`) compares the template URL against a trusted prefix with a raw `str.startswith` and no path normalization, while the URL is normalized when the template is actually fetched (`Path.resolve()` for local paths; libcurl dot-segment removal for `https`). A template reference that textually starts with a trusted prefix but contains `..` is therefore granted trust yet resolves to a different, attacker-controlled template, whose `tasks` / `migrations` / `jinja_extensions` then run without the `--trust` prompt — arbitrary command execution. Version 9.15.2 patches the issue.
View original CVE JSON
{
"id": "CVE-2026-53951",
"sourceIdentifier": "[email protected]",
"published": "2026-07-08T16:16:30.623",
"lastModified": "2026-10-25T20:10:00.147",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Copier is a library and CLI app for rendering project templates. In versions 9.5.0 through 9.15.1, the `trust` setting's prefix match\n(`copier/_settings.py`) compares the template URL against a trusted prefix with a raw `str.startswith` and no path normalization, while the URL is normalized when the template is actually fetched (`Path.resolve()` for local paths; libcurl dot-segment removal for `https`). A template reference that textually starts with a trusted prefix but contains `..` is therefore granted trust yet resolves to a different, attacker-controlled template, whose `tasks` / `migrations` / `jinja_extensions` then run without the `--trust` prompt — arbitrary command execution. Version 9.15.2 patches the issue."
},
{
"lang": "es",
"value": "Copier es una biblioteca y aplicación CLI para renderizar plantillas de proyecto. En las versiones 9.5.0 a 9.15.1, la coincidencia de prefijo de la configuración ’trust’ (’copier/_settings.py’) compara la URL de la plantilla con un prefijo de confianza con un ’str.startswith’ sin procesar y sin normalización de ruta, mientras que la URL se normaliza cuando la plantilla se obtiene realmente (’Path.resolve()’ para rutas locales; eliminación de segmentos de punto de libcurl para ’HTTPS’). Una referencia de plantilla que comienza textualmente con un prefijo de confianza pero contiene ’..’ por lo tanto, se le concede confianza, pero se resuelve en una plantilla diferente, controlada por el atacante, cuyas ’tasks’ / ’migrations’ / ’jinja_extensions’ se ejecutan entonces sin la solicitud de ’--trust’ - ejecución de comandos arbitrarios. La versión 9.15.2 soluciona el problema."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "copier-org",
"product": "copier",
"versions": [
{
"version": ">= 9.5.0, < 9.15.2",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV40": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "4.0",
"vectorString": "CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/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",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"attackVector": "LOCAL",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"privilegesRequired": "NONE",
"userInteraction": "PASSIVE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"subAvailabilityImpact": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"confidentialityRequirement": "NOT_DEFINED",
"integrityRequirement": "NOT_DEFINED",
"availabilityRequirement": "NOT_DEFINED",
"modifiedAttackVector": "NOT_DEFINED",
"modifiedAttackComplexity": "NOT_DEFINED",
"modifiedAttackRequirements": "NOT_DEFINED",
"modifiedPrivilegesRequired": "NOT_DEFINED",
"modifiedUserInteraction": "NOT_DEFINED",
"modifiedVulnConfidentialityImpact": "NOT_DEFINED",
"modifiedVulnIntegrityImpact": "NOT_DEFINED",
"modifiedVulnAvailabilityImpact": "NOT_DEFINED",
"modifiedSubConfidentialityImpact": "NOT_DEFINED",
"modifiedSubIntegrityImpact": "NOT_DEFINED",
"modifiedSubAvailabilityImpact": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"valueDensity": "NOT_DEFINED",
"vulnerabilityResponseEffort": "NOT_DEFINED",
"providerUrgency": "NOT_DEFINED"
}
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-07-09T13:46:41.622835Z",
"id": "CVE-2026-53951",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-22"
},
{
"lang": "en",
"value": "CWE-94"
}
]
}
],
"references": [
{
"url": "https://github.com/copier-org/copier/releases/tag/v9.15.2",
"source": "[email protected]"
},
{
"url": "https://github.com/copier-org/copier/security/advisories/GHSA-9gmc-jqmh-3rvm",
"source": "[email protected]"
},
{
"url": "https://github.com/copier-org/copier/security/advisories/GHSA-9gmc-jqmh-3rvm",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
}
]
}