CVE-2022-4993
Deferred Deferred - Pending Action

Locale::Maketext Template Injection in HTML::FormHandler

Vulnerability report for CVE-2022-4993, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-08-13

Last updated on: 2026-08-26

Assigner: CPANSec

Description

HTML::FormHandler versions through 0.40068 for Perl allow attacker selected method dispatch and resource exhaustion because _apply_actions and add_error use error message text built from request data as a Locale::Maketext bracket notation template. add_error hands its first argument to the language handle as the Locale::Maketext message key, and the default handle's lexicon sets `_AUTO`, so a string that is not a lexicon entry is compiled as a bracket notation template instead of being looked up. In a bracket group the first token names a method called on the language handle and the remaining tokens are its arguments. Three kinds of text the library did not author reach that position. _apply_actions installs a `$SIG{__WARN__}` handler that stores the warning text in `$error_message`, and a captured warning survives a successful action, so a field carrying a numeric transform turns `Argument "[sprintf,%50000000d,0]" isn't numeric` into the template; a warning quotes the submitted value verbatim, so the group is well formed and dispatches. `$error_message ||= $tobj->validate($new_value)` takes a type constraint's own failure message, which renders the rejected value through a partial dumper in bracket and comma form (Devel::PartialDump when Moose can load it, Type::Tiny's own dumper always), so a field with `apply => [ Str ]` given a parameter sent more than once, which arrives as an array, gets `Reference ["a","b"] did not pass type constraint "Str"` as its template, from a request that carries no bracket character of its own. A coercion or transform exception reaches it the same way. Beyond those, a validator whose message contains the field value puts that value in the template directly, and add_error replaces the message list with the contents of an arrayref first argument (`@message = @{$message[0]} if ref $message[0] eq 'ARRAY'`), so a value arriving as an array fills the argument slots from the same request as well. A malformed group such as `[0]` makes the compile croak, and HTML::FormHandler::I18N::maketext and add_error each re-raise that as a die, so process() throws. A well formed group naming sprintf reaches CORE::sprintf with an attacker chosen field width. Any caller that applies a type constraint or a transform to an untrusted field, or whose validator passes an untrusted field value to add_error, can be made to throw an unhandled exception out of process(), or to allocate an arbitrary amount of memory in one request, and an application whose language handle subclass defines side effecting public methods makes those callable with attacker chosen arguments. The dumped type constraint message is bounded to the exception, because both dumpers quote non-numeric elements so the method slot is never an attacker chosen name. The built-in messages pass fixed templates with the value in an argument slot, where it stays inert, and the built-in field types attach explicit message callbacks, so neither is affected.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-08-13
Last Modified
2026-08-26
Generated
2026-09-03
AI Q&A
2026-08-13
EPSS Evaluated
2026-09-01
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
gshank html_formhandler to 0.40069 (exc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-470 The product uses external input with reflection to select which classes or code to use, but it does not sufficiently prevent the input from selecting improper classes or code.
CWE-1336 The product uses a template engine to insert or process externally-influenced input, but it does not neutralize or incorrectly neutralizes special elements or syntax that can be interpreted as template expressions or other code directives when processed by the engine.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability in HTML::FormHandler (versions through 0.40068) for Perl allows attackers to inject malicious code via error messages. The issue occurs because error messages use user-supplied input as templates for Locale::Maketext, which interprets bracket notation as executable code. Attackers can craft inputs that trigger method dispatches or resource exhaustion, leading to crashes or memory allocation attacks.

Detection Guidance

This vulnerability is specific to Perl applications using HTML::FormHandler versions through 0.40068. Detection requires checking installed versions of HTML::FormHandler and reviewing custom error handling code for unsafe Locale::Maketext usage. No standard network commands detect this directly.

Impact Analysis

This vulnerability can allow attackers to crash your application by causing unhandled exceptions or consume excessive memory in a single request. If your application uses HTML::FormHandler with untrusted form inputs, attackers could exploit this to disrupt service or perform denial-of-service attacks.

Compliance Impact

This vulnerability does not directly affect compliance with GDPR or HIPAA as it involves a Perl module's error handling mechanism rather than data processing or storage. However, if exploited, it could lead to denial-of-service or arbitrary code execution, potentially disrupting systems handling sensitive data.

Mitigation Strategies

Upgrade HTML::FormHandler to version 0.40069 or later. Apply the official patch from Resource 5. Review custom error handling to ensure user input is not passed directly to Locale::Maketext without sanitization. Remove any code concatenating user data into error messages.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2022-4993. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart