Advisory Database
  • Advisories
  • Dependency Scanning
  1. golang
  2. ›
  3. github.com/0xJacky/Nginx-UI
  4. ›
  5. CVE-2024-22197

CVE-2024-22197: Authenticated (user role) remote command execution by modifying `nginx` settings (GHSL-2023-269)

January 11, 2024 (updated July 6, 2026)

The Home > Preference page exposes a small list of nginx settings such as Nginx Access Log Path and Nginx Error Log Path. However, the API also exposes test_config_cmd, reload_cmd and restart_cmd. While the UI doesn’t allow users to modify any of these settings, it is possible to do so by sending a request to the API.

func InitPrivateRouter(r *gin.RouterGroup) {
r.GET("settings", GetSettings)
r.POST("settings", SaveSettings)
...
}

The SaveSettings function is used to save the settings. It is protected by the authRequired middleware, which requires a valid JWT token or a X-Node-Secret which must equal the Node Secret configuration value. However, given the lack of authorization roles, any authenticated user can modify the settings. The SaveSettings function is defined as follows:

func SaveSettings(c *gin.Context) {
var json struct {
...
Nginx  settings.Nginx  `json:"nginx"`
...
}

...

settings.NginxSettings = json.Nginx

...

err := settings.Save()
...
}

The test_config_cmd setting is stored as settings.NginxSettings.TestConfigCmd. When the application wants to test the nginx configuration, it uses the TestConf function:

func TestConf() (out string) {
if settings.NginxSettings.TestConfigCmd != "" {
out = execShell(settings.NginxSettings.TestConfigCmd)

return
}

out = execCommand("nginx", "-t")

return
}

The execShell function is defined as follows:

func execShell(cmd string) (out string) {
bytes, err := exec.Command("/bin/sh", "-c", cmd).CombinedOutput()
out = string(bytes)
if err != nil {
out += " " + err.Error()
}
return
}

Where the cmd argument is user-controlled and is passed to /bin/sh -c. This issue was found using CodeQL for Go: Command built from user-controlled sources.

References

  • github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/api/system/router.go
  • github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/api/system/settings.go
  • github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/router/middleware.go
  • github.com/0xJacky/nginx-ui/commit/827e76c46e63c52114a62a899f61313039c754e3
  • github.com/0xJacky/nginx-ui/security/advisories/GHSA-pxmr-q2x3-9x9m
  • github.com/advisories/GHSA-pxmr-q2x3-9x9m
  • nvd.nist.gov/vuln/detail/CVE-2024-22197
  • pkg.go.dev/vuln/GO-2024-2464

Code Behaviors & Features

Detect and mitigate CVE-2024-22197 with GitLab Dependency Scanning

Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →

Affected versions

All versions before 1.9.10-0.20231219184941-827e76c46e63

Fixed versions

  • 1.9.10-0.20231219184941-827e76c46e63

Solution

Upgrade to version 1.9.10-0.20231219184941-827e76c46e63 or above.

Impact 7.7 HIGH

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:L

Learn more about CVSS

Weakness

  • CWE-77: Improper Neutralization of Special Elements used in a Command ('Command Injection')

Source file

go/github.com/0xJacky/Nginx-UI/CVE-2024-22197.yml

Spotted a mistake? Edit the file on GitLab.

  • Site Repo
  • About GitLab
  • Terms
  • Privacy Statement
  • Contact

Page generated Sat, 08 Aug 2026 12:16:37 +0000.