tar filter allows writing outside destination via empty-named symlink
Impact
tarfile.tar_filter could be bypassed using crafted link entries, including symlinks with empty or directory-like names, to redirect later archive members outside the intended extraction directory. This allowed a malicious tar archive to cause tarfile.extractall() with filter="tar" to write files outside the destination directory, subject to the permissions of the extracting process.
Source excerpt · PSFAffected packages
Affected products
Vendor version evidence. Product records are separate from automatic dependency matching.
Python Software Foundation · CPython
Other versions: unaffected
| Version / range | Source status |
|---|---|
| 0 to before 3.11.18 | affected |
| 3.12.0 to before 3.12.16 | affected |
| 3.13.0 to before 3.13.18 | affected |
| 3.14.0 to before 3.14.10 | affected |
| 3.15.0 to before 3.15.2 | affected |
| 3.16.0a1 to before 3.16.0 | affected |
Original source description
tarfile.tar_filter could be bypassed using crafted link entries, including symlinks with empty or directory-like names, to redirect later archive members outside the intended extraction directory. This allowed a malicious tar archive to cause tarfile.extractall() with filter="tar" to write files outside the destination directory, subject to the permissions of the extracting process.
This is the tarfile.tar_filter counterpart of CVE-2026-7774, which covered tarfile.data_filter.
References
- Patch github.com/python/cpython/pull/160098
- Source reference github.com/python/cpython/issues/160097
- Security advisory mail.python.org/archives/list/security-announce@python.org/thread/43JOWPRAV5DI3VZ4FUEUAZOHCATXXOCK/
- Patch github.com/python/cpython/commit/0901ad4ffb22605f12b705d1c1197f0a01f0ba0b
- Patch github.com/python/cpython/commit/c6ada40177436e4e2533a7b252082b5f0c043477
- Patch github.com/python/cpython/commit/e7e0b3523ad6ba8472873dda594cf4021a16f8b5
- Patch github.com/python/cpython/commit/04d8fca7da2cf3ebc0881fec8a53a1330c3b665d
- Patch github.com/python/cpython/commit/bc93f8ad4c4a0f92d184ec8fccc8ff8a651dcec2
- Patch github.com/python/cpython/commit/f4401da82e2baec5dab06cf070fbca77d53220f0