{"id":"CVE-2026-120635","kind":"vulnerability","aliases":["CVE-2026-120635"],"related":[],"title":"Perl CGI: multipart parser lets form fields slip past WAFs","description":"CGI versions before 5.00 for Perl allow form fields to be smuggled past proxies and WAFs via multipart parsing that differs from the RFCs.\n\nThe multipart/form-data parser matches the boundary anywhere rather than at the start of a line, uses the boundary without its leading -- for some client-supplied User-Agent values, finds the Content-Disposition name and filename inside the quoted values of other parameters, and corrupts parts when the boundary nears the 4096-byte read size.","summary":"The Perl CGI module before 5.00 parses multipart form data differently from the HTTP standards, so a crafted request can hide form fields from a proxy or web application firewall. An attacker can use this to get past filtering that checks request bodies, and the exact impact on a given app depends on what that filtering protects.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cgi","package","perl","waf","web-apps"],"not_affected_if":["no-multipart-forms","no-waf-or-proxy-filtering"],"how_to_check":"- Check the installed CGI module version with `perl -MCGI -e 'print $CGI::VERSION'`\n- Look for Perl CGI in application dependencies (cpanfile, Makefile.PL, or cpan list output)","fix":"- Perl CGI: move to `5.00` or later (per the advisory's stated range; the linked patch pages were not read)","status":"open","published_at":"2026-11-04T00:17:24+00:00","first_seen_at":"2026-11-04T00:46:16+00:00","triaged_at":"2026-11-04T00:48:22+00:00","updated_at":"2026-11-04T00:48:22+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-04T00:48:22Z","model":"claude-haiku-5-5","output":{"fix":"- Perl CGI: move to `5.00` or later (per the advisory's stated range; the linked patch pages were not read)","reach":"internet","title":"Perl CGI: multipart parser lets form fields slip past WAFs","impact":"medium","summary":"The Perl CGI module before 5.00 parses multipart form data differently from the HTTP standards, so a crafted request can hide form fields from a proxy or web application firewall. An attacker can use this to get past filtering that checks request bodies, and the exact impact on a given app depends on what that filtering protects.","audience":"developers","category":"package","nicknames":[],"who_cares":["perl","cgi","web-apps","waf"],"confidence":0.6,"fix_status":"available","needs_auth":"no","worst_case":"Form fields bypass WAF inspection and reach the application unfiltered","analyst_note":"Confirm the fixed version and whether the four linked patch pages on github.com name a specific release; sources only state 'before 5.00'.","how_to_check":"- Check the installed CGI module version with `perl -MCGI -e 'print $CGI::VERSION'`\n- Look for Perl CGI in application dependencies (cpanfile, Makefile.PL, or cpan list output)","plain_action":"","needs_analyst":true,"not_affected_if":["no-multipart-forms","no-waf-or-proxy-filtering"],"who_is_affected":"Applications written in Perl that use the CGI module to read multipart/form-data uploads or forms are exposed, especially those behind a WAF or proxy that relies on request inspection. Apps that do not parse multipart bodies with this module, or that have no inspection layer in front, can skip it. Whether a specific deployment is exploitable has not been confirmed from the sources.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000743,"input_tokens":4233,"output_tokens":640,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-120635':13A,16A '-2026':12A,15A '4096':158C '5.00':29B,84C 'agent':133C 'allow':87C 'anywher':111C 'app':23B,74B 'applic':52B 'attack':55B 'bodi':66B 'boundari':110C,122C,155C 'byte':159C 'cgi':2A,17B,26B,81C 'check':64B 'client':129C 'client-suppli':128C 'content':138C 'content-disposit':137C 'corrupt':151C 'craft':41B 'cve':11A,14A 'data':33B 'depend':75B 'differ':34B,101C 'disposit':139C 'exact':69B 'field':7A,46B,89C 'filenam':142C 'filter':62B,79B 'find':135C 'firewal':53B 'form':6A,32B,45B,88C 'get':60B 'given':73B 'hide':44B 'http':37B 'impact':70B 'insid':143C 'lead':125C 'let':5A 'line':119C 'match':108C 'modul':27B 'multipart':3A,31B,98C 'multipart/form-data':106C 'name':140C 'near':156C 'packag':18B 'paramet':149C 'pars':30B,99C 'parser':4A,107C 'part':152C 'past':9A,61B,93C 'perl':1A,19B,25B,86C 'protect':80B 'proxi':49B,94C 'quot':145C 'rather':112C 'read':160C 'request':42B,65B 'rfcs':104C 'size':161C 'slip':8A 'smuggl':92C 'standard':38B 'start':116C 'suppli':130C 'use':57B,120C 'user':132C 'user-ag':131C 'valu':134C,146C 'version':82C 'via':97C 'waf':10A,20B,96C 'web':22B,51B 'web-app':21B 'without':123C","nicknames":[],"mitigations":[],"who_affected":"Applications written in Perl that use the CGI module to read multipart/form-data uploads or forms are exposed, especially those behind a WAF or proxy that relies on request inspection. Apps that do not parse multipart bodies with this module, or that have no inspection layer in front, can skip it. Whether a specific deployment is exploitable has not been confirmed from the sources.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":[],"ptokens":[],"labels":["cgi","medium","package","perl","waf","webapps"],"campaign_type":null,"first_public_at":"2026-11-04T00:17:24+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-120635","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120635","severity":null,"published_at":"2026-11-04T00:17:24+00:00","modified_at":"2026-11-04T00:17:24+00:00","first_seen_at":"2026-11-04T00:46:16+00:00","fetched_at":"2026-11-04T00:46:16+00:00","note":null}],"documents":[{"id":62111,"url":"https://github.com/leejo/CGI.pm/commit/cbf04979f9974458ac223793bbd9d0b6a772aa66.patch","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":62112,"url":"https://github.com/leejo/CGI.pm/commit/e0ef8f4248c6ae3025749040d8595d206b6a1b49.patch","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":62113,"url":"https://github.com/leejo/CGI.pm/commit/f719fc08e8756708bcd4f1e357d5c0f8702f85dd.patch","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":62114,"url":"https://github.com/leejo/CGI.pm/commit/fe9516804d59a3774e280c15dbb7072fbd0ba5f1.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"}