CVE-2026-120640: CGI versions before 5.00 for Perl allow the POSTDATA, PUTDATA, PATCHDATA and XForms:Model parameters to be set from the query string or form fields Stig Palmquist 03 Nov 2026 23:52 UTC

========================================================================
CVE-2026-120640                                      CPAN Security Group
========================================================================

        CVE ID:  CVE-2026-120640

  Distribution:  CGI
      Versions:  before 5.00
      MetaCPAN:  https://metacpan.org/dist/CGI
      VCS Repo:  https://github.com/leejo/CGI.pm

CGI versions before 5.00 for Perl allow the POSTDATA, PUTDATA,
PATCHDATA and XForms:Model parameters to be set from the query string
or form fields

Description
-----------
CGI versions before 5.00 for Perl allow the POSTDATA, PUTDATA,
PATCHDATA and XForms:Model parameters to be set from the query string
or form fields.

CGI stores a non-form request body under POSTDATA, PUTDATA or
PATCHDATA, and an XForms body under XForms:Model, but also accepts
these names from the query string, a form field or a multipart part, so
an application cannot tell a client-sent value from the real body.

A cross-site HTML form can post POSTDATA={"admin":true} to an endpoint
that reads JSON from param('POSTDATA'), a request forgery that needs no
CORS preflight.

Problem types
-------------
- CWE-352 Cross-Site Request Forgery (CSRF)

Workarounds
-----------
For deployments that cannot upgrade, check the request Content-Type
before trusting param('POSTDATA').

Solutions
---------
Upgrade to CGI 5.00 or later.

References
----------
https://metacpan.org/release/LEEJO/CGI-4.72/source/lib/CGI.pm
https://metacpan.org/release/LEEJO/CGI-5.00/changes
https://github.com/leejo/CGI.pm/commit/bc4022f553301014e522133ba1e1f4e49e3bef08.patch