O executor padrão do git usado para todas as operações de worktree gera `git` através de um shell, e o nome da tarefa não confiada **branch** flui para o comando não saneado. Um chamador capaz de alcançar o RCP `SpawnSession` da PowerLine (um agente malicioso ou comprometido atuando através da camada de orquestração, ou qualquer cliente capaz de criar uma tarefa) pode alcançar **execução de comando arbitrário** como usuário da PowerLine em cada ambiente provisto (host SSH, container Docker ou Codespace), escapando da caixa de areia do agente. Este aviso agrupa dois defeitos relacionados no `worktree.ts` (resultados da auditoria **F 1 ** e **F 13 **). `@ grackle-ai/runtime-sdk` (e alcançável via `@ grackle-ai/powerline`) na versão ** 0.132.1 ** e mais cedo. Todos os pacotes publicáveis são versáveis em lockstep.

F 1 — Injeção de comando através de `shell:true` (primário, alto). **Localização:** `pacotes/ runtime-sdk/src/worktree.ts: 22 - 28 ` (sinver), `: 135 - 143 ` (branch → args). Fonte: `pacotes/ linha de força/ src/ grpc-server.ts: 112 ` (`req.branch`), `pacotes/ runtime-sdk/src/base-session.ts: 60,137 `. ` NODE_GIT_EXECUTOR.exec` executa. ``` ts const shell = process. env. SHELL. true; // worktree.ts: 24 — resultado const sempre verdade = esperar execRaw("git", args, {...opções, shell }); ``` Quando `shell` é verdade, o Node passa **não** `args` como um vetor argv seguro — ele concatena `git` + args em uma única string executando `sh - c` com **não escapando**. O `branch` não confiável flui não validado do pedido do 'SpawnSession` para:.

```ts ["worktree", "add", "-b", branch, wtPath, startPoint] // worktree.ts: 135 - 137 ["worktree", "add", wtPath, branch] // replieback: 143 ``` ` sanitizeBranch()` (`worktree.ts: 50 `) é aplicado **somente** para calcular o caminho do diretório do worktree no disco — *não* para o argumento `- b ` — por isso ele fornece proteção zero no lavatório da injeção. **Exploit:** defina um ramo de tarefa para `x;curl ou `$(touch /tmp/pwned)`. `assureWorktree` executa- o sob `sh -c`, cedendo RCE como o usuário PowerLine. (Confirmado empírico durante a auditoria: um valor de ramo args- array `evilbranch;touch /tmp/ PWNED` criou o arquivo.)

O caminho git do irmão no ` runtime-utils.ts: 48 - 56 ` já usa `execFileAsync("git", [...])` com o shell ** no**, confirmando que `shell:true` é desnecessário aqui. ## F 13 — Injeção de argumento: separador `--` faltante (resistente, Baixo). **Localização:** `pacotes/ runtime-sdk/src/worktree.ts: 135 - 143 `. Independentemente do problema da shell, o ` branch` é colocado como argumento posicional sem terminador `--`. O irmão `checkoutBranch` (` runtime-utils.ts: 51 `) usa corretamente `["checkout", "--", branch]`. Apenas a invocação de retalho (trailing positional) é genuinamente injetável em bandeiras; ` git worktree add` expõe nenhuma bandeira perigosa alcançada desta forma, por isso o impacto autónomo é limitado — mas deve ser endurecido ao lado de F 1.

1. **Retire `shell` de `NODE_GIT_EXECUTOR`** — `execFile('git', args)` com o array argv já é seguro e é o padrão usado em `runtime-utils.ts'. Esta é a solução primária. 2. Adicione um separador `--` antes de refs/ percursos posicionais em ambas as invocações `worktree add`. 3 **Defesa em profundidade:** validar `branch` no limite do gRPC (`grpc- server.ts`) contra regras git ref — rejeitar nomes começando com `-`, contendo `..', ou contendo metacaracterísticas de shell — antes que ele alcance `ensureWorktree`. Registro de aconselhamento: GHSA-vv 65 - f 55 v- xm 6 g. Não há nenhum identificador adicional listado.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 02 T 19: 16: 57.000 Z e lista a sua última modificação como 2026 - 07 - 02 T 19: 16: 57.000 Z. Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/África do Sul:N.

Informações sobre software e versão afetadas: pacote npm @ grackle-ai/runtime-sdk — ECOSYSTEM: introduzido 0, última afetada 0.132.1. Pacote npm @ grackle-ai/ powerline — ECOSISTEM: introduzido 0, última afetada 0.132.1. Classificação e evidência: identificadores de fraqueza CWE- 78, CWE- 88. O registro contém 2 suporte de referências nestes tipos: WEB, PACKAGE.