{"id":"CVE-2026-120640","kind":"vulnerability","aliases":["CVE-2026-120640"],"related":[],"title":"Perl CGI: request body parameters can be spoofed from query string","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.\n\nCGI 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.\n\nA 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.","summary":"CGI.pm before 5.00 for Perl accepts POSTDATA, PUTDATA, PATCHDATA and XForms:Model as ordinary query or form fields, not only as real request bodies. An attacker can set these values from a cross-site HTML form, so an application reading them cannot tell client-sent data from the true body.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cgi","package","perl","web-apps"],"not_affected_if":["cgi-not-used","no-postdata-usage"],"how_to_check":"- Check the installed CGI module version with `perl -MCGI -e 'print $CGI::VERSION'`\n- Look for code that calls `param('POSTDATA')`, `param('PUTDATA')`, `param('PATCHDATA')` or `param('XForms:Model')` and trusts the result","fix":"- CGI for Perl: `5.00` or later (per the advisory's stated range)","status":"open","published_at":"2026-11-04T00:17:25+00:00","first_seen_at":"2026-11-04T00:46:17+00:00","triaged_at":"2026-11-04T00:48:16+00:00","updated_at":"2026-11-04T00:48:16+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-04T00:48:16Z","model":"claude-haiku-5-5","output":{"fix":"- CGI for Perl: `5.00` or later (per the advisory's stated range)","reach":"internet","title":"Perl CGI: request body parameters can be spoofed from query string","impact":"medium","summary":"CGI.pm before 5.00 for Perl accepts POSTDATA, PUTDATA, PATCHDATA and XForms:Model as ordinary query or form fields, not only as real request bodies. An attacker can set these values from a cross-site HTML form, so an application reading them cannot tell client-sent data from the true body.","audience":"developers","category":"package","nicknames":[],"who_cares":["perl","cgi","web-apps"],"confidence":0.6,"fix_status":"available","needs_auth":"no","worst_case":"forged requests can inject attacker-chosen JSON into application logic","analyst_note":"","how_to_check":"- Check the installed CGI module version with `perl -MCGI -e 'print $CGI::VERSION'`\n- Look for code that calls `param('POSTDATA')`, `param('PUTDATA')`, `param('PATCHDATA')` or `param('XForms:Model')` and trusts the result","plain_action":"","needs_analyst":false,"not_affected_if":["no-postdata-usage","cgi-not-used"],"who_is_affected":"Applications that run the Perl CGI module and read JSON or XForms bodies through the POSTDATA, PUTDATA, PATCHDATA or XForms:Model parameters are exposed to forged cross-site requests. Applications that only read form fields or do not use these parameter names are not affected by the spoofing path described.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"medium"},"cost_usd":0.000719,"input_tokens":4259,"output_tokens":587,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-120640':14A,17A '-2026':13A,16A '5.00':26B,79C 'accept':29B,123C 'admin':160C 'allow':82C 'also':122C 'app':23B 'applic':63B,139C 'attack':49B 'bodi':4A,47B,75B,108C,117C,150C 'cannot':66B,140C 'cgi':2A,18B,76C,101C 'cgi.pm':24B 'client':69B,144C 'client-sent':68B,143C 'cor':177C 'cross':57B,153C 'cross-sit':56B,152C 'cve':12A,15A 'data':71B 'endpoint':164C 'field':41B,100C,132C 'forgeri':173C 'form':40B,60B,99C,106C,131C,156C 'html':59B,155C 'json':167C 'model':35B,89C,120C 'multipart':135C 'name':125C 'need':175C 'non':105C 'non-form':104C 'ordinari':37B 'packag':19B 'param':169C 'paramet':5A,90C 'part':136C 'patchdata':32B,86C,113C 'perl':1A,20B,28B,81C 'post':158C 'postdata':30B,84C,110C,159C,170C 'preflight':178C 'putdata':31B,85C,111C 'queri':10A,38B,96C,128C 'read':64B,166C 'real':45B,149C 'request':3A,46B,107C,172C 'sent':70B,145C 'set':51B,93C 'site':58B,154C 'spoof':8A 'store':102C 'string':11A,97C,129C 'tell':67B,141C 'true':74B,161C 'valu':53B,146C 'version':77C 'web':22B 'web-app':21B 'xform':34B,88C,116C,119C","nicknames":[],"mitigations":[],"who_affected":"Applications that run the Perl CGI module and read JSON or XForms bodies through the POSTDATA, PUTDATA, PATCHDATA or XForms:Model parameters are exposed to forged cross-site requests. Applications that only read form fields or do not use these parameter names are not affected by the spoofing path described.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["cgi","medium","package","perl","webapps"],"campaign_type":null,"first_public_at":"2026-11-04T00:17:25+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-120640","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120640","severity":null,"published_at":"2026-11-04T00:17:25+00:00","modified_at":"2026-11-04T00:17:25+00:00","first_seen_at":"2026-11-04T00:46:17+00:00","fetched_at":"2026-11-04T00:46:17+00:00","note":null}],"documents":[{"id":62120,"url":"https://github.com/leejo/CGI.pm/commit/bc4022f553301014e522133ba1e1f4e49e3bef08.patch","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"}],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}