This release closes several ways a remotely fetched program could reach an interpreter or PowerShell unchecked, and stops a host tool's working-directory argument from moving the boundary that recursive-delete rules protect.
Highlights
- Remote installer commands that hand fetched code to an interpreter or to PowerShell —
curl … | python3 -,irm … | iex,curl -o i.sh … && bash i.sh— now stop as an unverifiable shell execution source instead of running. Hosts that can prompt ask for confirmation; non-prompting modes such asbypassPermissionsdeny. - Recursive-delete rules anchor at the session workspace rather than the working directory a shell tool passes in, so a tool
workdiroutside the workspace no longer opens up deletes that a leadingcd ..already blocked.
Fixed
- Fixed an interpreter running a program fetched from the network being allowed.
python3,node,perl, andrubyreading their program from a remote pipeline stage, a command substitution, or a process substitution — including behindsudo,env,timeout,nice,stdbuf, orexec— are now blocked at bothstandardandstrict. (#312) - Fixed PowerShell evaluation of remote content being allowed.
iex/Invoke-Expressionfed by a remote fetch through a pipeline, a$(…)substitution, a parenthesized fetch, or.DownloadString(/.DownloadData(is now blocked, directly or nested inpwsh -c/powershell -Command.irm,iwr,Invoke-RestMethod, andInvoke-WebRequestnow count as remote fetchers, soirm … | python3is caught too. (#313) - Fixed a file downloaded and then executed in the same command being allowed. The literal output path of
curl -o/--output,wget -O/--output-document, or a truncating redirect is tracked for the rest of that command; running it as a shell script (bash,sh,source,./path) or as an interpreter main script is blocked. Inspecting the download instead —sha256sum,cat,tar,bash -n,node --check,ruby -c— overwriting the path before it runs, or piping remote data intopython3 -c,jq, orConvertFrom-Jsonstays allowed. (#316) - Fixed a shell tool's working-directory argument (DeepSeek Harness
workdir, Geminidir_path, OpenCodeworkdir, a declared tool's cwd) re-anchoring the outside-cwd and cwd-self delete rules, which allowedrm -rf outsideandRemove-Item -LiteralPath <dir>\outside -Recurse -Forcefrom a workdir above the workspace. Relative paths, git context, and secret paths still resolve in the workdir. (#318) - Fixed the home working-directory delete rule not firing when the session directory contains the home directory; it now applies when either the session anchor or the current directory is home. (#318)
- Fixed
Remove-Itemandcmdrd/delallowing a delete outside the workspace when the home working-directory rule is turned off; they now share the ordered classificationrmuses and deny as an outside-workspace delete. (#318) - Fixed an interpreter syntax-check flag counting when it follows the script operand, where it no longer requests a check:
node check.js --checkon a downloaded file is now treated as running it, whilenode --check app.jsandruby -c app.rbstay recognized as checks. (#316)