Skip to content

Commit 1fb1766

Browse files
author
SqlRush
committed
Guard PowerShell event query expressions
1 parent 8e743e6 commit 1fb1766

4 files changed

Lines changed: 13 additions & 4 deletions

File tree

docs/cc-100-roadmap.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,8 @@ M5 补充:PowerShell read-only classifier 收紧 metadata 查询类 cmdlet,`
259259

260260
M5 补充:PowerShell read-only classifier 收紧网络/DNS 查询类 cmdlet,`Get-NetAdapter`/`Get-NetIPAddress`/`Get-NetIPConfiguration`/`Get-NetRoute`/`Get-DnsClientCache`/`Get-DnsClient` 继续允许普通 literal 查询参数,但拒绝 `$env:`、hashtable 等动态表达式参数。
261261

262+
M5 补充:PowerShell read-only classifier 收紧事件日志/CIM 查询类 cmdlet,`Get-EventLog``Get-CimClass` 继续允许普通 literal 查询参数,但拒绝 `$env:`、hashtable 等动态表达式参数。
263+
262264
M5 补充:Bash 前台输出和 `BashOutput` 现在都走统一 tool-result budget 截断/落盘路径;`BashOutput` 增加 100k 最大结果限制,大后台输出会保存完整内容并返回 `full_output_path` 元数据。
263265

264266
M5 补充:Bash/PowerShell 后台任务现在会发 `*_background_started``*_background_finished` tool progress 事件,包含后台 ID、shell/status、exit/timed_out/cancelled、duration、时间戳和输出字节数,不携带 command 文本;completed、timed_out、cancelled 终态均已覆盖测试。

docs/claude-code-go-rewrite-plan.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ test/parity/ # golden tests against TS/official behavior
240240
- 本轮补充:PowerShell read-only classifier 收紧 `Get-Process`/`Get-Service`,继续允许普通 literal name/id/displayName/include/exclude 查询参数,但拒绝动态表达式参数。
241241
- 本轮补充:PowerShell read-only classifier 收紧 metadata 查询类 cmdlet,`Get-Location`/`Get-Date`/`Get-PSDrive`/`Get-Module`/`Get-Alias`/`Get-History`/`Get-TimeZone` 继续允许普通 literal 参数,但拒绝动态表达式参数。
242242
- 本轮补充:PowerShell read-only classifier 收紧网络/DNS 查询类 cmdlet,`Get-NetAdapter`/`Get-NetIPAddress`/`Get-NetIPConfiguration`/`Get-NetRoute`/`Get-DnsClientCache`/`Get-DnsClient` 继续允许普通 literal 查询参数,但拒绝 `$env:`、hashtable 等动态表达式参数。
243+
- 本轮补充:PowerShell read-only classifier 收紧事件日志/CIM 查询类 cmdlet,`Get-EventLog``Get-CimClass` 继续允许普通 literal 查询参数,但拒绝 `$env:`、hashtable 等动态表达式参数。
243244
- 本轮补充:`BashOutput` 现在设置 100k 最大结果大小,和前台 `Bash` 一起覆盖大输出 tool-result preview 截断、完整输出落盘及 `full_output_path` 元数据。
244245
- 本轮补充:Bash/PowerShell 后台命令现在会通过 tool progress 通道发 started/finished 事件,记录后台 ID、shell/status、exit/timed_out/cancelled、duration、时间戳和 stdout/stderr byte count,且 completed、timed_out、cancelled 终态测试确保 progress 不携带 command 文本。
245246
- 本轮补充:WebSearch domain filters 现在在 schema 层声明 array `items:string`,通用 tool schema validator 同步支持 `items` 校验;`allowed_domains`/`blocked_domains` 会拒绝空字符串、URL/port、非法 wildcard 和非域名 label。

internal/tools/powershell/tools.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,8 +1454,9 @@ var powerShellReadOnlyCmdlets = map[string]powerShellReadOnlyConfig{
14541454
rejectExpressionValues: true,
14551455
},
14561456
"get-eventlog": {
1457-
allowedFlags: stringSet("logname", "newest", "after", "before", "entrytype", "index", "instanceid", "message", "source", "username", "asbaseobject", "list"),
1458-
valueFlags: stringSet("logname", "newest", "after", "before", "entrytype", "index", "instanceid", "message", "source", "username"),
1457+
allowedFlags: stringSet("logname", "newest", "after", "before", "entrytype", "index", "instanceid", "message", "source", "username", "asbaseobject", "list"),
1458+
valueFlags: stringSet("logname", "newest", "after", "before", "entrytype", "index", "instanceid", "message", "source", "username"),
1459+
rejectExpressionValues: true,
14591460
},
14601461
"get-winevent": {
14611462
allowedFlags: stringSet("logname", "listlog", "listprovider", "providername", "path", "maxevents", "filterxpath", "force", "oldest"),
@@ -1464,8 +1465,9 @@ var powerShellReadOnlyCmdlets = map[string]powerShellReadOnlyConfig{
14641465
validatePositionalsAsPaths: true,
14651466
},
14661467
"get-cimclass": {
1467-
allowedFlags: stringSet("classname", "namespace", "methodname", "propertyname", "qualifiername"),
1468-
valueFlags: stringSet("classname", "namespace", "methodname", "propertyname", "qualifiername"),
1468+
allowedFlags: stringSet("classname", "namespace", "methodname", "propertyname", "qualifiername"),
1469+
valueFlags: stringSet("classname", "namespace", "methodname", "propertyname", "qualifiername"),
1470+
rejectExpressionValues: true,
14691471
},
14701472
"start-sleep": {
14711473
allowedFlags: stringSet("seconds", "milliseconds", "duration"),

internal/tools/powershell/tools_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,11 +407,15 @@ func TestPowerShellCommandClassification(t *testing.T) {
407407
"Get-DnsClient -InterfaceAlias $env:IFACE",
408408
"Get-NetAdapter -CimSession server",
409409
"Get-DnsClientCache -CimSession server",
410+
"Get-EventLog -LogName $env:LOG",
411+
"Get-EventLog -Source @{N='App'}",
410412
"Get-WinEvent -FilterXml '<x />'",
411413
"Get-WinEvent -FilterHashtable @{LogName='System'}",
412414
"Get-WinEvent -ComputerName server -LogName System",
413415
"Get-WmiObject -Class Win32_Process",
414416
"Get-CimInstance -ClassName Win32_Process",
417+
"Get-CimClass -ClassName $env:CLASS",
418+
"Get-CimClass -Namespace @{N='root/cimv2'}",
415419
"Get-CimClass -CimSession server -ClassName Win32_Process",
416420
"ipconfig set en0 DHCP",
417421
"ipconfig /flushdns",

0 commit comments

Comments
 (0)