{"id":"CVE-2026-84316","kind":"vulnerability","aliases":["CVE-2026-84316","GHSA-cf23-7qxj-xmhr","GO-2026-6782"],"related":[],"title":"Nginx UI: nginx config directive denylist (ValidateConfigFile) is bypassable via same-line \";\" separation → authenticated directive injection (RCE on the official image) in github.com/0xJacky/Nginx-UI","description":"Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, config.ValidateConfigDirectives splits configuration by newline and checks only the first directive token on each line even though Nginx permits multiple semicolon-separated directives on one line. An authenticated caller can place a benign directive first and a restricted load_module, js_import, perl, or user root directive later on the same line, or can use an unrestricted include directive to load restricted content. These mechanisms bypass validation on REST, nginx_config_modify, site, and stream write paths; when an executable module is available, the injected configuration can execute code in the Nginx worker context. This issue is fixed in version 2.4.1.","summary":"Nginx UI, a web interface for managing Nginx, has a validation bypass where a config directive denylist only checks the first directive per line, so an authenticated user can smuggle in restricted directives like load_module, js_import, perl or user root after a semicolon. When an executable module is available, the injected config can run code in the Nginx worker context.","severity":"high","cvss":8.8,"epss":0.00399,"exploited":false,"exploited_at":null,"products":[{"name":"github.com/0xJacky/Nginx-UI","fixed":["1.9.10-0.20260703131214-23d1934099b0"],"affected":"< 1.9.10-0.20260703131214-23d1934099b0","ecosystem":"go"}],"ecosystems":["go"],"tags":["go","nginx","nginx-ui","package","self-hosted"],"not_affected_if":["no-untrusted-authenticated-users","version-2.4.1-or-later"],"how_to_check":"Check the Nginx UI version: affected if the Go module is older than 1.9.10-0.20260703131214-23d1934099b0 (sources also say prior to 2.4.1).\nReview who has login access to the Nginx UI web interface and any API tokens.","fix":"Upgrade github.com/0xJacky/Nginx-UI to 2.4.1 or the commit 1.9.10-0.20260703131214-23d1934099b0 or later.\nRotate credentials for any Nginx UI accounts if untrusted users had access.","status":"open","published_at":"2026-10-12T21:17:22+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","triaged_at":"2026-10-23T19:51:20+00:00","updated_at":"2026-10-23T19:51:20+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-23T19:51:20Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade github.com/0xJacky/Nginx-UI to 2.4.1 or the commit 1.9.10-0.20260703131214-23d1934099b0 or later.\nRotate credentials for any Nginx UI accounts if untrusted users had access.","summary":"Nginx UI, a web interface for managing Nginx, has a validation bypass where a config directive denylist only checks the first directive per line, so an authenticated user can smuggle in restricted directives like load_module, js_import, perl or user root after a semicolon. When an executable module is available, the injected config can run code in the Nginx worker context.","category":"package","who_cares":["nginx-ui","self-hosted","nginx","go"],"confidence":0.8,"analyst_note":"Sources list the fix as 2.4.1 but the Go module fixed version is a pseudo-version; confirm the mapping at https://pkg.go.dev/vuln/GO-2026-6782 and the GHSA advisory for the exact patched release tag.","how_to_check":"Check the Nginx UI version: affected if the Go module is older than 1.9.10-0.20260703131214-23d1934099b0 (sources also say prior to 2.4.1).\nReview who has login access to the Nginx UI web interface and any API tokens.\nunknown","needs_analyst":true,"not_affected_if":["version-2.4.1-or-later","no-untrusted-authenticated-users"],"severity_if_unknown":"high"},"cost_usd":0.000484,"input_tokens":2349,"output_tokens":499,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':28A,36A,39A '-6782':37A '-84316':29A,40A '/0xjacky/nginx-ui':26A,43A '2.4.1':129C,231C '7qxj':33A 'authent':15A,79B,158C 'avail':103B,213C 'benign':163C 'bypass':9A,64B,196C 'caller':159C 'cf23':32A 'check':71B,136C 'code':109B,219C 'config':4A,67B,106B,201C 'config.validateconfigdirectives':130C 'configur':132C,216C 'content':193C 'context':114B,224C 'cve':27A,38A 'denylist':6A,69B 'direct':5A,16A,68B,74B,85B,140C,153C,164C,177C,189C 'even':145C 'execut':100B,210C,218C 'first':73B,139C,165C 'fix':228C 'ghsa':31A 'ghsa-cf23-7qxj-xmhr':30A 'github.com':25A,42A 'github.com/0xjacky/nginx-ui':24A,41A 'go':35A,44B 'host':52B 'imag':22A 'import':90B,172C 'includ':188C 'inject':17A,105B,215C 'interfac':57B,121C 'issu':226C 'js':89B,171C 'later':178C 'like':86B 'line':13A,76B,144C,156C,182C 'load':87B,169C,191C 'manag':59B 'mechan':195C 'modifi':202C 'modul':88B,101B,170C,211C 'multipl':149C 'newlin':134C 'nginx':1A,3A,45B,47B,53B,60B,112B,115C,124C,147C,200C,222C 'nginx-ui':46B 'offici':21A 'one':155C 'packag':49B 'path':207C 'per':75B 'perl':91B,173C 'permit':148C 'place':161C 'prior':127C 'rce':18A 'rest':199C 'restrict':84B,168C,192C 'root':94B,176C 'run':108B 'same-lin':11A 'self':51B 'self-host':50B 'semicolon':97B,151C 'semicolon-separ':150C 'separ':14A,152C 'server':126C 'site':203C 'smuggl':82B 'split':131C 'stream':205C 'though':146C 'token':141C 'ui':2A,48B,54B,116C 'unrestrict':187C 'use':185C 'user':80B,93B,120C,175C 'valid':63B,197C 'validateconfigfil':7A 'version':230C 'via':10A 'web':56B,119C,125C 'worker':113B,223C 'write':206C 'xmhr':34A","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-12T21:17:22+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"govuln","external_id":"GO-2026-6782","url":"https://pkg.go.dev/vuln/GO-2026-6782","severity":null,"published_at":"2026-10-19T21:08:35+00:00","modified_at":"2026-10-19T21:08:35+00:00","first_seen_at":"2026-10-23T19:13:08+00:00","fetched_at":"2026-10-23T19:13:08+00:00","note":null},{"source":"epss","external_id":"CVE-2026-84316","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-84316","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-23T19:13:43+00:00","fetched_at":"2026-10-23T19:13:43+00:00","note":null},{"source":"nvd","external_id":"CVE-2026-84316","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-84316","severity":null,"published_at":"2026-10-12T21:17:22+00:00","modified_at":"2026-10-13T15:17:50+00:00","first_seen_at":"2026-10-23T19:35:23+00:00","fetched_at":"2026-10-23T19:35:23+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}