codesentry 0.1.11 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +89 -3
  2. package/dist/index.js +1688 -162
  3. package/package.json +7 -4
package/README.md CHANGED
@@ -10,13 +10,13 @@ Semgrep CE para as linguagens suportadas por ele.
10
10
 
11
11
  - 🔎 **Dois motores num só comando** — regras próprias em TS/JS + Semgrep CE (OWASP Top 10) para dezenas de outras linguagens.
12
12
  - 📦 **Uma instalação, zero fricção** — `npm install -g codesentry` e pronto: sem Python, Docker, Semgrep ou conta em lugar nenhum.
13
- - 🔌 **100% offline depois de instalado** — nunca consulta a Semgrep Registry nem envia métricas.
13
+ - 🔌 **Análise de código offline** — nunca consulta a Semgrep Registry nem envia métricas; a auditoria de dependências, que usa serviços públicos, pode ser desativada com `--no-deps`.
14
14
  - 🪟🐧 **Windows e Linux nativamente** — sem WSL, sem container.
15
15
  - 📊 **Console, JSON ou Markdown** — saída pronta tanto para ler no terminal quanto para plugar em CI.
16
16
 
17
17
  ## O que o CodeSentry faz
18
18
 
19
- Rodando `codesentry scan` num projeto, dois motores de análise trabalham
19
+ Rodando `codesentry scan` num projeto, três motores de análise trabalham
20
20
  juntos e o resultado sai unificado em um único relatório:
21
21
 
22
22
  - **Motor nativo** — regras próprias em TypeScript, sem dependências
@@ -29,6 +29,15 @@ juntos e o resultado sai unificado em um único relatório:
29
29
  as linguagens que o Semgrep suporta (não só JS/TS), cobrindo os riscos
30
30
  do OWASP Top 10 de forma mais ampla que regras hand-rolled sozinhas
31
31
  conseguiriam.
