Segurança
O que sai das suas máquinas
Um arquivo: o grafo. Ele é um JSON e contém caminhos de rotas, os nomes de serviços, modelos, filas e hosts, os nomes das variáveis de ambiente, nomes e versões de dependências, caminhos de arquivos e números de linha que apontam para definições e chamadas, contagens de commits e nomes de autores, e até três linhas de código em volta de cada item deixado para revisão, que a caixa de revisão mostra como evidência. Ele não contém arquivos de código-fonte inteiros, os valores das variáveis de ambiente, credenciais nem o conteúdo dos seus dados.
Duas formas de gerá-lo:
- Scanner hospedado. Você adiciona uma chave somente leitura ao GitHub ou ao Bitbucket. O nosso runner faz um clone raso de cada repositório, lê o código, grava o grafo e apaga o clone. O clone existe pelos minutos que uma varredura leva, num disco que é apagado depois.
- As suas próprias máquinas. A ferramenta de linha de comando roda no seu CI ou no notebook de um desenvolvedor e envia só o grafo, com um token do workspace. Só o grafo chega até nós. Disponível em todos os planos.
Chaves
- Um par de chaves ed25519 por workspace, gerado nos nossos servidores com as ferramentas do OpenSSH. Você vê a metade pública; a metade privada é criptografada em repouso com AES-256-GCM sob uma chave mestra que fica no ambiente do servidor, nunca no banco de dados.
- A chave é somente leitura por causa de onde você a adiciona: uma deploy key do GitHub sem acesso de escrita, um machine user com o papel Read ou uma access key do Bitbucket, que só pode clonar e fazer fetch. Documentamos cada caminho no produto.
- Rotacione a chave pelas configurações a qualquer momento; revogá-la no provedor interrompe imediatamente todas as varreduras futuras.
- Os tokens de workspace da ferramenta de linha de comando aparecem uma única vez e são armazenados como hash.
O runner
- Nunca executa o seu código. Ele analisa os arquivos com tree-sitter e expressões regulares e lê manifestos e arquivos de lock. Os alertas de segurança de dependências vêm dos metadados dos registros de pacotes e da base do OSV, por nome e versão do pacote.
- Roda cada varredura em um diretório temporário novo, com tempo limite e limite de tamanho, e o apaga ao terminar, com sucesso ou falha.
- Clona por SSH apenas com a chave do workspace, ou por HTTPS no caso de repositórios públicos; o acesso de saída é limitado aos serviços de hospedagem de código e aos registros de pacotes.
Dados em repouso e em trânsito
- TLS 1.2 ou superior em todas as conexões, com certificados renovados automaticamente.
- Senhas com hash bcrypt; as sessões são tokens assinados com validade de 30 dias.
- Os grafos e as suas visões são armazenados por organização e por workspace em armazenamento de objetos ou em discos criptografados, nunca compartilhados entre clientes; toda leitura é restrita à organização do membro conectado.
- Backups diários do banco de dados, mantidos por 14 dias e armazenados separados do servidor da aplicação.
Controle de acesso
- Quatro papéis: proprietário, admin, membro, leitor. Só proprietários cuidam da cobrança; só admins mexem em chaves e workspaces; leitores leem.
- A equipe não navega pelos dados dos clientes. Para dar suporte, podemos abrir um workspace em modo somente leitura, por no máximo uma hora, depois que você pedir ou concordar; cada sessão é registrada num log de auditoria que você pode ver no produto. Clientes do plano Company podem desativar totalmente o acesso da equipe.
- O acesso à produção é limitado às pessoas que operam o serviço, por chaves SSH, com os logs do próprio servidor.
Retenção e exclusão
As importações além do limite do seu plano são excluídas automaticamente, com os arquivos. Excluir um workspace remove as importações, as declarações e a chave dele; excluir uma organização remove tudo em até 30 dias, exceto os registros de cobrança que a lei nos obriga a manter. Você pode exportar o grafo a qualquer momento antes disso.
Suboperadores
Hospedagem: Contabo (EUA); Stripe para pagamentos; Resend para e-mail; TypeSafe AI para as sugestões de revisão (nomes, caminhos, hostnames e os trechos de três linhas dos itens de revisão); Sentry para relatórios de erro. A lista, com o que cada um recebe, está na política de privacidade, e avisamos os clientes 30 dias antes de adicionar um novo.
Como reportar uma vulnerabilidade
Escreva para security@kuuhaku.dev. Respondemos em até dois dias úteis, mantemos você a par e damos o crédito a você, se quiser. Por favor, não acesse dados de outros clientes durante os testes e nos dê um prazo razoável para corrigir antes de publicar.
Incidentes
Se um incidente de segurança afetar os seus dados, notificamos os proprietários da organização por e-mail em até 72 horas após confirmá-lo, com o que aconteceu, o que foi afetado e o que fizemos, e notificamos as autoridades quando a lei exige.