CVE-2022-23598: Laminas/laminas form Cross-Site Scripting Vulnerability

MODERATE
Advisory Identifier: GHSA-jq4p-mq33-w375
CVSS 6.1
CWE-79
Published
Advisory Summary

CVE-2022-23598 is a MODERATE (CVSS 6.1) cross-site scripting vulnerability (CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')) affecting Laminas/laminas form libraries in the Packagist ecosystem. The issue involves cross-site scripting when rendering error messages in laminas-form. Remediation is available by upgrading affected packages to version 3.1.1, 3.0.2, 2.17.1.

CVE-2022-23598 at a Glance

CVE Identifier CVE-2022-23598
GHSA Identifier GHSA-jq4p-mq33-w375
Severity MODERATE
CVSS v3.1 Base Score 6.1
CWE Classification CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Affected Product Laminas/laminas form
Package Ecosystem Packagist
Published Date
Last Updated

Security Impact

CVSS: 6.1

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction Required (UI:R)
Scope Changed (S:C)
Confidentiality Low (C:L)
Integrity Low (I:L)
Availability None (A:N)

How to Fix CVE-2022-23598

To remediate this vulnerability, upgrade all affected Laminas/laminas form dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

laminas/laminas-form fixed: 3.1.1
Upgrade laminas/laminas-form to 3.1.1
laminas/laminas-form fixed: 3.0.2
Upgrade laminas/laminas-form to 3.0.2
laminas/laminas-form fixed: 2.17.1
Upgrade laminas/laminas-form to 2.17.1
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for laminas/laminas-form

How to Check if You Are Affected

To determine whether your application is affected by CVE-2022-23598, inspect your project dependencies for Laminas/laminas form:

inspect dependencies for laminas/laminas-form

Analyze the terminal output to locate any version of Laminas/laminas form in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 3.1.1), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting'), where the product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users. In Laminas/laminas form, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### Impact When rendering validation error messages via the `formElementErrors()` view helper shipped with laminas-form, many messages will contain the submitted value. However, in vulnerable versions of laminas-form, the value was not being escaped for HTML contexts, which can potentially lead to a Reflected Cross-Site Scripting (XSS) attack. ### Patches The following versions were issued to mitigate the vulnerability: - 2.17.1 - 3.0.2 - 3.1.1 ### Workarounds At the top of a view script where you call the `formElementErrors()` view helper, place the following code: ```php use Laminas\Form\ElementInterface; use Laminas\View\PhpRenderer; $escapeMessages = function (ElementInterface $formOrElement, PhpRenderer $renderer): void { $messages = $element->getMessages(); if (! $messages) { return; } $escaped = []; array_walk_recursive( $messages, static function (string $item) use (&$escaped, $renderer): void { $escaped[] = $renderer->escapeHtml($item); } }; $element->setMessages($escaped); }; ``` Before calling `formElementErrors()` with a form, fieldset, or element, call the above closure as follows ```php // Usage with a form // $this is the view renderer $escapeMessages($form, $this); // Usage with a fieldset // $this is the view renderer $escapeMessages($fieldset, $this); // Usage with a form element // $this is the view renderer $escapeMessages($element, $this); ``` ### For more information If you have any questions or comments about this advisory: * [Open an issue](https://github.com/laminas/laminas-form/issues/new) * Email us at [security@getlaminas.org](mailto:security@getlaminas.org)

CVE-2022-23598 Affected Laminas/laminas form Versions

3 component(s)
Fixed Versions:
3.1.13.0.22.17.1
Product / Package Ecosystem Affected Versions Fixed Version
laminas/laminas-form
Packagist
≥ 3.1.0
< 3.1.1
3.1.1
laminas/laminas-form
Packagist
≥ 3.0.0
< 3.0.2
3.0.2
laminas/laminas-form
Packagist
< 2.17.1
2.17.1

References

Frequently Asked Questions