32
+ - **Auditoria de dependências** (`npm audit` + [OSV.dev](https://osv.dev) +
33
+ [NVD](https://nvd.nist.gov)) —
34
+ identifica vulnerabilidades conhecidas nas dependências reais do
35
+ projeto (via `package-lock.json`). O OSV identifica versões afetadas e
36
+ corrigidas; quando seus aliases contêm CVEs, o NVD enriquece o mesmo
37
+ finding com CVSS, CWE, referências e dados da CISA. Roda por padrão e
38
+ exige rede; use `--no-nvd` para manter npm + OSV sem enriquecimento ou
39
+ `--no-deps` para um scan 100% offline. Ver [ADR 0005](docs/adr/0005-osv-dependency-database.md)
40
+ e [ADR 0006](docs/adr/0006-nvd-enrichment.md).
32
41
 
33
42
  Cada achado no relatório mostra o arquivo, a linha, a severidade e qual
34
43
  motor encontrou o problema (prefixo `semgrep/` para achados do Semgrep).
@@ -141,6 +150,8 @@ codesentry scan . --json
141
150
  codesentry scan . --concurrency 4
142
151
  codesentry scan . --config ./rules/security.yml
143
152
  codesentry scan . --tests
153
+ codesentry scan . --no-nvd
154
+ codesentry scan . --no-deps
144
155
  ```
145
156
 
146
157
  O Semgrep CE embutido é executado automaticamente depois das regras nativas,
@@ -148,6 +159,80 @@ usando um snapshot local do ruleset OWASP e `--metrics=off`. O comando não
148
159
  consulta a Semgrep Registry, não envia métricas e não requer internet após a
149
160
  instalação.
150
161
 
162
+ Por padrão, `scan` também roda a auditoria de dependências (`npm audit` +
163
+ OSV.dev + NVD) e funde os achados no mesmo relatório — isso exige `npm` no
164
+ `PATH` e acesso à rede. O OSV é a fonte principal: o NVD é consultado somente
165
+ para aliases `CVE-` retornados pelo OSV e uma falha do NVD nunca remove o
166
+ finding. Use `--no-nvd` para desativar apenas o enriquecimento ou `--no-deps`
167
+ para pular toda a auditoria e manter o scan 100% offline (CI sem egress,
168
+ ambientes air-gapped).
169
+
170
+ O console mostra quantos pacotes do lockfile foram considerados e quantos o
171
+ OSV.dev conseguiu verificar de fato (`OSV.dev: 360/363 verificados`, por
172
+ exemplo — a diferença indica pacotes cuja consulta falhou, reportados
173
+ também como aviso). Quando houver CVEs, mostra ainda a cobertura NVD separando
174
+ registros enriquecidos, sem resultado, falhas e cache hits. No relatório
175
+ Markdown gerado automaticamente (mais de 20 problemas), a lista completa de
176
+ dependências verificadas no OSV.dev (`nome@versão`) aparece numa seção própria.
177
+
178
+ ### Chave opcional do NVD
179
+
180
+ A integração funciona sem autenticação. Para maior capacidade de consulta,
181
+ solicite gratuitamente uma chave no formulário oficial
182
+ [Request an API Key](https://nvd.nist.gov/developers/request-an-api-key),
183
+ confirme a solicitação recebida por e-mail e configure `NVD_API_KEY` no
184
+ ambiente antes de executar o CodeSentry.
185
+
186
+ Linux/macOS:
187
+
188
+ ```bash
189
+ export NVD_API_KEY="sua-chave"
190
+ codesentry scan .
191
+
192
+ # Ou somente para uma execução:
193
+ NVD_API_KEY="sua-chave" codesentry dependency-audit .
194
+ ```
195
+
196
+ PowerShell:
197
+
198
+ ```powershell
199
+ $env:NVD_API_KEY = "sua-chave"
200
+ codesentry scan .
201
+ ```
202
+
203
+ A chave é enviada apenas no header `apiKey`; não é adicionada à URL, ao cache,
204
+ a logs ou aos relatórios. O CodeSentry não carrega arquivos `.env`
205
+ automaticamente. Sem chave, as consultas são serializadas com intervalo
206
+ mínimo de 6,1 segundos; com chave, 610 ms. Respostas bem-sucedidas ficam em
207
+ cache por 24 horas e respostas sem resultado por 1 hora. O cache fica no
208
+ diretório de cache do usuário, nunca no projeto analisado. Timeout, rate limit
209
+ ou indisponibilidade do NVD aparecem como aviso e não interrompem o scan.
210
+
211
+ ### Versões e atualização dos motores
212
+
213
+ Use `codesentry version --engines` para auditar exatamente os componentes
214
+ embutidos na sua instalação. O comando não executa o Semgrep nem acessa a
215
+ rede; ele mostra a versão do CodeSentry, a versão do Semgrep CE e Python do
216
+ runtime da plataforma, e a proveniência do snapshot `p/owasp-top-ten`
217
+ (origem, data de captura, revisão upstream quando disponível e SHA-256).
218
+
219
+ ```bash
220
+ codesentry version --engines
221
+ codesentry version --engines --json
222
+ ```
223
+
224
+ O snapshot do ruleset é identificado pela versão do pacote publicada junto ao
225
+ CodeSentry e pelo SHA-256 do seu conteúdo. A Semgrep Registry não fornece
226
+ necessariamente um commit estável para um ruleset público; nesse caso, o hash
227
+ é o identificador imutável que permite comparar o conteúdo auditado.
228
+
229
+ **Política de atualização:** revisamos semanalmente novas versões do Semgrep
230
+ e alterações no `p/owasp-top-ten`; atualizações regulares são publicadas em
231
+ até 30 dias. Correções upstream classificadas como críticas ou que afetem a
232
+ integridade da análise têm prioridade para uma release em até 48 horas. Toda
233
+ release que atualizar um motor ou ruleset registra as versões e hashes nos
234
+ artefatos publicados.
235
+
151
236
  `--concurrency <n>` limita o processamento paralelo do scanner nativo; use
152
237
  apenas inteiros positivos. Sem valor, o limite é ajustado para a máquina
153
238
  (`min(8, availableParallelism())`). Não há `--config` remoto: atualizações de
@@ -199,7 +284,8 @@ codesentry xss ./src --json # possíveis XSS (innerHTML, document.write
199
284
  codesentry unsafe-sql ./src # SQL injection por concatenação
200
285
  codesentry command-injection ./src # child_process com entrada não sanitizada
201
286
  codesentry weak-hash-algorithm ./src # uso de MD5/SHA-1 para hashing sensível
202
- codesentry dependency-audit . # `npm audit` das dependências do projeto (sem --tests: não lê arquivos-fonte)
287
+ codesentry dependency-audit . # npm audit + OSV.dev + NVD (sem --tests: não lê arquivos-fonte)
288
+ codesentry dependency-audit . --no-nvd # mantém npm + OSV e desativa só o NVD
203
289
  ```
204
290
 
205
291
  Assim como em `scan`, `--tests` inclui arquivos de teste na análise (por