A segurança dos apps vibe-coded em 2026
Procuramos apps no ar feitos com Lovable, Bolt, v0, Replit ou Base44 e passamos cada um pelas mesmas nove verificações que qualquer pessoa pode rodar de graça pela página inicial do Reeve. Esta página é o que voltou.
Seu app pode estar nesta amostra. Aqui ele não é citado, então o único jeito de ver onde ele está é rodar as mesmas nove verificações nele
Só a visão de fora. Lemos o que o navegador de quem visita já lê: o código que o app entrega, os cabeçalhos que ele devolve, os endereços que ele mesmo cita no próprio código. Sem login, sem adivinhar senha, sem baixar nada. Método ↓
Nenhum app é citado aqui nem no arquivo de dados. Cada número vem com o método que o produziu, e o arquivo no fim traz todos os agregados numa tabela só, se você quiser conferir a conta.
Todos os apps, com nota
452 apps, cerca de um em cada 69, estão em D ou FSeis números que contam a história
Estes seis números são o relatório. Tudo o que vem depois deles é a base sobre a qual cada um se apoia, e como chegamos até ela.
- Cabeçalhos de segurança1/699%
dos 30.998 apps que verificamos tinham pelo menos um achado. A maioria era moderada, e em quase todos faltam cabeçalhos de segurança do navegador.
- Acesso ao banco de dados2/657%
dos apps com Supabase que conseguimos alcançar deixavam um estranho ler pelo menos uma tabela sem fazer login: 2.096 de 3.680.
- Acesso ao banco de dados3/6394
apps tinham uma tabela legível cujo nome parece de dados pessoais: users, profiles, orders. Uma requisição, sem senha.
- Segredos expostos4/61em cada23
apps entregam uma chave secreta no código público: 1.332 no total. Só 3 entregaram a chave mestra do banco de dados, bem mais raro do que o pânico sugere.
- Source maps5/613%
publicam source maps: o código original do app, legível nas ferramentas de desenvolvedor de qualquer navegador. São 3.885 apps.
- Distribuição de notas6/676%
ganham nota A. O básico costuma se sustentar, e as falhas sérias se concentram em um só lugar: o banco de dados.
Os padrões de fábrica das plataformas falham em quase todo lugar, e a maioria dessas falhas é moderada. O que só quem construiu o app pode mudar falha bem menos, e é isso que põe o dado de outra gente na internet aberta.
Que nota esses apps tiram, de A a F
O Reeve dá nota a um app como um boletim escolar. Os descontos saem de cem e são ponderados pela gravidade. Depois, o achado mais grave impõe um teto: com um achado crítico o app não passa de D, e com um achado alto não passa de C.
Como se saem todos os apps que conseguimos classificar
São 452 apps com uma brecha por onde um estranho pode entrar hoje.
A maioria dos apps cai em A ou B. A faixa de D e F é pequena. São os apps em que um estranho já consegue ler as linhas de outra pessoa.
O que verificamos, e quantos apps falharam em cada
Cada verificação faz uma pergunta sobre o app visto de fora, e cada uma é contada sobre os apps em que obteve resposta. Um app que a verificação não conseguiu alcançar fica fora da base daquela verificação, em vez de entrar como limpo. Sobre esses o scan diz que não conseguiu verificar, e esta página faz o mesmo.
Deslize para o lado para ver a proporção e o pior caso.
| Verificação | Apps | De | Proporção | Pior caso visto |
|---|---|---|---|---|
| Cabeçalhos de segurançaProteções do navegador que a plataforma de hospedagem deveria enviar | 30.756 | 30.981 | 99% | até Médio |
| Compartilhamento entre sitesA API do app responde a qualquer site que pergunte | 6.867 | 30.926 | 22% | até Alto |
| Source mapsO código original publicado ao lado do app | 3.885 | 30.987 | 13% | até Médio |
| Acesso ao banco de dadosTabelas do banco legíveis sem fazer login | 2.096 | 26.249 | 8% | até Crítico |
| Segredos expostosChaves que pertencem a um servidor, entregues aos navegadores | 1.332 | 30.998 | 4% | até Crítico |
| Buckets de armazenamentoArmazenamento de arquivos que qualquer um pode listar | 792 | 27.269 | 3% | até Alto |
| Renovação do domínioRegistro prestes a vencer, ou já vencido | 55 | 30.980 | <1% | até Alto |
| Certificado SSLCertificado vencido, vencendo ou não confiável | 32 | 30.851 | <1% | até Alto |
| Arquivos privadosArquivos de configuração e dumps deixados em caminhos públicos | 8 | 30.749 | <1% | até Crítico |
Cada proporção é sobre os apps que aquela verificação conseguiu responder. O ponto é a pior versão do problema que vimos na linha, não a típica.
Duas linhas parecem mais assustadoras do que são. Cabeçalhos de segurança são instruções que a plataforma de hospedagem manda para o navegador, e um deles faltando deixa um tipo de ataque com um obstáculo a menos pela frente. Um source map publicado é o código original do app parado ao lado da versão compilada: mostra a um invasor onde procurar, e por si só não entrega nada.
Uma linha também pode parecer grave porque um punhado de apps dentro dela entregou algo sério enquanto o resto entregou algo comum. O arquivo de dados abre cada linha por tipo de chave, para dar para ver qual é qual.
Mais da metade dos apps com Supabase que dá para verificar vazam dados de tabela
É o número ao qual voltamos o tempo todo.
Um projeto Supabase é aberto para a internet por definição. O app que roda no navegador conversa direto com o banco de dados, usando uma chave que deve mesmo ser pública, e o que fica entre um estranho e as linhas é o Row Level Security: uma regra em cada tabela. Desligue essa regra, ou escreva uma política que deixa todo mundo entrar, e qualquer tabela do projeto pode ser lida com uma requisição e sem senha.
57% 2.096 de 3.680
8.429 apps desta varredura citam um projeto Supabase. Nossa verificação conseguiu resposta de 3.680 deles; o restante fica atrás de backends que não sondamos, então não dizemos nada sobre eles. Desses 3.680, 2.096 tinham pelo menos uma tabela que um estranho consegue ler com uma única requisição e sem senha.
Menos da metade dos apps que citam um projeto Supabase dá para verificar. Alguns mandam o tráfego do banco pelo próprio backend, onde uma verificação de fora não consegue ir atrás, então sobre esses não dizemos nada. A proporção acima é sobre os apps que responderam.
1.702 apps expõem tabelas com nomes genéricos ou técnicos: settings, content, logs.
394 apps expõem tabelas com nomes de dados pessoais: users, profiles, orders, messages.
A divisão é a parte útil. Uma tabela legível chamada settings ou content é um erro. Uma tabela legível chamada users, profiles ou orders é dado pessoal de outra gente na internet aberta, e quem construiu o app quase certamente acha que aquilo é privado.
A verificação nunca lê uma linha. Ela pergunta ao banco quantas linhas ficariam visíveis e lê a contagem de volta num cabeçalho da resposta. Isso basta para distinguir uma tabela com regra de RLS de uma tabela sem regra, e a verificação não vai além disso.
As mesmas nove verificações, ferramenta por ferramenta
Cada app está agrupado pela ferramenta com que foi publicado, e medido contra os outros apps daquela ferramenta.
Deslize para o lado para ver as duas colunas do Supabase.
| Ferramenta | Apps | Com achados | Notas D–F | Usam Supabase | Banco legível |
|---|---|---|---|---|---|
| Lovable | 18.554 | 99% | 2% 407 apps | 35% | 57%de 3.553 |
| Base44 | 5.438 | 100% | <1% 2 apps | 27% | apps verificáveis de menos para publicar uma proporção |
| Replit | 3.042 | 99% | <1% 9 apps | 1% | apps verificáveis de menos para publicar uma proporção |
| v0 | 1.790 | 100% | 0% 0 apps | 1% | apps verificáveis de menos para publicar uma proporção |
| Bolt | 1.123 | 100% | 1% 15 apps | 24% | 77%de 35 |
A última coluna é a proporção dos apps com Supabase daquela ferramenta em que nossa verificação obteve resposta, com essa base ao lado. Um traço significa que havia apps verificáveis de menos para publicar uma proporção. Trate como uma lacuna nos nossos dados, e não tire conclusões sobre o quanto esses apps são seguros.
A linha marcada leva o tráfego do seu banco pelo backend da própria ferramenta, onde uma verificação de fora não consegue ir atrás. Esses apps ficam sem medição aqui.
Apps em domínio próprio não podem ser ligados a uma ferramenta de fora e ficam fora desta tabela.
Quase tudo o que esta tabela compara são padrões de fábrica. Ninguém escolhe Lovable ou Bolt pelos cabeçalhos de segurança. Quem os define para todo app que hospeda é a plataforma, então uma mudança ali mexe numa coluna inteira desta tabela.
Dois limites antes de alguém citar uma linha. Atribuímos os apps pelo domínio de publicação, então um app que mudou para domínio próprio fica inteiramente de fora desta tabela, e esses costumam ser os mais acabados. E uma ferramenta que leva o tráfego do banco pelo próprio backend não pode ser verificada de fora de jeito nenhum. Um espaço em branco ali quer dizer que não conseguimos medir, e não diz nada sobre o quanto esses apps são seguros.
Dois tipos de achado, dois tipos de conserto
Os achados desta página caem em dois grupos, e os dois precisam de mãos diferentes.
O que a plataforma controla
até AltoQuando quase todo app hospedado no mesmo lugar está sem o mesmo cabeçalho, não são dezenas de milhares de pessoas cometendo o mesmo erro. Isso vem junto com a hospedagem, e uma única mudança da plataforma resolveria todos.
- Cabeçalhos de segurança99%
- Source maps13%
- Renovação do domínio<1%
- Certificado SSL<1%
O que só você controla
até CríticoNenhuma plataforma de hospedagem tem como saber quais das suas tabelas devem ser públicas, nem qual chave pertence a um servidor. Todo achado crítico deste relatório está deste lado.
- Compartilhamento entre sites22%
- Acesso ao banco de dados8%
- Segredos expostos4%
- Buckets de armazenamento3%
- Arquivos privados<1%
O primeiro grupo é uma decisão de produto dentro de uma empresa. Uma única mudança num padrão de fábrica da hospedagem move todos os apps daquela plataforma de uma vez, e é por isso que essas linhas saem tão parelhas e são as mais baratas de consertar.
O segundo grupo está com quem construiu o app. Nenhuma plataforma de hospedagem tem como saber quais das suas tabelas devem ser públicas, nem qual chave pertence a um servidor. Todo achado crítico deste relatório está nesse grupo. Os guias de segurança por ferramenta e o checklist de lançamento começam os dois por ali.
O que os vibe-coders acertam
Contamos também o que passou, sobre os mesmos apps.
96%não entregam nenhum segredo no código público.
97%do armazenamento que pudemos verificar está fechado para fora.
99%servem um certificado válido.
Uma chave publicável no frontend é para estar ali. Marcamos essas como OK e explicamos por quê.
O último card é o que os scanners genéricos erram. Uma chave publicável no frontend (uma chave anon do Supabase, uma chave publicável do Stripe) é para estar ali: ela foi feita para ser lida, e a proteção está nas regras atrás dela. Apontar isso como problema manda alguém mudar um ajuste que já estava certo.
Como medimos, e onde estão os limites
De onde vieram os apps
Três listas, unidas e sem repetição: apps que as pessoas postaram no X e no Reddit, apps lançados no Show HN e apps que enumeramos a partir dos domínios de publicação das próprias ferramentas. Os domínios de publicação são o grosso da amostra e a única lista que escala. As outras duas só encontram um app sobre o qual alguém resolveu postar.
Os hosts mortos saíram primeiro, e julgamos isso lendo a própria página. Um deploy apagado muitas vezes ainda responde com um 200 OK perfeitamente alegre.
A regra do denominador
Toda proporção desta página é sobre os apps que aquela verificação conseguiu responder, e nunca sobre a amostra inteira. Uma verificação que não conseguiu alcançar um app deixa esse app fora da própria base, e nunca o conta como limpo. Os dois números ao lado de cada barra são essa base, para qualquer um ver qual está lendo.
56 apps devolveram pouco demais para serem classificados de um jeito ou de outro. Eles ficam fora de todos os números desta página em vez de serem contados como limpos.
As notas são contadas sobre um número menor pelo mesmo motivo. Um app que devolveu pouco demais para ser classificado sai de todos os números acima, em vez de receber nota no chute.
O que fizemos, e o que não fizemos
- Só leituras passivas: as requisições que o navegador de um visitante já faz, mais os endereços públicos que o próprio app aponta.
- A verificação do banco pega uma contagem de linhas num cabeçalho da resposta. Nunca lemos uma linha, nunca baixamos um arquivo, nunca fizemos login e nunca adivinhamos uma senha.
- Nenhum app é citado, aqui ou no arquivo de dados. Uma lista de apps emparelhada com as fraquezas de cada um é uma lista de alvos, e não guardamos isso em forma publicável.
Limites que vale conhecer
- A amostra pende para apps mais novos. Um app que mudou para domínio próprio não pode ser ligado a uma ferramenta de fora, e esses costumam ser os mais estabelecidos.
- A cor de uma linha marca o pior caso que vimos, que pode ser um app entre centenas. O arquivo de dados abre cada linha por tipo exato de chave.
- Esta é uma janela de três dias de agosto. Um app consertado na semana seguinte continua contando aqui como estava no dia em que olhamos.
- Uma verificação externa automatizada não é uma auditoria. A ausência de achados não é garantia.
Use estes números
Jornalistas, pesquisadores e quem estiver escrevendo sobre o assunto podem reutilizar os dados dando o crédito. O arquivo abaixo traz todos os agregados desta página numa tabela só, e não nomeia nenhum app.
Reeve. The State of Vibe-Coded App Security 2026. 30.998 apps no ar verificados 12 de agosto de 2026 – 14 de agosto de 2026. reeve.page/research/vibe-coded-app-security-2026
Dados sob licença CC BY 4.0: reutilize à vontade e credite a Reeve com um link. O arquivo traz todos os agregados desta página e não nomeia nenhum app.
Perguntas
Vocês podem dizer quais apps tinham quais problemas?
Não. Só contagens e proporções, nunca nomes, e o arquivo de dados traz exatamente o que a página mostra. Uma lista de apps emparelhada com as fraquezas de cada um é uma lista de alvos, e não vamos produzir isso.
Meu app pode estar nesses dados. O que eu faço?
Escaneie você mesmo. São as mesmas nove verificações, levam uns vinte segundos e devolvem a sua nota junto com o que um estranho já consegue ver. Nada nesta página identifica ninguém, então esse é o único jeito de saber onde você está.
Uma tabela do banco que qualquer um lê é tão grave assim?
Se qualquer pessoa na internet consegue puxar aquelas linhas com uma requisição e sem senha, é. Uma tabela legível chamada settings é desleixo. Uma tabela legível chamada users ou orders é um vazamento de dados que ninguém percebeu ainda.
Por que vocês consideram as chaves publicáveis algo normal?
A chave anon do Supabase foi feita para ser pública. A proteção são as regras do banco de dados atrás dela, não a chave em si. Ferramentas que apontam essas chaves ensinam a pessoa a passar batido pelo próximo aviso, que pode ser o que importa.
Vocês vão rodar isso de novo?
Vamos. As varreduras continuam rodando e a próxima edição vem delas. O arquivo de dados registra a janela de onde vieram estes números, então uma cópia antiga não passa por atual.
Onde o seu app se encaixa?
As mesmas nove verificações, no seu app, grátis. Uma nota e um relatório em linguagem simples em cerca de 20 segundos.
Nota · Pontuação 72/100