What is CVE-2022-23598?
CVE-2022-23598 is a security vulnerability in Laminas/laminas form involving Cross-site Scripting when rendering error messages in laminas-form under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting').
Which Laminas/laminas form versions are affected?
Affected versions include releases prior to 3.1.1, 3.0.2, 2.17.1 across affected packages: laminas/laminas-form.
What version fixes CVE-2022-23598?
Upgrading to 3.1.1, 3.0.2, 2.17.1 (or the latest patched release for your respective branch) resolves the vulnerability.
Is laminas/laminas-form affected?
Yes, laminas/laminas-form is affected in releases prior to 3.1.1, 3.0.2, 2.17.1. Upgrade your dependency to 3.1.1, 3.0.2, 2.17.1 or later.
What is the CVSS score of CVE-2022-23598?
CVE-2022-23598 has a CVSS v3.1 base score of 6.1 (MODERATE) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N.
What CWE is associated with CVE-2022-23598?
CVE-2022-23598 is classified under CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') (The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.).
How can I check Packagist dependencies for CVE-2022-23598?
Run the dependency tree command: 'inspect dependencies for laminas/laminas-form'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-jq4p-mq33-w375",
  "modified" : "2022-02-07T21:16:31Z",
  "published" : "2022-01-28T23:08:29Z",
  "aliases" : [ "CVE-2022-23598" ],
  "summary" : "Cross-site Scripting when rendering error messages in laminas-form",
  "details" : "### Impact\n\nWhen rendering validation error messages via the `formElementErrors()` view helper shipped with laminas-form, many messages will contain the submitted value. However, in vulnerable versions of laminas-form, the value was not being escaped for HTML contexts, which can potentially lead to a Reflected Cross-Site Scripting (XSS) attack.\n\n### Patches\n\nThe following versions were issued to mitigate the vulnerability:\n\n- 2.17.1\n- 3.0.2\n- 3.1.1\n\n### Workarounds\n\nAt the top of a view script where you call the `formElementErrors()` view helper, place the following code:\n\n```php\nuse Laminas\\Form\\ElementInterface;\nuse Laminas\\View\\PhpRenderer;\n\n$escapeMessages = function (ElementInterface $formOrElement, PhpRenderer $renderer): void {\n    $messages = $element->getMessages();\n    if (! $messages) {\n        return;\n    }\n\n    $escaped  = [];\n    array_walk_recursive(\n        $messages,\n        static function (string $item) use (&$escaped, $renderer): void {\n            $escaped[] = $renderer->escapeHtml($item);\n        }\n    };\n\n    $element->setMessages($escaped);\n};\n```\n\nBefore calling `formElementErrors()` with a form, fieldset, or element, call the above closure as follows\n\n```php\n// Usage with a form\n// $this is the view renderer\n$escapeMessages($form, $this);\n\n// Usage with a fieldset\n// $this is the view renderer\n$escapeMessages($fieldset, $this);\n\n// Usage with a form element\n// $this is the view renderer\n$escapeMessages($element, $this);\n```\n\n### For more information\n\nIf you have any questions or comments about this advisory:\n\n* [Open an issue](https://github.com/laminas/laminas-form/issues/new)\n* Email us at [security@getlaminas.org](mailto:security@getlaminas.org)",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "laminas/laminas-form"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "3.1.0"
      }, {
        "fixed" : "3.1.1"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "laminas/laminas-form"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "3.0.0"
      }, {
        "fixed" : "3.0.2"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "Packagist",
      "name" : "laminas/laminas-form"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "2.17.1"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/laminas/laminas-form/security/advisories/GHSA-jq4p-mq33-w375"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2022-23598"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/laminas/laminas-form/commit/43005a3ec4c2292d4f825273768d9b884acbca37"
  }, {
    "type" : "WEB",
    "url" : "https://getlaminas.org/security/advisory/LP-2022-01"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/laminas/laminas-form"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/laminas/laminas-form/releases/tag/2.17.1"
  }, {
    "type" : "WEB",
    "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/CFF6WJ5I7PSEBRF6I753WKE2BXFBGQXE"
  }, {
    "type" : "WEB",
    "url" : "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/SLNABVK26CE4PFL57VLY242FW3QY4CPC"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-79" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2022-01-28T18:49:08Z",
    "nvd_published_at" : "2022-01-28T22:15:00Z"
  }
}