{"api_version":"1","generated_at":"2026-09-16T09:04:11+00:00","cve":"CVE-2026-19872","urls":{"html":"https://cve.report/CVE-2026-19872","api":"https://cve.report/api/cve/CVE-2026-19872.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-19872","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-19872"},"summary":{"title":"HTML::FormHandler versions before 0.410000 for Perl allow cross-site scripting via a submitted value rendered unescaped in an error message","description":"HTML::FormHandler versions before 0.410000 for Perl allow cross-site scripting via a submitted value rendered unescaped in an error message.\n\nThe wrappers and renderers that emit a form's errors interpolate the error string straight into HTML with no escaping. Two of the library's own messages, no_match and not_allowed, splice the submitted value into that string, and a failing type constraint puts the rejected value into the message it builds, which _apply_actions hands to add_error.\n\nA field declared with a check regexp, a check list or a type constraint reaches those messages, with no custom validator and no non-default configuration. Errors rendered through an application's own escaping template layer rather than the library's rendering roles are not affected.\n\nA request over the network that submits markup to such a field gets it back live inside the error span, running script in the victim's origin. Re-rendering a rejected value later gives the stored variant.","state":"PUBLISHED","assigner":"CPANSec","published_at":"2026-09-08 20:17:29","updated_at":"2026-09-10 18:17:58"},"problem_types":["CWE-79","CWE-79 CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')"],"metrics":[{"version":"3.1","source":"ADP","type":"DECLARED","score":"6.1","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","data":{"attackComplexity":"LOW","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":6.1,"baseSeverity":"MEDIUM","confidentialityImpact":"LOW","integrityImpact":"LOW","privilegesRequired":"NONE","scope":"CHANGED","userInteraction":"REQUIRED","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","version":"3.1"}},{"version":"3.1","source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","type":"Secondary","score":"6.1","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","baseScore":6.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"NONE","userInteraction":"REQUIRED","scope":"CHANGED","confidentialityImpact":"LOW","integrityImpact":"LOW","availabilityImpact":"NONE"}}],"references":[{"url":"https://metacpan.org/release/ABRAXXA/HTML-FormHandler-0.410000/changes","name":"https://metacpan.org/release/ABRAXXA/HTML-FormHandler-0.410000/changes","refsource":"9b29abf9-4ab0-4765-b253-1875cd9b441e","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/gshank/html-formhandler/commit/2574fdb4561f5c32d44cfbfbb3188345d49eb5a2.patch","name":"https://github.com/gshank/html-formhandler/commit/2574fdb4561f5c32d44cfbfbb3188345d49eb5a2.patch","refsource":"9b29abf9-4ab0-4765-b253-1875cd9b441e","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"http://www.openwall.com/lists/oss-security/2026/09/08/15","name":"http://www.openwall.com/lists/oss-security/2026/09/08/15","refsource":"af854a3a-2127-422b-91ae-364da2661108","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-19872","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-19872","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[],"timeline":[],"solutions":[{"source":"CNA","title":"","value":"Upgrade to HTML-FormHandler 0.410000 or later.","time":"","lang":"en"}],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"19872","cve":"CVE-2026-19872","epss":"0.003270000","percentile":"0.256020000","score_date":"2026-09-13","updated_at":"2026-09-14 00:18:06"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"adp":[{"providerMetadata":{"dateUpdated":"2026-09-08T22:07:16.768Z","orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE"},"references":[{"url":"http://www.openwall.com/lists/oss-security/2026/09/08/15"}],"title":"CVE Program Container"},{"metrics":[{"cvssV3_1":{"attackComplexity":"LOW","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":6.1,"baseSeverity":"MEDIUM","confidentialityImpact":"LOW","integrityImpact":"LOW","privilegesRequired":"NONE","scope":"CHANGED","userInteraction":"REQUIRED","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","version":"3.1"}},{"other":{"content":{"id":"CVE-2026-19872","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","timestamp":"2026-09-10T17:51:07.811981Z","version":"2.0.3"},"type":"ssvc"}}],"providerMetadata":{"dateUpdated":"2026-09-10T17:51:23.851Z","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP"},"title":"CISA ADP Vulnrichment"}],"cna":{"affected":[{"collectionURL":"https://cpan.org/modules","defaultStatus":"unaffected","modules":["HTML::FormHandler"],"packageName":"HTML-FormHandler","packageURL":"pkg:cpan/HTML-FormHandler","programFiles":["lib/HTML/FormHandler/Validate.pm","lib/HTML/FormHandler/Render/Simple.pm","lib/HTML/FormHandler/Render/Table.pm","lib/HTML/FormHandler/Widget/Form/Simple.pm","lib/HTML/FormHandler/Widget/Theme/BootstrapFormMessages.pm","lib/HTML/FormHandler/Widget/Wrapper/Fieldset.pm","lib/HTML/FormHandler/Widget/Wrapper/Simple.pm","lib/HTML/FormHandler/Widget/Wrapper/SimpleInline.pm","lib/HTML/FormHandler/Widget/Wrapper/Table.pm","lib/HTML/FormHandler/Widget/Wrapper/TableInline.pm"],"programRoutines":[{"name":"HTML::FormHandler::Validate::_apply_actions"},{"name":"HTML::FormHandler::Render::Simple::render_form_errors"},{"name":"HTML::FormHandler::Render::Simple::wrap_field"},{"name":"HTML::FormHandler::Render::Table::render_form_errors"},{"name":"HTML::FormHandler::Render::Table::wrap_field"},{"name":"HTML::FormHandler::Widget::Form::Simple::render_form_messages"},{"name":"HTML::FormHandler::Widget::Theme::BootstrapFormMessages::render_form_messages"},{"name":"HTML::FormHandler::Widget::Wrapper::Fieldset::wrap_field"},{"name":"HTML::FormHandler::Widget::Wrapper::Simple::wrap_field"},{"name":"HTML::FormHandler::Widget::Wrapper::SimpleInline::wrap_field"},{"name":"HTML::FormHandler::Widget::Wrapper::Table::wrap_field"},{"name":"HTML::FormHandler::Widget::Wrapper::TableInline::wrap_field"}],"repo":"https://github.com/gshank/html-formhandler","versions":[{"lessThan":"0.410000","status":"affected","version":"0","versionType":"custom"}]}],"descriptions":[{"lang":"en","value":"HTML::FormHandler versions before 0.410000 for Perl allow cross-site scripting via a submitted value rendered unescaped in an error message.\n\nThe wrappers and renderers that emit a form's errors interpolate the error string straight into HTML with no escaping. Two of the library's own messages, no_match and not_allowed, splice the submitted value into that string, and a failing type constraint puts the rejected value into the message it builds, which _apply_actions hands to add_error.\n\nA field declared with a check regexp, a check list or a type constraint reaches those messages, with no custom validator and no non-default configuration. Errors rendered through an application's own escaping template layer rather than the library's rendering roles are not affected.\n\nA request over the network that submits markup to such a field gets it back live inside the error span, running script in the victim's origin. Re-rendering a rejected value later gives the stored variant."}],"problemTypes":[{"descriptions":[{"cweId":"CWE-79","description":"CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-09-08T20:08:21.896Z","orgId":"9b29abf9-4ab0-4765-b253-1875cd9b441e","shortName":"CPANSec"},"references":[{"tags":["patch"],"url":"https://github.com/gshank/html-formhandler/commit/2574fdb4561f5c32d44cfbfbb3188345d49eb5a2.patch"},{"tags":["release-notes"],"url":"https://metacpan.org/release/ABRAXXA/HTML-FormHandler-0.410000/changes"}],"solutions":[{"lang":"en","value":"Upgrade to HTML-FormHandler 0.410000 or later."}],"source":{"discovery":"UNKNOWN"},"title":"HTML::FormHandler versions before 0.410000 for Perl allow cross-site scripting via a submitted value rendered unescaped in an error message","x_generator":{"engine":"cpansec-cna-tool 0.1"}}},"cveMetadata":{"assignerOrgId":"9b29abf9-4ab0-4765-b253-1875cd9b441e","assignerShortName":"CPANSec","cveId":"CVE-2026-19872","datePublished":"2026-09-08T20:08:21.896Z","dateReserved":"2026-08-14T12:49:19.665Z","dateUpdated":"2026-09-10T17:51:23.851Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-09-08 20:17:29","lastModifiedDate":"2026-09-10 18:17:58","problem_types":["CWE-79","CWE-79 CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')"],"metrics":{"cvssMetricV31":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","baseScore":6.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"NONE","userInteraction":"REQUIRED","scope":"CHANGED","confidentialityImpact":"LOW","integrityImpact":"LOW","availabilityImpact":"NONE"},"exploitabilityScore":2.8,"impactScore":2.7}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"timestamp":"2026-09-10T17:51:07.811981Z","id":"CVE-2026-19872","options":[{"exploitation":"none"},{"automatable":"no"},{"technicalImpact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"19872","Ordinal":"1","Title":"HTML::FormHandler versions before 0.410000 for Perl allow cross-","CVE":"CVE-2026-19872","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"19872","Ordinal":"1","NoteData":"HTML::FormHandler versions before 0.410000 for Perl allow cross-site scripting via a submitted value rendered unescaped in an error message.\n\nThe wrappers and renderers that emit a form's errors interpolate the error string straight into HTML with no escaping. Two of the library's own messages, no_match and not_allowed, splice the submitted value into that string, and a failing type constraint puts the rejected value into the message it builds, which _apply_actions hands to add_error.\n\nA field declared with a check regexp, a check list or a type constraint reaches those messages, with no custom validator and no non-default configuration. Errors rendered through an application's own escaping template layer rather than the library's rendering roles are not affected.\n\nA request over the network that submits markup to such a field gets it back live inside the error span, running script in the victim's origin. Re-rendering a rejected value later gives the stored variant.","Type":"Description","Title":"HTML::FormHandler versions before 0.410000 for Perl allow cross-"}]}}}