Um mapa da sua plataforma. Os poucos caminhos que importam.
O Basalt lê seu código, sua infraestrutura e sua conta AWS, junta tudo em um único grafo e reporta apenas as cadeias que levam a algo sensível. Cada uma vem com evidência e correção.
Como funciona
Quatro etapas, todas somente leitura. O primeiro scan de uma plataforma típica de startup não exige instalar agente nem mudar código.
Conectar
Uma role de leitura na AWS, assumida com ExternalId, e a CLI nos seus repositórios. Ou rode tudo na sua própria máquina. Um GitHub App está sendo liberado.
Mapear
O código é analisado, nunca executado. Agentes, tools, servidores MCP, credenciais, roles, policies, compute e data stores viram nós; o que cada um alcança vira uma aresta.
Encontrar caminhos
O motor percorre o grafo dos pontos de entrada até os dados sensíveis e pontua cada cadeia por exposição, explorabilidade, privilégio e sensibilidade do dado. Achados com a mesma causa raiz são agrupados.
Corrigir e comprovar
Cada caminho indica a menor mudança que o quebra. A CLI pode aplicá-la em um branch e abrir o pull request depois da sua aprovação; o scan seguinte mostra o caminho fechado.
Um mapa, três jeitos de usar
Escaneie a plataforma, cheque cada pull request antes do merge e teste se um caminho pode mesmo ser explorado. Cada um mostra em que pé está hoje.
Scan
Junta código e cloud em um único grafo e percorre esse grafo de cada ponto de entrada até os dados sensíveis. Você recebe as poucas cadeias que se sustentam, não uma lista de problemas soltos.
- Agentes e tools em LangChain, LangGraph, LlamaIndex, CrewAI, AutoGen, SDKs da OpenAI e da Anthropic, PydanticAI, Vercel AI SDK e Mastra, além das configs de MCP do Claude, Cursor, VS Code e Windsurf.
- Roles, policies e trust do IAM, Lambda, ECS e EC2, S3, DynamoDB e Secrets Manager, a partir do Terraform ou da conta ao vivo, por uma role somente leitura com ExternalId.
- Cinco regras de caminho hoje, cada achado sustentado por arquivo, linha ou ARN, com a menor correção que quebra a cadeia. Ver as regras
basalt scanebasalt scan-awsem texto ou JSON,basalt checkpara barrar o build que abre um caminho novo, e a aplicação web com um relatório de segurança para os seus clientes.
Analisa Python, TypeScript e JavaScript, Java, Rust e C++. O código é lido, nunca executado.
$ basalt scan ./platform code 3 agents · 11 tools · 2 MCP servers infra 7 roles · 9 data stores paths 2 critical · 1 high · 1 medium CRITICAL SupportBot can read customer data Function URL → support-api → SupportBot → read_file → support-bot → s3://customer-exports fix scope s3:GetObject to tickets/* at infra/iam.tf:22, support_bot/tools.py:8
Bug watch
Roda o mesmo motor em cada pull request e reporta só os caminhos de ataque que passam pelos arquivos alterados, antes que eles cheguem ao branch principal.
- Disparado pelos webhooks do GitHub App quando um pull request é aberto, reaberto, marcado como pronto para revisão ou recebe commits novos.
- Publica um check no GitHub (aprovado ou com problemas) e, se você quiser, um comentário com cada caminho, a severidade, os arquivos envolvidos e o nível de confiança.
- Você define a severidade mínima que vale um comentário, ou usa só o check. Um commit já checado não é checado de novo.
- Determinístico: nenhum modelo de IA no processo, por isso roda em todo pull request, em todos os planos.
Sendo liberado junto com o GitHub App. Uma revisão com IA por cima do check determinístico está em desenvolvimento e ainda não está no ar.
■ Basalt bug watch — issues 1 path touches files in this pull request basalt commentedBasalt bug watch — 1 highThese attack paths touch fileschanged in this PR: ■ HIGH · Any AWS account can assume ci-deploy Trust allows "AWS": "*" with no ExternalId; the role can read prod/database. Where: infra/iam/ci.tf confidence: high
Red team
Pega os caminhos que o scan encontrou e os testa contra um alvo que você indica, para separar o que pode mesmo ser explorado do que não pode. É validação automatizada de caminhos de ataque, não um pentest.
- Só roda depois que um owner assina uma autorização por escrito com o alvo, o ambiente e a janela de horário. Staging por padrão.
- A prova é um canary que você planta, como um objeto, uma linha no banco ou um arquivo. Sem o canary, o veredito é inconclusivo, nunca explorado.
- Só métodos HTTP seguros, salvo opt-in, rate limit por alvo, limite de turnos e de tentativas, e um kill switch.
- Famílias de técnica mapeadas ao OWASP Top 10 para aplicações com LLM: prompt injection, agência excessiva de tools, vazamento de dados, trust aberto e roles com privilégio demais.
Aberto para design partners. As campanhas ao vivo são liberadas por conta.
auth signed by an ownerscope staging · 09:00–18:00target GET only · 2 req/s · kill switchcanary s3://customer-exports/canary.txt path SupportBot → read_file → s3://customer-exports 01 direct injection blocked 02 indirect injection inconclusive 03 excessive agency canary hit verdict exploited · proof: canary
Tipos de caminho
As regras que o motor roda hoje e as próximas da fila. Uma regra só reporta uma cadeia que consegue sustentar com evidência.
Agente exposto chega aos dados
Uma function URL pública da Lambda executa um agente cuja tool usa uma role capaz de ler ou escrever em um store sensível. Uma entrada não confiável pode induzir o agente a usar essa tool.
Role aberta a qualquer conta
Uma trust policy permite que qualquer principal da AWS assuma a role. Crítico quando a role é admin ou alcança dados sensíveis; alto nos demais casos.
Store sensível aberto à internet
Um bucket que parece sensível pelo nome ou pela tag permite leitura anônima pela sua policy.
Credencial em texto puro
Uma chave ou token escrito em uma config de MCP, em uma connection string ou no ambiente de uma função, e os componentes que o usam. O valor nunca é armazenado.
Assistente de código com shell
Um servidor MCP no repositório dá ao Claude, Cursor ou VS Code acesso a shell ou ao sistema de arquivos inteiro. O conteúdo que o assistente lê pode direcionar o que ele faz.
Em breve
- Workload público chega aos dados sem agente (API Gateway, Lambda URL ou rota pública até uma role com privilégio demais)
- Credencial vazada seguida até tudo o que ela alcança
- Escalada de privilégio dentro da conta
Um achado que dá para resolver
Severidade, a cadeia completa, o que um atacante alcançaria, a causa, a correção e a evidência. Quando uma condição de policy ou um limite de permissão pode mudar a resposta, o passo é marcado como incerto.
O SupportBot pode ser induzido a ler dados de clientes
Impacto
Leitura de s3://customer-exports (com as tags pii e customer-data) a partir de uma function URL pública.
Causa
A role support-bot permite s3:GetObject em *; a tool read_file aceita qualquer caminho de arquivo.
Correção
Restringir a policy a tickets/* e limitar a tool a um diretório.
Evidência
O que não fazemos
O Basalt se concentra em caminhos com evidência. Para o resto, mantenha as ferramentas que você já tem.
- CVEs de dependências e scan de imagens de container: use Dependabot, Trivy ou o scanner que você já usa.
- Centenas de regras de checklist: uma configuração errada só aparece quando faz parte de um caminho real.
- Escrita na sua conta de cloud: as correções chegam como mudanças de código que você revisa.
- Testes sem permissão: scan e bug watch são estáticos e não enviam tráfego para suas aplicações ou agentes. O red team só roda contra um alvo que um owner autorizou por escrito.
Veja os seus próprios caminhos.
Entre na lista de espera, comece pela Auditoria Essencial ou fale com a gente se já há uma revisão de segurança marcada.