← Back to Feed CACHED · 2026-08-02 18:48:02 · CACHE_KEY CVE-2026-60074
CVE-2026-60074 · CWE-1289 · Disclosed 2026-07-30

Date::Manip versions through 6.99 for Perl return corrupted dates via non-ASCII decimal digits that pass…

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Like a cashier's calculator that reads Arabic-Indic numerals on the price tag and rings up the wrong total

Date::Manip is a venerable Perl date-parsing library (versions through 6.99 affected). Its parse regexes use Perl's \d shorthand, which matches not just [0-9] but the entire Unicode \p{Nd} property — over 660 decimal-digit codepoints from scripts like Arabic-Indic, Devanagari, Thai, etc. When a date string contains these non-ASCII digits, the regex happily captures them, and Date::Manip::Base::check validates the fields with numeric comparisons. Perl's numification silently truncates at the first non-ASCII byte, so a year field like 202٤ (three ASCII digits followed by U+0664) becomes 202, yielding the year 0202. The result is silently corrupted date objects — no error, no exception, just wrong data.

The vendor scored this HIGH 7.5 with an Availability impact vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H). This overstates the real-world risk substantially. First, the CVSS vector claims unauthenticated network access, but Date::Manip is a *library* — it has no listening port. Exploitability depends entirely on whether the consuming application passes unsanitized Unicode date strings from network input into Date::Manip, which is a narrow subset of deployments. Second, the impact is data corruption (an integrity problem), not a crash or resource exhaustion that would constitute a true availability impact. Third, Date::Manip is a niche Perl library in a language whose enterprise footprint has been declining for over a decade. The vendor HIGH feels like a reflexive CVSS score that ignores how few real attack paths exist.

"Perl date lib mishandles Unicode digits — data corruption, not compromise"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Identify a Perl application using Date::Manip for user-supplied input

The attacker must find a web application, API, or service written in Perl that (a) uses Date::Manip for date parsing and (b) accepts date strings from external input without first stripping non-ASCII characters. This is a narrow precondition — most modern web stacks don't use Perl, and many that do sanitize input or use HTML date pickers that emit ASCII-only values.
Conditions required:
  • Target application written in Perl
  • Application uses Date::Manip (not DateTime, Time::Piece, or POSIX)
  • Application accepts free-text date input from users or API callers
Where this breaks in practice:
  • Perl web applications are a small and shrinking fraction of enterprise deployments
  • Many applications use date pickers or constrained input formats that never emit non-ASCII digits
  • Applications that do accept free-text dates often validate format upstream of the library
STEP 02

Craft a date string with non-ASCII Unicode decimal digits

The attacker constructs a date string containing Unicode decimal digits from non-ASCII scripts (e.g., U+0660–U+0669 Arabic-Indic, U+0966–U+096F Devanagari). The string must be structured so that Perl's \d regex matches it as a valid date pattern, and the leading ASCII prefix of each field numifies to an in-range value. For example, 202٤-0٧-3٠ would parse with year=202, month=0, day=3.
Conditions required:
  • Ability to submit arbitrary Unicode strings to the target application's date field
  • The application's transport layer (HTTP, API) must preserve the Unicode codepoints faithfully
Where this breaks in practice:
  • Many web frameworks normalize or reject non-ASCII input in numeric/date fields
  • WAFs with Unicode normalization rules may strip or reject these characters
  • Content-Type and charset handling may mangle the codepoints before they reach Perl
STEP 03

Date::Manip silently returns corrupted date object

Date::Manip's _parse_check stores the numified fields. The application receives a Date::Manip object representing a wildly incorrect date (e.g., year 0202 instead of 2024). Depending on how the application uses this date, outcomes range from incorrect display, wrong scheduling, invalid database records, to application errors if downstream code rejects impossible dates.
Conditions required:
  • Date::Manip version ≤ 6.99
Where this breaks in practice:
  • Applications with downstream date validation (e.g., 'year must be between 2000 and 2100') will catch the corruption
  • Database constraints (NOT NULL, CHECK constraints on date columns) may reject the bad data
  • The corruption is often visible in output, leading to quick bug reports rather than silent exploitation
Detection/coverage: No scanner or EDR signature exists for this. Detection would require application-layer logging of parsed vs. raw date values.
STEP 04

Attacker achieves application-level data corruption

