CVE-2024-23083
Executive Summary
CVE-2024-23083 is a disputed NullPointerException (NPE) vulnerability reported in Time4J Base v5.9.3, a Java date/time calculation library. The flaw is triggered through the net.time4j.format.internal.FormatUtils::useDefaultWeekmodel(Locale) component during locale-specific week model initialization. Multiple third parties dispute the finding, suggesting the submission may have originated from a tool insufficiently robust for vulnerability identification. The reported CVSS score is 5.3 (Medium), though exploitation requires a non-standard locale configuration and successful reproduction remains unverified. Enterprises using Time4J for calendar, chronology, or formatting operations should monitor this finding but prioritize validated patches from the vendor.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability is reported to manifest as a NullPointerException in the useDefaultWeekmodel(Locale) method of the net.time4j.format.internal.FormatUtils class. This method is responsible for resolving the default week model (defining week numbering rules such as first day-of-week and minimal days in first week) based on the provided Locale object.
Mechanism: The NPE likely occurs when the method receives a locale for which the underlying java.util.Calendar or internal locale-data provider returns a null reference during week-model property lookup. In Java's globalization framework, locales with incomplete CLDR (Common Locale Data Repository) data can trigger null returns when querying week-related attributes such as Calendar.MIN_DAYS_IN_FIRST_WEEK or Calendar.DAY_OF_WEEK. Time4J's default week model resolution may not adequately null-check these values before dereferencing.
Attack Surface: The attack surface is local — a client-side deserialization or application logic path that passes attacker-controllable locale data to Time4J formatting or parsing APIs. Example entry points:
- REST endpoints that accept
Localeparameters (e.g.,Accept-Languageheaders, locale query strings) - Batch jobs processing locale-specific date inputs
- Applications that serialize/deserialize locale metadata from untrusted sources
Code-Level Explanation (reconstructed):
// net.time4j.format.internal.FormatUtils
public static Weekmodel useDefaultWeekmodel(Locale locale) {
Calendar calendar = Calendar.getInstance(locale);
int firstDay = calendar.getFirstDayOfWeek(); // may throw NPE if calendar is null
int minDays = calendar.getMinimalDaysInFirstWeek(); // unreachable if above fails
return Weekmodel.of(firstDay, minDays);
}
If Calendar.getInstance(locale) returns null for a malformed or unsupported locale, the subsequent method calls dereference a null object, throwing NullPointerException. This aligns with the reported component path.
Dispute Context: The submission lacks a reproducible proof-of-concept, and the NPE may stem from a caller passing a null locale directly rather than an inherent library defect. Java's own Calendar.getInstance(Locale) does not accept null and would throw NullPointerException as well — a behavior consistent with standard Java semantics rather than a Time4J-specific vulnerability.
Exploitation Scenarios
Despite the disputed nature, if an attacker can trigger the NPE in a vulnerable context, the following attack chain applies:
Reconnaissance/Identification: The attacker identifies a Java application using Time4J 5.9.3. They probe endpoint behavior by sending requests with locale variations such as
?locale=xx_YYor manipulatingAccept-Languageheaders to include exotic locale tags (e.g.,de_DE_#Latnorsr_Latn_RS).Trigger/Weaponization: The attacker sends a request with a carefully crafted locale that triggers the null-dereference path. Example payloads:
GET /api/format?locale=zz_ZZ&date=2024-12-31(unknown locale)GET /api/parse?locale=@proleptic(malformed locale tag)- HTTP header:
Accept-Language: en_US;q=0.8, xx_YY;q=0.1
Execution/Payload: The application passes the attacker-controlled locale to a Time4J formatting call such as
ChronoFormatter.ofPattern("MM/dd/yyyy", Locale.fromString(localeParam)).format(date). TheuseDefaultWeekmodelmethod throws an uncaughtNullPointerException.Post-Exploitation Impact: Exploitation results in:
- Denial of Service (DoS): Repeated requests targeting the vulnerable endpoint can exhaust worker threads, degrade application performance, or crash the JVM if the exception propagates to an unhealthy state.
- Information Disclosure (potential): In debug-enabled environments, the stack trace may leak internal class names and file paths useful for further targeted attacks.
- Data Integrity (low): If the NPE occurs during a transactional date-processing pipeline, partial writes may occur if exception handling is insufficient.
Note: There is no evidence of remote code execution, privilege escalation, or data exfiltration via this vulnerability.
Impact Assessment
CVSS Score: 5.3 (Medium). With an unknown vector, the practical severity depends on exposure. The CIA triad impact per the score's typical allocation suggests:
- Confidentiality: Low (stack traces may leak minimal system details)
- Integrity: Low (no data corruption expected)
- Availability: Medium (Denial of Service via exception-triggering locales)
Business Impact:
- Affected Systems: Java applications using Time4J 5.9.3 (or earlier versions without the claimed fix) for date/time formatting, parsing, or calendar arithmetic with user-supplied locale inputs.
- Blast Radius: Restricted to applications that accept external locale parameters. Backend services with hardcoded locales are not exposed.
- Financial Loss: Low — DoS attacks may require sustained request volume, and the disputed nature minimizes urgency.
CWE: Unknown — the closest classification would be CWE-476 (NULL Pointer Dereference), but this has not been formally assigned.
Detection Guidance
Sigma Rule
title: Time4J NullPointerException from useDefaultWeekmodel
id: 3c7b5f9a-1e4a-4f6c-9b2e-8d0a1f3c5e7d
status: experimental
description: Detects Java application logs containing NullPointerException referencing Time4J FormatUtils useDefaultWeekmodel
logsource:
category: application
product: java
detection:
selection:
message|contains:
- 'NullPointerException'
- 'net.time4j.format.internal.FormatUtils'
- 'useDefaultWeekmodel'
condition: selection
level: medium
fields:
- src_ip
- user_agent
- request_path
- message
falsepositives:
- Legitimate null locale passed by developer
- Other NPEs in the same class
tags:
- attack.t1499
- cve.2024.23083
YARA Rule
rule CVE_2024_23083_Time4J_NPE
{
meta:
author = "ValterSIT Threat Intel"
date = "2024-02-12"
description = "Detects Time4J NullPointerException strings in logs or crash dumps"
cve = "CVE-2024-23083"
severity = "medium"
strings:
$s1 = "net.time4j.format.internal.FormatUtils" ascii wide
$s2 = "useDefaultWeekmodel" ascii wide
$s3 = "NullPointerException" ascii wide
$s4 = "Weekmodel.of" ascii wide
condition:
(uint16(0) == 0x5A4D or uint16(0) == 0x4D5A) and 2 of them and $s1 and $s2
or (filesize < 10MB and $s1 and $s2 and $s3)
}
Suricata IDS Rule
alert http any any -> $HOME_NET any (msg:"CVE-2024-23083 Time4J useDefaultWeekmodel locale attempt"; flow:established,to_server; content:"locale="; nocase; pcre:"/locale=[^\&\"'\s]{2,}/"; content:"format"; nocase; pcre:"/\b(?:format|parse|display)\b/i"; classtype:attempted-dos; sid:2024230830; rev:1; reference:cve,2024-23083;)
Elastic Detection
sequence by process.name
[any where process.name == "java" and
stringContains(message, "NullPointerException") and
stringContains(message, "net.time4j.format.internal.FormatUtils") and
stringContains(message, "useDefaultWeekmodel")] with maxspan=5m
Splunk SPL Query
index=java sourcetype=java_stacktrace
"NullPointerException" "net.time4j.format.internal.FormatUtils" "useDefaultWeekmodel"
| table _time host src_ip user_agent request_path
| stats count by host src_ip user_agent request_path
| where count > 5
Wazuh OSSEC Rule
<group name="time4j_npe,">
<rule id="123456" level="10">
<decoded>java</decoded>
<match>NullPointerException</match>
<match>net.time4j.format.internal.FormatUtils</match>
<match>useDefaultWeekmodel</match>
<description>Time4J CVE-2024-23083 null pointer in useDefaultWeekmodel</description>
<group>attack.dos,</group>
<mitre>
<id>T1499</id>
</mitre>
<options>no_full_log</options>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 2/4 (CLAIMED — single source claims patch (not independently confirmed)).
Immediate Mitigations (if unpatched):
- Validate all locale inputs server-side. Reject locale strings not matching
^[a-zA-Z]{2}(-[a-zA-Z]{2})?$or using a strict allowlist. - Wrap Time4J formatting calls in try-catch blocks that handle
NullPointerExceptiongracefully, returning HTTP 400 responses. - Set unit tests to run Time4J operations with locales like
zz_ZZto verify application resilience.
- Validate all locale inputs server-side. Reject locale strings not matching
Patch/Upgrade Steps:
- Contact the Time4J project maintainers for the claimed patch status. Check the Maven Central repository for version 5.9.4+:
# Java/Maven mvn versions:use-latest-versions -Dincludes=net.time4j:time4j-base # Java/Gradle implementation 'net.time4j:time4j-base:5.9.4' - Verify the fix by running a regression test that previously triggered the NPE (if reproducible).
- If no patched version exists, consider pinning to the latest stable release and monitoring the official GitHub repository for updates.
- Contact the Time4J project maintainers for the claimed patch status. Check the Maven Central repository for version 5.9.4+:
Long-Term Hardening:
- Switch to Java's built-in
java.timepackage (JSR-310) if feasible — it is maintained by Oracle and has mature null-checking. - Implement global exception handlers that sanitize stack traces before logging (avoid leaking internal class paths).
- Add security tests that fuzz locale inputs to your date-formatting endpoints.
- Subscribe to CVE feeds and vendor advisories for Time4J to stay informed of patch releases.
- Switch to Java's built-in
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2024-23083
- Time4J Project (GitHub): https://github.com/MenoData/Time4J
- Time4J on Maven Central: https://central.sonatype.com/artifact/net.time4j/time4j-base
- MITRE CVE Record: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-23083
- CISA KEV Note: CVE-2024-23083 is NOT listed in CISA's Known Exploited Vulnerabilities catalog. No threat actor campaigns or exploit-in-the-wild evidence has been reported as of this writing.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.