github / github/copilot-cli

Guard against PowerShell `$home` variable footgun causing user profile mutation/deletion

未關閉
#3,098 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
area:platform-windows area:tools
主要語言
Shell
星號
11.2k
分支
1.9k
平均合併
14 小時 16 分鐘
30 天內合併 PR
6

描述

## Summary

PowerShell's variable names are case-insensitive, so a seemingly local variable named `$home` resolves to the built-in read-only `$HOME` variable. When a generated or agent-authored script intends to use `$home` as a scratch path and then runs cleanup such as `Remove-Item -Recurse -Force $home`, PowerShell can target the user's real profile directory instead of the intended temporary directory.

I've now seen this pattern multiple times in agent-generated PowerShell. In one case during Copilot CLI hook testing, this command shape attempted to remove content from the user profile before the process was stopped:

```powershell
$home = 'C:\Users\name\.copilot\session-state\...\files\copilot-home-hooks'
if (Test-Path $home) { Remove-Item -Recurse -Force $home }
```

Because `$HOME` is read-only, assignment failed, but subsequent references still pointed at the real home directory. That creates a high-risk corrupted-profile failure mode.

## Why this matters

Copilot CLI frequently generates PowerShell for Windows users. `$home` is a natural variable name for directories like app home, tool home, temp home, or Copilot home. In PowerShell this is a dangerous footgun because it aliases the built-in `$HOME` variable by case-insensitive lookup.

## Suggested mitigations

- Add a Copilot CLI/system instruction for PowerShell generation: never use `$home` as a user-defined variable; use names like `$userProfile`, `$homeDir`, `$copilotHomePath`, or `$targetRoot` instead.
- Add a safety rule or lint-like guard before destructive PowerShell commands when the target variable is `$home`/`$HOME`.
- Consider warning or requiring confirmation when generated PowerShell combines `$home` with destructive recursive operations such as `Remove-Item -Recurse`.

This is especially important for autonomous/remote sessions where a user may not see the exact command before damage occurs.

貢獻指南

開啟貢獻指南

研究方向

No files, tests, or entry points are named. Start by locating PowerShell generation instructions and any safety checks for destructive commands, then determine which mitigation is supported by the project. Done should prevent generated scripts from treating `$home` as a user-defined path or otherwise guard recursive deletion of the real profile directory.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
powershell
領域
cli, security
Issue 類型
功能
難度
4/5
預估耗時
3-5 天
活躍度
冷清
描述清晰度
需要釐清
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。