If the corrupted date persists, the attacker has achieved data integrity corruption in the target application. This could cause incorrect report generation, wrong scheduling of tasks, or broken business logic that depends on date comparisons. This is NOT code execution, privilege escalation, or data exfiltration — it is a logic bug that produces wrong answers.
Conditions required:
  • No downstream date validation catches the corrupted value
  • The corrupted date is persisted or acted upon by the application
Where this breaks in practice:
  • The blast radius is limited to the single application instance processing the malformed input
  • No lateral movement, no privilege escalation, no persistence mechanism
  • An attacker who can submit arbitrary Unicode to a web app likely has simpler ways to cause disruption
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Not listed in CISA KEV. No reports of active exploitation in any threat intelligence feed.
Proof-of-conceptNo public PoC. The vulnerability is trivially reproducible by anyone who reads the advisory (just pass a Unicode digit to Date::Manip::Date->new), but no weaponized exploit exists because the impact ceiling is data corruption, not RCE.
EPSS score0.00387 — bottom ~15th percentile. FIRST's model correctly identifies this as very unlikely to be exploited.
KEV statusNot listed. No CISA KEV entry as of 2026-08-03.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — The AV:N is misleading for a library with no network listener. The A:H is debatable; the real impact is integrity corruption, not service unavailability.
Affected versionsDate::Manip all versions through 6.99 (latest release as of 2026-08-03). The bug has existed since the module first used \d in parse regexes.
Fixed versionNo fix available yet. Version 6.99 (released 2026-03-02) is the latest on CPAN. A fix would require changing \d to [0-9] in all parse regexes.
Exposure dataDate::Manip is a CPAN library, not a network service. No Shodan/Censys/GreyNoise footprint. CPAN reverse dependency count is modest — the module is popular in legacy Perl but rare in modern deployments.
Disclosure date2026-07-30 — disclosed 4 days ago.
ReporterNot publicly attributed in available advisories. Likely found via static analysis of Perl's Unicode handling semantics.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.0/10)

The single most decisive factor is that Date::Manip is a user-space library with no network listener — the CVSS AV:N is inherited from the consuming application, and the actual exploitable population is limited to the small subset of Perl web applications that pass unsanitized Unicode date strings to this specific library. The impact ceiling is application-level data corruption with no path to code execution, privilege escalation, or lateral movement.

HIGH Vulnerability mechanics and root cause
HIGH Absence of active exploitation
MEDIUM Installed base size estimate (Perl ecosystem declining but not measurable precisely)

Why this verdict

  • Library, not a service: Date::Manip has no network socket. The AV:N in the CVSS vector is aspirational — it assumes a consuming application blindly proxies Unicode input to the library. This alone invalidates the 7.5 base score.
  • Impact ceiling is data corruption: The worst outcome is wrong dates in application output or storage. There is no path from corrupted dates to shell access, credential theft, or privilege escalation. The vendor's A:H (Availability:High) is a stretch — this is really I:L (Integrity:Low).
  • Tiny exploitable population: Perl's share of enterprise web applications is small and shrinking. Within that set, only applications that (a) use Date::Manip specifically and (b) accept free-text Unicode date input from untrusted sources are vulnerable. This is a fraction of a fraction.
  • Role multiplier: Date::Manip is a date-parsing utility library. It does not run on domain controllers, hypervisors, identity providers, backup servers, or network edge devices in any role-defining capacity. Even where Perl scripts run on high-value infrastructure (e.g., monitoring scripts on a DC), the Date::Manip bug yields bad date output, not host compromise. Blast radius: application-local. No floor override applies.
  • No exploitation activity: Zero KEV listing, zero in-the-wild reports, EPSS at 0.00387, no public PoC that weaponizes the bug beyond trivial demonstration. The security community has correctly assessed this as uninteresting for attackers.

Why not higher?

The bug is real and the root cause is legitimate (Unicode equivalence bypass in input validation). If Date::Manip were used in a security-critical date comparison — say, certificate expiry validation or access token lifetime checks — corrupted dates could have higher impact. However, no such deployment pattern has been documented, and the library is overwhelmingly used for display formatting and scheduling, not security enforcement.

Why not lower?

The vulnerability does exist, is confirmed, and could cause silent data corruption in applications that hit the specific input conditions. An IGNORE verdict would be inappropriate because a Perl shop that does use Date::Manip for processing external input should still fix it — the corruption is silent and could cause subtle business logic errors that are hard to diagnose.

05 · Compensating Control

