fix(security): replace Math.random with crypto.randomUUID and fix URL hostname check#2461
Conversation
…TaskId/ActivityId and fix URL hostname check in test
There was a problem hiding this comment.
Code Review
This pull request replaces Math.random() with crypto.randomUUID() for task and activity ID generation in the base agent and refines URL matching in unit tests to check hostnames specifically. The reviewer identified that truncating the UUIDs to nine characters significantly reduces entropy, which could lead to security vulnerabilities, and recommended using the full UUID. Additionally, the reviewer noted that changes to production code must be accompanied by unit tests to comply with the repository's style guide.
|
|
||
| protected generateTaskId(): string { | ||
| return `task_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; | ||
| return `task_${Date.now()}_${crypto.randomUUID().replace(/-/g, "").substring(0, 9)}`; |
There was a problem hiding this comment.
Ao truncar o UUID para apenas 9 caracteres hexadecimais, a entropia resultante é de aproximadamente 36 bits (crypto.randomUUID() resolva o problema da previsibilidade do Math.random(), a baixa entropia do sufixo pode ainda permitir ataques de adivinhação por força bruta se esses IDs forem expostos externamente em um contexto de segurança (como mencionado na descrição do PR). Se não houver uma restrição rígida de comprimento no sistema que consome esses IDs, considere utilizar o UUID completo para aumentar a segurança e garantir a unicidade.
Além disso, de acordo com a regra 9 do guia de estilo do repositório, alterações em código de produção (src/) devem ser acompanhadas de testes. Como a lógica de geração de IDs foi alterada, seria ideal incluir ou atualizar testes unitários para validar o novo formato.
| return `task_${Date.now()}_${crypto.randomUUID().replace(/-/g, "").substring(0, 9)}`; | |
| return `task_${Date.now()}_${crypto.randomUUID()}`; |
References
- Sempre inclua testes ao alterar código de produção (src/, open-sse/, electron/, bin/). (link)
|
|
||
| protected generateActivityId(): string { | ||
| return `act_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; | ||
| return `act_${Date.now()}_${crypto.randomUUID().replace(/-/g, "").substring(0, 9)}`; |
There was a problem hiding this comment.
Assim como no generateTaskId, o truncamento para 9 caracteres reduz significativamente a unicidade garantida pelo UUID. Para um identificador externo em um contexto de segurança, recomenda-se manter o UUID completo para minimizar riscos de colisão e previsibilidade.
| return `act_${Date.now()}_${crypto.randomUUID().replace(/-/g, "").substring(0, 9)}`; | |
| return `act_${Date.now()}_${crypto.randomUUID()}`; |
Code Review SummaryStatus: No Issues Found | Recommendation: Merge OverviewBoth changes correctly address CodeQL security alerts without introducing new issues.
Files Reviewed
Verification Performed
Reviewed by qwen3.6-plus · 118,366 tokens |
Fixes
Corrige os 2 alertas de code scanning CodeQL em aberto.
Alert #251 — Insecure randomness (
js/insecure-randomness)File:
src/lib/cloudAgent/baseAgent.ts(linhas 88–93)Math.random()era usado para gerar os sufixos aleatórios detaskIdeactivityId. O CodeQL sinalizou o uso como inseguro para um contexto de segurança (os IDs são usados como identificadores externos para tarefas do Jules).Fix: substituído por
crypto.randomUUID()(disponível globalmente no Node.js ≥20, alinhado ao runtime alvo do projeto):Alert #252 — Incomplete URL substring sanitization (
js/incomplete-url-substring-sanitization)File:
tests/unit/antigravity-discovery-bootstrap.test.ts(linha 155)url.includes("daily-cloudcode-pa.googleapis.com")pode ser satisfeito por uma URL do tipohttp://evil.com/daily-cloudcode-pa.googleapis.com, pois a string pode aparecer em qualquer posição.Fix: substituído por verificação explícita do hostname via
new URL():Test plan
node --import tsx/esm --test tests/unit/antigravity-discovery-bootstrap.test.ts→ 10/10 passnpx tsc --noEmit→ sem erros nos arquivos modificadosfixed