Archive::Tar versions before 3.10 for Perl allow memory exhaustion via attacker controlled entry size field in tar header.
_read_tar() reads each entrys payload with $handle->read($$data, $block), where $block is derived from the entrys 12-byte size field in the tar header with no upper bound on that value.
A crafted header declaring a multi-gigabyte size causes Perl to allocate a scalar of that size.
The product allocates memory based on an untrusted, large size value, but it does not ensure that the size is within expected limits, allowing arbitrary amounts of memory to be allocated.
| Name | Vendor | Start Version | End Version |
|---|---|---|---|
| Archive::tar | Archive::tar_project | * | 3.10 (excluding) |