What to do — in priority order.

  1. Sanitize date input to ASCII before passing to Date::Manip — Add a one-liner like $input =~ s/[^\x00-\x7F]//g or validate with /^[0-9\-\/\s:]+$/ before calling any Date::Manip parse function. This eliminates the attack surface entirely and takes minutes to deploy. As a LOW-severity finding, there is no noisgate mitigation SLA — treat as backlog hygiene.
  2. Pin or patch Date::Manip locally — If your applications depend on Date::Manip, apply a local patch replacing \d with [0-9] in the parse regexes in Date::Manip::Base. This is a ~10-line change. Monitor CPAN for an upstream fix.
  3. Audit Perl applications for Date::Manip usage with external input — Run grep -r 'Date::Manip' /path/to/apps and identify which applications pass user-controlled strings to parse functions. Prioritize those for the input sanitization fix above.
What doesn't work
  • WAF rules for Unicode normalization — While some WAFs can normalize Unicode, most don't specifically target Unicode decimal digits in date fields, and the attack payload looks like legitimate multilingual input, not a traditional injection pattern.
  • Upgrading Date::Manip — As of 2026-08-03, version 6.99 is the latest release and it is still vulnerable. There is no fixed version to upgrade to yet.
06 · Verification

Crowdsourced verification payload.

Run this on any host where Perl and Date::Manip are installed. No special privileges required. Invoke with: bash check_datemanip_cve2026_60074.sh

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# CVE-2026-60074 — Date::Manip Unicode digit corruption check
# Run on any host with Perl installed. No privileges required.
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

set -euo pipefail

# Check if Date::Manip is installed
if ! perl -MDate::Manip -e '1' 2>/dev/null; then
  echo "UNKNOWN — Date::Manip is not installed on this host."
  exit 2
fi

# Get installed version
VERSION=$(perl -MDate::Manip -e 'print $Date::Manip::VERSION')
echo "Date::Manip version: $VERSION"

# Functional test: feed a Unicode digit and see if it corrupts
RESULT=$(perl -MDate::Manip::Date -e '
  use utf8;
  my $d = new Date::Manip::Date;
  # U+0664 is ARABIC-INDIC DIGIT FOUR
  my $err = $d->parse("2026-07-3\x{0664}");
  if ($err) {
    print "REJECTED";
  } else {
    my $day = $d->printf("%d");
    if ($day eq "34" || $day ne "34" && $day ne "3\x{0664}") {
      # Parsed but gave wrong day — vulnerable
      print "CORRUPTED:$day";
    } else {
      print "OK";
    }
  }
' 2>/dev/null || echo "ERROR")

case "$RESULT" in
  REJECTED)
    echo "PATCHED — Date::Manip $VERSION rejects non-ASCII decimal digits."
    exit 0
    ;;
  CORRUPTED*)
    echo "VULNERABLE — Date::Manip $VERSION silently accepted non-ASCII digit and produced corrupted date (day=$RESULT)."
    exit 1
    ;;
  OK)
    echo "PATCHED — Date::Manip $VERSION handled Unicode digit correctly."
    exit 0
    ;;
  ERROR)
    echo "UNKNOWN — Could not run the functional test. Check Perl and Date::Manip installation."
    exit 2
    ;;
  *)
    echo "UNKNOWN — Unexpected result: $RESULT"
    exit 2
    ;;
esac
07 · Bottom Line

If you remember one thing.

TL;DR
This is a LOW-severity library bug in a niche Perl module. If your enterprise doesn't run Perl applications, you can document and move on. If you do have Perl applications using Date::Manip, run grep -r 'Date::Manip' across your codebase to identify consumers, then check whether any of them parse user-supplied date strings. For those that do, add ASCII input validation as a one-liner fix. Per the noisgate remediation SLA for LOW findings, there is no mitigation SLA — treat this as backlog hygiene and apply the upstream fix when one ships. Do not let this compete for patching cycles against your actual CRITICAL and HIGH queue. There is no active exploitation and the EPSS confirms near-zero likelihood of weaponization.

Sources

  1. MITRE CWE-1289: Improper Validation of Unsafe Equivalence in Input
  2. Date::Manip on MetaCPAN (latest version 6.99)
  3. Date::Manip::DM6 documentation
  4. Date::Manip changelog
  5. oss-security mailing list
  6. CPAN Security Advisory Database
  7. Perl Toolchain Summit 2026 — Security Focus
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.