Archive::Tar versions before 3.08 for Perl extract hardlinks to attacker controlled paths outside the extraction directory.
_make_special_file() passes the tar headers linkname to link() without validating it against absolute paths or .. segments, creating a hardlink that shares the victim files inode.
A subsequent write through the extracted name modifies the victim file, and the post-extraction chmod, chown, and utime block in _extract_file() (guarded only against symlinks via -l) applies the tar headers mode, owner, and timestamps to the shared inode during extraction alone.
The product attempts to access a file based on the filename, but it does not properly prevent that filename from identifying a link or shortcut that resolves to an unintended resource.
| Name | Vendor | Start Version | End Version |
|---|---|---|---|
| Archive::tar | Archive::tar_project | * | 3.08 (excluding) |