---
title: "CVE-2022-4993\n    | Ubuntu"
description: Ubuntu is an open source software operating system that runs from the
  desktop, to the cloud, to all your internet connected things.
url: https://ubuntu.com/security/CVE-2022-4993?format=md
keywords: index, follow
---

# CVE-2022-4993

Publication date 13 August 2026

Last updated 19 August 2026

---

Ubuntu priority

**Medium**

[Why this priority?](https://ubuntu.com/security/cves/about#priority )

## Cvss 3 Severity Score

**9.1 · Critical**

[Score breakdown](https://ubuntu.com/security/CVE-2022-4993?format=md#impact-score)

Toggle side navigation

## 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.

## Status

Show unmaintained releases

| Package | Ubuntu Release | Status |
| --- | --- | --- |
| libhtml-formhandler-perl | 26.04 LTS resolute | Needs evaluation |
| 24.04 LTS noble | Needs evaluation |
| 22.04 LTS jammy | Needs evaluation |
| 20.04 LTS focal | Needs evaluation |
| 18.04 LTS bionic | Needs evaluation |
| 16.04 LTS xenial | Needs evaluation |

---

* [How can I get the fixes?](https://ubuntu.com/security/cves/about#security)
* [What do statuses mean?](https://ubuntu.com/security/cves/about#statuses)

## Severity score breakdown

CVSS version:
CVSS v3.0

**Base score**

9.1 · Critical

* Base metrics

  | Parameter | Value |
  | --- | --- |
  | Attack vector | Network |
  | Attack complexity | Low |
  | Privileges required | None |
  | User interaction | None |
  | Scope | Unchanged |
  | Confidentiality impact | High |
  | Integrity impact | High |
  | Availability impact | None |
* Scores

  | Parameter | Value |
  | --- | --- |
  | Base score | 9.1 · Critical |
  | Exploitability score | - |
  | Impact score | - |

**Vector:** CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

## References

* [MITRE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-4993)
* [NVD](https://nvd.nist.gov/vuln/detail/CVE-2022-4993)
* [Launchpad](https://launchpad.net/bugs/cve/CVE-2022-4993)
* [Debian](https://security-tracker.debian.org/tracker/CVE-2022-4993)

### Other references

* <https://www.cve.org/CVERecord?id=CVE-2022-4993>
* <https://lists.security.metacpan.org/cve-announce/msg/42659947/>
* <https://security.metacpan.org/patches/H/HTML-FormHandler/0.40068/CVE-2022-4993-r2.patch>
