Skip to main content

IO::Uncompress::Unzip CVE-2025-15649

| EUVDEUVD-2025-209949 MEDIUM
Uncaught Exception (CWE-248)
2026-05-27 CPANSec GHSA-hcq9-8v5x-mqjp
5.5
CVSS 3.1 · Vendor: CPANSec
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft ZIP with invalid DOS date field
  2. Delivery
    Deliver file to local processing path
  3. Exploit
    Application calls IO::Uncompress::Unzip->new()
  4. Execution
    timelocal() dies with out-of-range error
  5. Persist
    Uncaught exception crashes worker process
  6. Impact
    ZIP processing availability disrupted

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling completeness
Exploitation Conditions

The CVSS attack vector is AV:L (local), meaning the attacker must be able to supply a file that is processed by a locally running Perl application using IO::Uncompress::Unzip. This covers scenarios including: local users placing files in watched directories, remote users uploading files through an application that subsequently processes them locally, or any pipeline where untrusted ZIP data reaches the module. Exploitation is limited to causing an uncaught exception in the parsing process (availability disruption only; no code execution, no data exfiltration). Conditions required: target system must run Perl with IO-Compress below 2.215, and the application must invoke IO::Uncompress::Unzip->new() against attacker-controlled input without its own outer eval guard. Limiting factors: local attack vector reduces opportunistic remote exploitation; low CVSS privilege requirement (PR:L) is consistent with any user who can write or deliver files; no authentication requirement is imposed by the module itself, though the application layer may enforce one.

Impact

The CVSS 3.1 base score of 5.5 (Medium) is consistent with the technical impact: AV:L requires an attacker to be able to supply a file processed on the local system; AC:L and PR:L reflect that no elevated privileges are needed beyond whatever access allows file placement or selection; S:U and C:N/I:N/A:H confirm the impact is limited to crashing the processing application with no confidentiality or integrity consequences. EPSS at 0.02% (6th percentile) aligns with the low exploitability - the vulnerability requires crafting a malformed ZIP and having it processed, making opportunistic mass exploitation implausible. There is no CISA KEV listing and no public proof-of-concept code. The 'Information Disclosure' tag in the ENISA record appears inconsistent with both the CVSS impact vector (A:H only) and the technical description; real-world impact is strictly availability disruption of the parsing process. The primary realistic concern is for Perl applications that unattended-process ZIP archives from untrusted sources (batch pipelines, file upload handlers), where an uncaught exception could silently crash a worker without an operator-visible error. Callers that rely on $UnzipError being populated on failure may mishandle the exception as an untrapped crash rather than a recoverable parse error, potentially surfacing stack traces or halting daemons.

Exploit ScenarioDerived

An attacker crafts a ZIP archive where the local-file-header date field encodes an invalid value such as month 13 or hour 25, then causes a Perl application using IO::Uncompress::Unzip (version < 2.215) to process the file - for example, by uploading it to a batch processing queue, a file-import API endpoint, or placing it in a directory scanned by a local daemon. When the application calls IO::Uncompress::Unzip->new($file), timelocal() dies with an out-of-range error, the exception propagates unhandled, and the worker process terminates or enters an error state, disrupting ZIP processing availability. No public proof-of-concept has been identified, but the commit diff and GitHub issue at https://github.com/pmqs/IO-Compress/issues/65 provide sufficient detail to construct a malformed archive trivially.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – May 29, 2026

Uncaught exception in IO::Uncompress::Unzip before version 2.215 for Perl causes application-level denial of service when parsing ZIP files containing malformed DOS date fields. The _dosToUnixTime() function calls Time::Local::timelocal() without an eval guard, so a ZIP header encoding an out-of-range month, day, or hour causes timelocal() to die, propagating the exception to the caller rather than returning undef with a populated $UnzipError as callers expect. Any Perl application that processes untrusted ZIP files locally is affected; no public exploit has been identified at time of analysis, and EPSS exploitation probability is negligible at 0.02%.

RemediationAI

Upgrade IO-Compress to version 2.215 or later, which wraps the Time::Local::timelocal() call in an eval block and short-circuits on zero or unparseable timestamps, restoring the expected undef-plus-$UnzipError contract. The patch commit is publicly available at https://github.com/pmqs/IO-Compress/commit/fd28c1d2374eee9811f6d0c5bddc0957abdf1da8.patch and the release is indexed on MetaCPAN at https://metacpan.org/release/PMQS/IO-Compress-2.215/changes. On systems using cpan or cpanm, run cpanm IO::Compress to pull the latest release. For environments where upgrading is not immediately feasible, callers can wrap their own IO::Uncompress::Unzip->new() invocations in an eval {} block, catching the propagated exception and treating it as a parse failure; this is a code-level workaround with no side effects beyond added verbosity. Input validation - pre-screening ZIP headers for out-of-range DOS date fields before passing to the module - is theoretically possible but complex to implement correctly given the DOS timestamp bit-field encoding and is not recommended as a primary control.

Affected VersionsENISA

IO::Uncompress::Unzip 0 <2.215

Affected Packages

euvd io_uncompress_unzip fix: 2.215

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

IO::Uncompress::Unzip is a core Perl decompression module distributed as part of the IO-Compress distribution by PMQS (cpe:2.3:a:pmqs:io::uncompress::unzip:*:*:*:*:*:*:*:*). The vulnerability resides in _dosToUnixTime(), which decodes the 32-bit MS-DOS timestamp stored in each ZIP local-file-header entry and converts it via Perl's Time::Local::timelocal(). The MS-DOS date format encodes year, month, day, hour, minute, and second in bit fields; crafted or corrupt ZIP archives can encode field values that exceed the ranges timelocal() accepts (e.g., month > 11, day > 31, hour > 23). When such a value is decoded, timelocal() throws a fatal Perl exception rather than returning an error code. Because the call site wraps no eval guard, the exception unwinds past IO::Uncompress::Unzip->new(), breaking the module's documented error-handling contract. The root cause is CWE-248 (Uncaught Exception): the library's internal error-propagation model diverges from Perl idiomatic practice when integrating with a function that uses exception-based signalling. The fix confirmed in the commit at fd28c1d2 adds an eval {} block around the timelocal() call and returns 0 when $dt is zero or unparseable, restoring the expected behavior.

Know when Io gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (CPANSec) PRIMARY 5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
SUSE MEDIUM
Red Hat 6.5 MEDIUM

Primary rating from Vendor (CPANSec).

CVSS VectorVendor: CPANSec

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

2
CVSS changed
May 29, 2026 - 16:27 NVD
5.5 (MEDIUM)
CVE Published
May 27, 2026 - 02:25 nvd
UNKNOWN (no severity yet)

DescriptionCVE.org

IO::Uncompress::Unzip versions before 2.215 for Perl propagate uncaught exception when parsing zip header with malformed DOS date.

_dosToUnixTime() decodes the local-file-header last-modification date field and calls Time::Local::timelocal() without an eval guard. A header whose date field decodes to an out-of-range month, day, or hour causes timelocal() to die.

The exception propagates out of IO::Uncompress::Unzip->new($file) where callers expect undef plus $UnzipError.

Threat Intelligence Overview

EPSS Score
0.0%
Top 94% exploitable
Data Quality
7 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

28
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +28
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Vendor StatusVendor

SUSE

Severity: Medium
Product Status
SLES15-SP5-CHOST-BYOS-SAP-CCloud Fixed
SLES15-SP6-CHOST-BYOS Fixed
SLES15-SP6-CHOST-BYOS-Aliyun Fixed
SLES15-SP6-CHOST-BYOS-Azure Fixed
SLES15-SP6-CHOST-BYOS-EC2 Fixed

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy