Описание
Deno's --deny-read check does not prevent permission bypass
Summary
Deno.FsFile.prototype.stat and Deno.FsFile.prototype.statSync are not limited by the permission model check --deny-read=./.
It's possible to retrieve stats from files that the user do not have explicit read access to (the script is executed with --deny-read=./)
Similar APIs like Deno.stat and Deno.statSync require allow-read permission, however, when a file is opened, even with file-write only flags and deny-read permission, it's still possible to retrieve file stats, and thus bypass the permission model.
PoC
Setup:
poc_file.stat.ts
Output:
deno run --deny-read=./ --allow-write=./ poc_file.stat.ts 1
deno run --deny-read=./ --allow-write=./ poc_file.stat.ts 2
deno run --deny-read=./ --allow-write=./ poc_file.stat.ts 3
deno run --deny-read=./ --allow-write=./ poc_file.stat.ts 4
Impact
Permission model bypass
Ссылки
- https://github.com/denoland/deno/security/advisories/GHSA-qq26-84mh-26j9
- https://nvd.nist.gov/vuln/detail/CVE-2025-61786
- https://github.com/denoland/deno/pull/30876
- https://github.com/denoland/deno/commit/1ab2268c0bcbf9b0468e0e36963f77f8c31c73ec
- https://github.com/denoland/deno/releases/tag/v2.2.15
- https://github.com/denoland/deno/releases/tag/v2.5.3
Пакеты
deno
< 2.5.3
2.5.3
Связанные уязвимости
Deno is a JavaScript, TypeScript, and WebAssembly runtime. In versions prior to 2.5.3 and 2.2.15, `Deno.FsFile.prototype.stat` and `Deno.FsFile.prototype.statSync` are not limited by the permission model check `--deny-read=./`. It's possible to retrieve stats from files that the user do not have explicit read access to (the script is executed with `--deny-read=./`). Similar APIs like `Deno.stat` and `Deno.statSync` require `allow-read` permission, however, when a file is opened, even with file-write only flags and deny-read permission, it's still possible to retrieve file stats, and thus bypass the permission model. Versions 2.5.3 and 2.2.15 fix the issue.