Skip to content
Heist/ feed
Back to feed
Medium

Copier safe template has arbitrary filesystem write access via directory symlinks when _preserve_symlinks: true

Type: advisorySources: OSV

Copier is a library and CLI app for rendering project templates. Prior to version 9.11.2, Copier suggests that it's safe to generate a project from a safe template, i.e. one that doesn't use unsafe features like custom Jinja extensions which would require passing the `--UNSAFE,--trust` flag. As it turns out, a safe template can currently write to arbitrary directories outside the destination path by using directory a symlink along with `_preserve_symlinks: true` and a generated directory structure whose rendered path is inside the symlinked directory. This way, a malicious template author can create a template that overwrites arbitrary files (according to the user's write permissions), e.g., to cause havoc. Version 9.11.2 patches the issue.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-23986
Confirmed fixed CVEs
Not specified
Updated in this feed
7 Nov 2026, 01:07 UTC · Revision 1

Source evidence

Copier safe template has arbitrary filesystem write access via directory symlinks when _preserve_symlinks: true

core-osv · Original source

Published 21 Jan 2026, 22:20 UTC

Copier is a library and CLI app for rendering project templates. Prior to version 9.11.2, Copier suggests that it's safe to generate a project from a safe template, i.e. one that doesn't use unsafe features like custom Jinja extensions which would require passing the `--UNSAFE,--trust` flag. As it turns out, a safe template can currently write to arbitrary directories outside the destination path by using directory a symlink along with `_preserve_symlinks: true` and a generated directory structure whose rendered path is inside the symlinked directory. This way, a malicious template author can create a template that overwrites arbitrary files (according to the user's write permissions), e.g., to cause havoc. Version 9.11.2 patches the issue.

osv:CVE-2026-23986
Complete source record
{
  "id": "1b382e8d4f0c0ef0d2025e59e2d36ade1c4333f4ce351350059bb6fe8bb355e9",
  "url": "https://osv.dev/vulnerability/CVE-2026-23986",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Copier safe template has arbitrary filesystem write access via directory symlinks when _preserve_symlinks: true",
    "summary": "Copier is a library and CLI app for rendering project templates. Prior to version 9.11.2, Copier suggests that it's safe to generate a project from a safe template, i.e. one that doesn't use unsafe features like custom Jinja extensions which would require passing the `--UNSAFE,--trust` flag. As it turns out, a safe template can currently write to arbitrary directories outside the destination path by using directory a symlink along with `_preserve_symlinks: true` and a generated directory structure whose rendered path is inside the symlinked directory. This way, a malicious template author can create a template that overwrites arbitrary files (according to the user's write permissions), e.g., to cause havoc. Version 9.11.2 patches the issue.",
    "evidence": "osv:CVE-2026-23986",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-23986",
      "aliases": [
        "CVE-2026-23986",
        "GHSA-4fqp-r85r-hxqh",
        "PYSEC-2026-1272"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/copier-org/copier",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "b9ee2962b5e0a81b838261b630bd36d0c6c3fa87"
                },
                {
                  "fixed": "b3a7b3772d17cf0e7a4481978188c9f536c8d8f6"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "cpe": "cpe:2.3:a:copier-org:copier:*:*:*:*:*:python:*:*",
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "9.11.2"
                      }
                    ],
                    "source": "CPE_RANGE"
                  },
                  {
                    "range": [
                      {
                        "fixed": "b3a7b3772d17cf0e7a4481978188c9f536c8d8f6"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "fixed": "b9ee2962b5e0a81b838261b630bd36d0c6c3fa87"
                      }
                    ],
                    "source": "REFERENCES_TAG",
                    "original_tag": "v9.11.2"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v9.11.1",
            "v9.11.0",
            "v9.10.3",
            "v9.10.2",
            "v9.10.1",
            "v9.10.0",
            "v9.9.1",
            "v9.9.0",
            "v9.8.0",
            "v9.7.1",
            "v9.7.0",
            "v9.6.0",
            "v9.5.0",
            "v9.4.1",
            "v9.4.0",
            "v9.3.1",
            "v9.3.0",
            "v9.2.0",
            "v9.1.1",
            "v9.0.1",
            "v9.0.0",
            "v8.3.0",
            "v8.2.0",
            "v8.1.0",
            "v8.0.0",
            "v7.2.0",
            "v7.1.0",
            "v7.1.0a0",
            "v7.0.1",
            "v6.2.0",
            "v6.1.0",
            "v6.0.0",
            "v6.0.0b0",
            "v6.0.0a9",
            "v6.0.0a8",
            "v6.0.0a7",
            "v6.0.0a6",
            "v6.0.0a5",
            "v6.0.0a4",
            "v6.0.0a3",
            "v6.0.0a2",
            "v6.0.0a1",
            "v6.0.0a0",
            "v5.1.0",
            "v5.0.0",
            "v4.1.0",
            "v4.0.2",
            "v4.0.1",
            "v4.0.0",
            "v3.2.0",
            "v3.1.0",
            "v3.0.6",
            "v3.0.5",
            "v3.0.4",
            "v3.0.3",
            "v3.0.2",
            "v3.0.1",
            "v3.0.0",
            "v3.0.0-beta1",
            "v3.0.0-alpha8",
            "v3.0.0-alpha7",
            "3.0.0-alpha6",
            "3.0.0-alpha5",
            "v3.0.0-alpha4",
            "v3.0.0-alpha3",
            "v3.0.0-alpha2",
            "v3.0.0-alpha1",
            "v2.5.1",
            "v2.5.0",
            "v2.4.2",
            "v2.4.1",
            "v2.4.0",
            "v2.3.3",
            "v2.3.2",
            "v2.3.1",
            "v2.3",
            "v2.2.3",
            "1.1.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23986.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:48.560103407Z",
      "provider": "osv",
      "references": [
        "https://github.com/copier-org/copier/releases/tag/v9.11.2",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/23xxx/CVE-2026-23986.json",
        "https://github.com/copier-org/copier/security/advisories/GHSA-4fqp-r85r-hxqh",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-23986",
        "https://github.com/copier-org/copier/commit/b3a7b3772d17cf0e7a4481978188c9f536c8d8f6"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-61"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/23xxx/CVE-2026-23986.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-23986",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 516853,
  "published_at": "2026-01-21T22:20:37.72+00:00"
}