import CS git perl-Archive-Tar-2.30-3.el8_10

This commit is contained in:
AlmaLinux RelEng Bot 2026-08-02 23:47:22 -04:00
parent f61e061ced
commit 758d5eefee
2 changed files with 81 additions and 1 deletions

72
SOURCES/RHEL-191913.patch Normal file
View File

@ -0,0 +1,72 @@
From a7794880779e9e7aa2d0fb966f2b5e46d0e278e2 Mon Sep 17 00:00:00 2001
From: Stig Palmquist <stig@stig.io>
Date: Mon, 25 May 2026 19:11:34 +0100
Subject: [PATCH] Cpan entry size during read
Cap entry size during read to defend against attacker-controlled
size-field memory DoS
The tar header's 12-byte size field is attacker-controlled. Archive::Tar's
non-skip extract path at Tar.pm:501 allocates a Perl scalar of the declared
size before returning the read-short error, allowing a few-KB compressed
archive declaring a 100 GB inner entry to trigger immediate multi-GB
allocation. The existing $EXTRACT_BLOCK_SIZE is an output-side syswrite
chunk size, not an input cap.
Add $MAX_FILE_SIZE (default 1 GiB) checked once per entry, gating both the
chunked-skip and full-slurp branches. Set to 0 to disable the cap.
Signed-off-by: Chris 'BinGOs' Williams <chris@bingosnet.co.uk>
---
lib/Archive/Tar.pm | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/lib/Archive/Tar.pm b/lib/Archive/Tar.pm
index 5b968c8..356ab44 100644
--- a/lib/Archive/Tar.pm
+++ b/lib/Archive/Tar.pm
@@ -24,6 +24,7 @@ use strict;
use vars qw[$DEBUG $error $VERSION $WARN $FOLLOW_SYMLINK $CHOWN $CHMOD
$DO_NOT_USE_PREFIX $HAS_PERLIO $HAS_IO_STRING $SAME_PERMISSIONS
$INSECURE_EXTRACT_MODE $ZERO_PAD_NUMBERS @ISA @EXPORT $RESOLVE_SYMLINK
+ $MAX_FILE_SIZE
];
@ISA = qw[Exporter];
@@ -39,6 +40,7 @@ $DO_NOT_USE_PREFIX = 0;
$INSECURE_EXTRACT_MODE = 0;
$ZERO_PAD_NUMBERS = 0;
$RESOLVE_SYMLINK = $ENV{'PERL5_AT_RESOLVE_SYMLINK'} || 'speed';
+$MAX_FILE_SIZE = 1024 * 1024 * 1024;
BEGIN {
use Config;
@@ -416,6 +418,14 @@ sub _read_tar {
my $block = BLOCK_SIZE->( $entry->size );
+ if ( $MAX_FILE_SIZE && $entry->size > $MAX_FILE_SIZE ) {
+ $self->_error( qq[Entry '] . $entry->full_path .
+ qq[' declared size ] . $entry->size .
+ qq[ bytes exceeds \$Archive::Tar::MAX_FILE_SIZE ] .
+ qq[($MAX_FILE_SIZE); refusing to allocate] );
+ next LOOP;
+ }
+
$data = $entry->get_content_by_ref;
my $skip = 0;
@@ -2154,6 +2164,13 @@ numbers. Added for compatibility with C<busybox> implementations.
It won't work for terminal, pipe or sockets or every non seekable source.
+=head2 $Archive::Tar::MAX_FILE_SIZE
+
+This variable holds an upper bound on the per-entry declared size that
+C<Archive::Tar> will accept when reading an archive. Entries whose header
+claims a larger size are refused with an error before any read allocation.
+Defaults to 1 GiB. Set to 0 to disable the cap.
+
=cut
=head1 FAQ

View File

@ -7,7 +7,7 @@
Name: perl-Archive-Tar
Version: 2.30
Release: 2%{?dist}
Release: 3%{?dist}
Summary: A module for Perl manipulation of .tar files
License: GPL+ or Artistic
URL: https://metacpan.org/release/Archive-Tar
@ -17,6 +17,8 @@ Patch0: Archive-Tar-2.02-Do-not-sleep-in-Makefile.PL.patch
# https://github.com/jib/archive-tar-new/commit/17c873492a05eddc0de18c1485e0b2cccd5a9158
# https://github.com/jib/archive-tar-new/commit/484f71ea0189ed46690f50dc7ee71d4b8bc0e70f
Patch1: RHEL-181654.patch
# https://github.com/jib/archive-tar-new/commit/f9af01426038e29d9578825a0cd3626946ab08c7
Patch2: RHEL-191913.patch
BuildArch: noarch
# Most of the BRS are needed only for tests, compression support at run-time
# is optional soft dependency.
@ -92,6 +94,7 @@ will also support compressed or gzipped tar files.
%setup -q -n Archive-Tar-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%build
perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1
@ -113,6 +116,11 @@ make test
%changelog
* Fri Jul 03 2026 RHEL Packaging Agent <redhat-ymir-agent@redhat.com> - 2.30-3
- Fix CVE-2026-9538: cap per-entry declared size during tar read to
defend against attacker-controlled size-field memory DoS
- Resolves: RHEL-191913
* Fri Jun 05 2026 RHEL Packaging Agent <redhat-ymir-agent@redhat.com> - 2.30-2
- Fix CVE-2026-42496: validate symlink and hardlink targets in secure
extract mode