{"id":"CVE-2026-120651","kind":"vulnerability","aliases":["CVE-2026-120651"],"related":[],"title":"Perl CGI module: short request body hangs server process indefinitely","description":"CGI versions before 5.00 for Perl allow an infinite loop on a short request body when $DISABLE_UPLOADS is set.\n\nWhen $CGI::PUTDATA_UPLOAD or an upload hook is set, read_postdata_putdata takes a request body that is not a form submission. With $CGI::DISABLE_UPLOADS set, it discards the body by reading until Content-Length bytes have arrived. Once a body shorter than its Content-Length runs out, every read returns 0, so the loop never ends.\n\nA client can keep a server process spinning with one such request.","summary":"The Perl CGI module before 5.00 enters an infinite loop when a request's body is shorter than its declared Content-Length and the uploads-disabled setting is on. A single crafted request can keep a server process busy forever, which is a denial of service.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["cgi","package","perl","self-hosted"],"not_affected_if":["cgi-module-5.00-or-later","default-config"],"how_to_check":"- Check the installed CGI module version with `perl -MCGI -e 'print $CGI::VERSION'`\n- Search application code and config for `DISABLE_UPLOADS` and `PUTDATA_UPLOAD`\n- Check whether the app is a Perl CGI script that reads request bodies through this module","fix":"- Upgrade the Perl CGI module to `5.00` or later","status":"open","published_at":"2026-11-04T00:17:26+00:00","first_seen_at":"2026-11-04T00:46:17+00:00","triaged_at":"2026-11-04T00:48:05+00:00","updated_at":"2026-11-04T00:48:05+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-11-04T00:48:05Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade the Perl CGI module to `5.00` or later","reach":"internet","title":"Perl CGI module: short request body hangs server process indefinitely","impact":"low","summary":"The Perl CGI module before 5.00 enters an infinite loop when a request's body is shorter than its declared Content-Length and the uploads-disabled setting is on. A single crafted request can keep a server process busy forever, which is a denial of service.","audience":"businesses","category":"package","nicknames":[],"who_cares":["perl","cgi","self-hosted"],"confidence":0.6,"fix_status":"available","needs_auth":"no","worst_case":"A remote client can pin a server process in an endless loop","analyst_note":"","how_to_check":"- Check the installed CGI module version with `perl -MCGI -e 'print $CGI::VERSION'`\n- Search application code and config for `DISABLE_UPLOADS` and `PUTDATA_UPLOAD`\n- Check whether the app is a Perl CGI script that reads request bodies through this module","plain_action":"","needs_analyst":false,"not_affected_if":["default-config","cgi-module-5.00-or-later"],"who_is_affected":"Only servers running Perl CGI scripts that use the CGI module older than 5.00 and have $CGI::DISABLE_UPLOADS set are exposed. The flaw needs a PUTDATA_UPLOAD or upload hook setting to reach the vulnerable path, so default-configured apps that do not use these options can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000704,"input_tokens":4235,"output_tokens":561,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-120651':13A,16A '-2026':12A,15A '0':146C '5.00':28B,74C 'allow':77C 'arriv':131C 'bodi':6A,37B,85C,107C,122C,134C 'busi':63B 'byte':129C 'cgi':2A,17B,25B,71C,92C,115C 'client':153C 'content':44B,127C,139C 'content-length':43B,126C,138C 'craft':56B 'cve':11A,14A 'declar':42B 'denial':68B 'disabl':50B,87C,116C 'discard':120C 'end':151C 'enter':29B 'everi':143C 'forev':64B 'form':112C 'hang':7A 'hook':98C 'host':22B 'indefinit':10A 'infinit':31B,79C 'keep':59B,155C 'length':45B,128C,140C 'loop':32B,80C,149C 'modul':3A,26B 'never':150C 'one':161C 'packag':18B 'perl':1A,19B,24B,76C 'postdata':102C 'process':9A,62B,158C 'putdata':93C,103C 'read':101C,124C,144C 'request':5A,35B,57B,84C,106C,163C 'return':145C 'run':141C 'self':21B 'self-host':20B 'server':8A,61B,157C 'servic':70B 'set':51B,90C,100C,118C 'short':4A,83C 'shorter':39B,135C 'singl':55B 'spin':159C 'submiss':113C 'take':104C 'upload':49B,88C,94C,97C,117C 'uploads-dis':48B 'version':72C","nicknames":[],"mitigations":[],"who_affected":"Only servers running Perl CGI scripts that use the CGI module older than 5.00 and have $CGI::DISABLE_UPLOADS set are exposed. The flaw needs a PUTDATA_UPLOAD or upload hook setting to reach the vulnerable path, so default-configured apps that do not use these options can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["cgi","medium","package","perl","selfhosted"],"campaign_type":null,"first_public_at":"2026-11-04T00:17:26+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-120651","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-120651","severity":null,"published_at":"2026-11-04T00:17:26+00:00","modified_at":"2026-11-04T00:17:26+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":62133,"url":"https://github.com/leejo/CGI.pm/commit/16d9f61acf8b844b7360e8d726338e3ce34dfa9f.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":62134,"url":"https://github.com/leejo/CGI.pm/commit/8a78305065690461ae283fa24e5ebe4ec8a22fbc.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"}