Introdução: Quando foi a última vez que analisou a segurança da sua aplicação web além de apenas fazer com que ela funcionasse? Aqui está a verdade assustadora: cada campo de formulário, ponto final da API, script de terceiros e ficheiro de configuração na sua aplicação pode ser um vetor de ataque se não for verificado. Os aplicativos web modernos estão mais ricos e complexos do que nunca, e isso significa uma área de exposição cada vez maior para os invasores. Na verdade, dados recentes mostram que os aplicativos web estão envolvidos em quase metade dos incidentes de segurança. Dos famosos Top 10 OWASP às CVEs recém-descobertas, as vulnerabilidades da web não são uma teoria abstrata: elas estão por trás de violações reais que acontecem em organizações de todos os tamanhos.
O objetivo deste artigo é destacar as vulnerabilidades mais críticas das aplicações web, tanto do ponto de vista do front-end como do back-end. Abordaremos as mais conhecidas Top 10 OWASP , além de exploits de alto perfil (como Log4Shell e outros) e erros comuns de codificação que os programadores cometem em projetos reais. Para cada vulnerabilidade, explicaremos o que é, daremos um exemplo real ou incidente e descreveremos como mitigá-la. Você também verá – destacando como segurança voltada para o desenvolvedor Aikido(com recursos como verificação de código, secrets , SAST e varredura IaC) pode ajudar a detectar ou prevenir esses problemas antes que eles afetem a produção.
A lista:
1. Ataques de injeção (SQL, comando, LDAP)
2. cross-site scripting
3. autenticação quebrada
4. controle de acesso quebrado
5. Configurações de segurança incorretas
6. exposição de dados sensíveis Secrets
7. Utilização de componentes com vulnerabilidades conhecidas
8. Falsificação de solicitação entre sites (CSRF)9. Falsificação de solicitação do lado do servidor (SSRF)
10. Deserialização insegura
O que são vulnerabilidades de aplicações web?
As vulnerabilidades das aplicações web são pontos fracos ou falhas no design, implementação ou configuração de uma aplicação web que os invasores podem explorar para comprometer o sistema. Estas podem variar desde erros de codificação, como falhas de injeção, a configurações incorretas, como deixar uma consola de administração aberta, até problemas lógicos que permitem aos utilizadores contornar as verificações de segurança. Algumas vulnerabilidades permitem que os invasores roubem dados ou assumam o controlo das contas dos utilizadores; outras permitem o comprometimento total do servidor ou a disseminação de malware aos seus utilizadores. Muitos dos bugs «clássicos» são conhecidos há anos (e estão resumidos na Top 10 OWASP ), mas continuam a ser comuns devido à evolução das pilhas tecnológicas e a simples erros humanos.
A seguir, vamos nos aprofundar nas principais vulnerabilidades de segurança de aplicações web que todos os programadores e DevSecOps devem conhecer. Esta não é uma lista exaustiva de todos os bugs existentes, mas sim das questões mais comuns e perigosas que vemos hoje em dia, juntamente com dicas para evitá-las.
As principais vulnerabilidades das aplicações web (front-end e back-end)
As vulnerabilidades a seguir foram extraídas do Top 10 OWASP de explorações recentes no mundo real. Cada uma delas representa um risco grave para aplicações web. Vamos explorá-las uma a uma:
1. Ataques de injeção (SQL, comando, LDAP, etc.)
O que é: falhas de injeção quando dados não confiáveis são enviados a um interpretador como parte de um comando ou consulta. As mais notórias são a injeção de SQL (entrada maliciosa em consultas SQL) e a injeção de comando do sistema operativo (entrada maliciosa executada no servidor). Quando uma aplicação inclui diretamente entradas do utilizador em consultas de base de dados, comandos shell, consultas LDAP ou filtros ORM sem a devida validação, os atacantes podem “injetar” os seus próprios comandos. Isso pode levar ao roubo de dados, corrupção de dados ou controle total do host. De acordo com a OWASP, a injeção é um risco de alto nível e agora inclui até mesmo o cross-site scripting na sua classificação.
Exemplo: Um exemplo notável é a violação do MOVEit Transfer em 2023. Os atacantes exploraram uma injeção SQL zero-day (CVE-2023-34362) na aplicação web de partilha de ficheiros MOVEit, permitindo-lhes executar código remoto no servidor. O grupo de ransomware Clop usou essa falha para roubar dados de centenas de organizações, demonstrando como um único bug de injeção pode se transformar em uma violação massiva. Esse incidente mostrou que o SQLi não é apenas um problema «antiquado» — ele ainda está muito vivo e pode ser catastrófico.
Impacto: ataques de injeção bem-sucedidos podem ser devastadores. Uma injeção SQL pode revelar senhas de utilizadores, registos pessoais ou dados comerciais. A injeção de comandos do sistema operativo pode dar a um invasor um shell no seu servidor, levando ao comprometimento total da infraestrutura. Em resumo, as vulnerabilidades de injeção geralmente levam a graves perdas de dados, comprometimento de contas ou execução remota de código, tornando-as as favoritas entre os invasores.
Prevenção: O segredo é nunca misturar entradas não confiáveis diretamente com comandos. Use consultas parametrizadas ou instruções preparadas para acesso ao banco de dados (para que o interpretador SQL nunca confunda entradas com código). Para comandos do sistema operacional, evite criar cadeias de comandos; use APIs seguras ou coloque os valores esperados na lista de permissões. A validação de entradas e a codificação de saídas também são camadas defensivas importantes. SAST análise estática de código) com tecnologia de IAAikidopode ajudar a detectar padrões de injeção perigosos no seu código antes da implementação. Por exemplo, a verificação de código Aikidosinalizará ocorrências em que as entradas do utilizador são concatenadas em instruções SQL ou passadas para chamadas do sistema sem sanitização. Ao integrar esses scanners no seu CI/CD ou IDE, pode detetar e corrigir automaticamente falhas de injeção. Com Aikido, poderia ter detetado essa consulta SQL vulnerável muito antes dos atacantes!
2. cross-site scripting
O que é: Cross-Site Scripting é um tipo de injeção que tem como alvo os navegadores dos utilizadores. Uma vulnerabilidade XSS permite que um invasor injete scripts maliciosos do lado do cliente (geralmente JavaScript) em páginas da web visualizadas por outros utilizadores. Ao contrário do SQLi, que tem como alvo a sua base de dados, o XSS permite que um invasor manipule o conteúdo visto pelos utilizadores – potencialmente roubando tokens de sessão, desfigurando a interface do utilizador ou entregando malware. O XSS vem em variantes como XSS refletido (o script malicioso vem de uma solicitação e é refletido na resposta), XSS armazenado (o script é armazenado no servidor, por exemplo, num campo de comentário do banco de dados, e servido a todos os visualizadores) e XSS baseado em DOM (a vulnerabilidade está no código do lado do cliente que modifica a página).
Exemplo: Um dos incidentes XSS mais famosos foi a violação da British Airways em 2018. O grupo de hackers Magecart injetou um script malicioso numa biblioteca JS de terceiros (Feedify) usada no site da BA. Esse script roubava detalhes de cartões de crédito da página de pagamento, enviando os dados para um servidor controlado pelos invasores. Os invasores conseguiram roubar informações pessoais e de cartões de crédito de cerca de 380.000 transações antes que a violação fosse descoberta. Essencialmente, uma vulnerabilidade XSS num componente da cadeia de abastecimento levou a um roubo massivo de dados – e a multas dispendiosas para a BA. Outros exemplos reais de XSS incluem um bug na página web do Fortnite que poderia ter exposto milhões de contas e um XSS no site do eBay que os atacantes exploraram para sequestrar contas de vendedores de alto valor.
Impacto: O XSS compromete principalmente os utilizadores, mas pode afetar indiretamente a segurança da sua aplicação (e definitivamente a sua reputação). Os invasores podem roubar cookies de sessão (para se passar por utilizadores), realizar ações como a vítima (como transferências de fundos ou alterações de senha, se não houver proteções CSRF) ou exibir formulários de phishing para enganar os utilizadores. Se a sessão de um utilizador administrador for sequestrada por meio de XSS, o invasor pode obter controle total do aplicativo. Mesmo sites não confidenciais devem se preocupar com XSS – ninguém quer que seu site exiba solicitações de login falsas ou redirecione utilizadores para kits de exploração.
Prevenção: A defesa contra XSS envolve codificação de saída e políticas de segurança de conteúdo. Sempre que a sua aplicação exibir dados fornecidos pelo utilizador numa página web, ela deve escape adequadamente esses dados para o contexto (HTML, JavaScript, CSS, etc.) para que não possam ser interpretados como código. A maioria das estruturas web possui bibliotecas de modelos ou codificação – use-as de forma consistente (evite criar HTML a partir de strings brutas). Implemente uma Política de Segurança de Conteúdo (CSP) forte para limitar quais scripts podem ser executados nas suas páginas (embora a CSP seja uma segunda linha de defesa). A verificação de código Aikidopode detectar áreas onde a entrada do utilizador é inserida na página sem a devida sanitização. Por exemplo, se você usar inadvertidamente innerHTML ou concatenação de strings para injetar dados do utilizador no DOM, o analisador estático Aikidoirá sinalizá-lo. Aikido também Aikido identificar sinalizadores HTTP-only ou cabeçalhos de Política de Segurança de Conteúdo ausentes através da sua verificação de configuração. Ao detectar esses problemas antecipadamente, evita o próximo ataque do tipo Magecart aos seus utilizadores. (Bónus: a base de conhecimento integrada de vulnerabilidades Aikidopode até sugerir práticas de codificação seguras, como usar conteúdo do texto sobre innerHTML para evitar DOM XSS.)
3. autenticação quebrada
O que é: autenticação quebrada refere-se a fraquezas na forma como um site lida com o login e a gestão de sessões – coisas como credenciais de utilizador, IDs de sessão, redefinição de senha e recuperação de conta. Se os invasores conseguirem comprometer facilmente senhas, chaves ou tokens de sessão devido a uma implementação deficiente, isso é considerado autenticação quebrada. As armadilhas comuns incluem políticas de senha fracas (ou nenhuma rate limiting login, permitindo força bruta), falha em armazenar senhas com segurança (por exemplo, armazenamento de texto simples ou hashes sem sal), uso de IDs de sessão previsíveis ou inseguras, não invalidação de sessões ao sair e lógica defeituosa de "lembrar-me" ou redefinição de senha. Qualquer falha que permita a um invasor fingir ser outra pessoa (adivinhando ou roubando credenciais/sessão) ou fazer login sem as credenciais adequadas se enquadra nesta categoria. De acordo com a OWASP, essas falhas de autenticação podem levar à invasão de contas e violações significativas de dados.
Exemplo: Não é preciso ir muito longe para encontrar exemplos – uma grande parte das violações decorre do comprometimento de credenciais. Na verdade, 81% das violações relacionadas a hacking em 2022 foram causadas por senhas fracas ou roubadas. Um incidente específico: no início de 2023, a Uber divulgou que a conta de um contratado foi comprometida porque ele reutilizou uma senha encontrada numa violação anterior. Os invasores entraram nos sistemas internos da Uber usando essa conta – essencialmente uma falha de autenticação (reutilização de senha e falta de MFA). Outro exemplo: uma violação em 2024 numa empresa de serviços financeiros, onde a ausência de autenticação multifator (MFA) permitiu que os atacantes usassem senhas vazadas para acessar contas, afetando milhões (isso foi observado no contexto do incidente com os dados de clientes da Snowflake – embora a plataforma da Snowflake não tenha sido diretamente hackeada, a autenticação fraca do lado do usuário levou à violação). Esses casos mostram que, mesmo que o código do seu aplicativo seja sólido, práticas de autenticação fracas (por parte dos utilizadores ou desenvolvedores) podem abrir as portas.
Impacto: autenticação quebrada levar ao comprometimento total da conta de qualquer utilizador no sistema – desde clientes regulares até administradores. Se um invasor obtiver as credenciais do utilizador (por meio de força bruta, preenchimento de credenciais usando senhas vazadas ou explorando uma falha na sua lógica de autenticação), ele poderá se passar por esse utilizador e acessar todos os seus dados. Particularmente grave é se contas de administrador ou privilegiadas forem comprometidas – o invasor poderia roubar todos os dados, alterar configurações ou avançar ainda mais para redes internas. Mesmo em menor escala, contas de utilizador comprometidas podem resultar em fraude, violações de privacidade e perda de confiança do utilizador.
Prevenção: Defesas robustas de autenticação são essenciais. Imponha requisitos de senhas fortes e use hash (com um algoritmo forte como bcrypt ou Argon2) além de salting para senhas armazenadas – nunca armazene senhas brutas. Implemente autenticação multifatorial para contas ou ações confidenciais; a MFA pode impedir muitos ataques baseados em senhas. Use gerenciamento de sessão seguro: torne os IDs de sessão aleatórios e impossíveis de adivinhar, defina-os para expirar e invalide as sessões ao sair. Evite expor IDs de sessão em URLs (use cookies com sinalizadores Secure e HttpOnly). Implemente proteção contra força bruta (bloqueios ou CAPTCHAs após várias tentativas de login malsucedidas) e monitore o preenchimento de credenciais.
A plataformaAikidopode ajudar a detetar fraquezas comuns de autenticação no seu código e configuração. Por exemplo, o scanner Aikidoirá avisá-lo se estiver a utilizar um método fraco de hash de senhas (ou pior, armazenando senhas em texto simples). Ele também pode detectar se os cookies de sessão não estão marcados como Secure/HttpOnly ou se as configurações de segurança da sua estrutura web (como Django ou Express) estão mal configuradas para o gerenciamento de sessões. Além disso, secrets Aikidopode alertá-lo se você acidentalmente codificar uma chave API ou senha de conta de serviço no seu código (impedindo secrets esses secrets se tornem um login backdoor para um invasor). Ao detectar esses problemas antecipadamente, você aplica um esquema de autenticação mais forte desde o início.
4. controle de acesso quebrado Falhas de autorização e IDOR)
O que é: controle de acesso quebrado atualmente o risco mais crítico para aplicações web, de acordo com a OWASP. Refere-se a falhas na aplicação de autorização – ou seja, as regras sobre o que os utilizadores autenticados têm permissão para fazer. Mesmo que um utilizador seja quem diz ser (autenticação bem-sucedida), a aplicação deve restringi-lo apenas aos dados e funções permitidos. Falhas comuns no controlo de acesso incluem não verificar as funções/permissões do utilizador em determinadas ações, confiar na aplicação do lado do cliente (que os invasores podem contornar) ou expor referências a objetos internos sem verificar a propriedade. Uma variante extremamente comum é IDOR (Referência Direta a Objeto Inseguro), em que uma aplicação utiliza IDs fornecidos pelo utilizador (como números de conta, IDs de documentos, etc.) para obter dados sem confirmando que o utilizador atual tem permissão para aceder ao objeto especificado. Por exemplo, se OBTER /api/pedidos/12345 retorna o pedido nº 12345 para qualquer utilizador que o acesse, um invasor poderia simplesmente alterar o ID para 12346 e recuperar o pedido de outro utilizador – um cenário clássico de IDOR. Outros exemplos incluem verificações de acesso ausentes em pontos finais administrativos «ocultos» ou bugs de escalonamento de privilégios, nos quais um utilizador comum pode se tornar um administrador ajustando um parâmetro ou token JWT.
Exemplo: A prevalência de controle de acesso quebrado impressionante – um estudo descobriu que 94% das aplicações testadas apresentavam algum tipo de falha no controlo de acesso. Quanto a incidentes reais, considere a vulnerabilidade da API da Kia Motors (2024): os investigadores descobriram que, fornecendo apenas o número de identificação do veículo (VIN) ou o número da matrícula, era possível aceder a determinados pontos finais da API da Kia/Hyundai e executar remotamente comandos do veículo (como destrancar as portas), sem qualquer token de autenticação. Esta falha crítica resumia-se a uma falha de controlo de acesso numa API – o sistema não garantia que a solicitação provinha de um proprietário autorizado. Outro exemplo é a violação do MOVEit que mencionámos anteriormente: embora fosse principalmente uma questão de SQLi, verificou-se que a falta de autenticação no ponto final vulnerável permitia aos atacantes explorá-lo diretamente. Também vemos regularmente bugs IDOR em aplicações web onde um utilizador pode visualizar ou modificar os dados de outro: por exemplo, uma vulnerabilidade de 2021 na API de uma popular plataforma de rede social permitiu que os invasores enumerassem IDs de perfis de utilizadores para obter informações privadas que deveriam ter sido restritas. Em resumo, controles de acesso quebrados geralmente levam à escalação vertical de privilégios (o utilizador se torna administrador) ou escalação horizontal (o utilizador A pode agir como o utilizador B).
Impacto: Quando o controlo de acesso falha, as consequências variam desde fugas de dados até à tomada de controlo total do sistema. Um invasor pode ler dados confidenciais de outros utilizadores (violando a confidencialidade) ou modificar dados que não deveria (violando a integridade). Em casos graves, controle de acesso quebrado permitir que uma parte externa obtenha privilégios de administrador, o que significa o fim do jogo para a aplicação. Por exemplo, um IDOR em um site de comércio eletrônico pode permitir que alguém veja os pedidos ou informações pessoais de outros clientes; uma verificação de administrador ausente pode permitir que um usuário comum acesse um /admin/deleteUser ponto final e apagar dados. Essas falhas levam diretamente a violações de confidencialidade e, muitas vezes, são muito fáceis de serem exploradas pelos invasores, uma vez descobertas (não são necessárias cargas sofisticadas – basta uma URL ou parâmetro alterado).
Prevenção: O mantra aqui é “negar por padrão. Todas as solicitações que acessam uma operação confidencial ou um registro de dados devem estar sujeitas a verificações de controlo de acesso do lado do servidor. Use estruturas ou middleware que centralizem a aplicação de funções/permissões. Por exemplo, se você tiver funções de utilizador, certifique-se de que todas as funções administrativas verifiquem a função do utilizador no servidor (nunca confie apenas em verificações do lado do cliente, como ocultar botões administrativos na interface do utilizador). Para acesso ao nível do objeto (como visualizar ou editar um recurso por ID), implemente verificações de propriedade – por exemplo, confirme que o ID da encomenda solicitado pertence ao utilizador autenticado que fez a solicitação. Testes automatizados podem ajudar a verificar se o acesso não autorizado está sendo bloqueado corretamente.
Aikido detetar controle de acesso quebrado várias maneiras. Primeiro, pentest autônomo Aikido pentest autônomo Aikido ) pode sondar dinamicamente a sua aplicação em execução em busca dessas falhas – por exemplo, ele pode simular um invasor com uma conta de utilizador normal tentando aceder a APIs administrativas ou dados de outros utilizadores, e irá relatar qualquer violação de privilégios bem-sucedida. No lado do código, a análise estática Aikidopode identificar rotas ou controladores com verificações de autenticação em falta (especialmente em frameworks onde as rotas devem ser anotadas com funções). Se a sua base de código usa infraestrutura como código ou configuração para políticas de acesso (por exemplo, regras de gateway de API ou IAM na nuvem), os scanners Aikidotambém podem avaliá-las. Ao usar Aikido testar continuamente a lógica de autorização, você detecta esses erros do tipo “ops, esqueci de aplicar o login nesse endpoint” antes que os invasores o façam. Lembre-se sempre: exceto para recursos verdadeiramente públicos, tudo deve exigir autorização adequada – Aikido ajudar a verificar se você está a cumprir esse princípio.
5. Configurações de segurança incorretas
O que é: Mesmo uma aplicação perfeitamente codificada pode ser prejudicada por uma configuração insegura. configuração de segurança incorreta é uma categoria ampla que abrange qualquer configuração ou definição insegura na infraestrutura ou na pilha de aplicações. Isso inclui coisas como: deixar credenciais padrão ativas nos servidores (por exemplo, admin/admin), usar ficheiros de configuração ou secrets padrão, deixar pontos finais sensíveis (como painéis de administração de bases de dados ou painéis de controlo na nuvem) acessíveis ao público, não desativar listagens de diretórios num servidor web, ter cabeçalhos HTTP mal configurados (por exemplo, cabeçalhos de segurança ausentes) ou esquecer de definir permissões adequadas no armazenamento na nuvem. As configurações incorretas geralmente surgem de configurações de desenvolvimento/teste que não são reforçadas para produção ou simplesmente de erros humanos na implementação. Em ambientes de nuvem, uma configuração incorreta clássica é deixar um bucket S3 ou armazenamento de blobs do Azure publicamente legível quando contém dados privados. Essencialmente, é quando o seu sistema está a dizer «Bem-vindos, invasores, a porta está aberta!» devido a um descuido nas configurações.
Exemplo: Infelizmente, configurações incorretas causam muitas violações reais. Um caso impressionante de 2024: 1,3 milhões de registos de pacientes ficaram expostos num servidor público durante duas semanas devido a uma simples configuração incorreta do servidor. Não foi necessária nenhuma exploração – os dados foram essencialmente publicados para o mundo devido a um descuido. Outro exemplo: um incidente na Prudential Financial (2024), onde uma única configuração incorreta num sistema de controlo de acesso permitiu que invasores acessassem discretamente 2,5 milhões de registos de clientes. E quem pode esquecer a violação da Capital One (2019) – embora tenha envolvido SSRF como mecanismo de ataque, a causa principal foi uma firewall de aplicação web mal configurada firewall de aplicação ambiente AWS, que permitiu que o invasor acessasse recursos internos. No caso da Capital One, um bucket de armazenamento AWS S3 com dados confidenciais ficou acessível assim que a configuração incorreta do WAF foi explorada, levando ao roubo de mais de 100 milhões de registos de clientes. Esses exemplos ressaltam que, muitas vezes, pequenos erros de configuração (como uma porta aberta, uma credencial esquecida ou um controle de segurança desativado) podem ter consequências enormes.
Impacto: O impacto varia dependendo do que foi mal configurado. Na extremidade inferior, uma configuração incorreta pode "apenas" vazar algumas informações não críticas (por exemplo, uma página de erro detalhada revelando versões de software – útil para invasores, mas não uma violação por si só). No extremo, uma configuração incorreta pode levar diretamente a um comprometimento total: uma interface administrativa aberta pode permitir que invasores façam login (especialmente se as credenciais padrão não foram alteradas), um bucket de armazenamento em nuvem aberto pode expor milhões de registos ou uma configuração de segurança desativada pode permitir explorações triviais. As configurações incorretas estão entre as principais causas de violações de dados em serviços em nuvem. Elas também são facilmente detectadas por invasores – existem motores de busca e bots que procuram continuamente por coisas como painéis abertos do Elasticsearch/Kibana, portas de banco de dados expostas ou buckets públicos. Em resumo, as configurações incorretas podem transformar seu aplicativo seguro em um “parque de diversões para hackers” se você não tomar cuidado.
Prevenção: diligência e automação são fundamentais. Altere sempre as palavras-passe e chaves padrão (nada deve funcionar com "admin/admin" ou padrões semelhantes). Fortaleça as configurações do seu servidor e estrutura: por exemplo, desative os modos de depuração e aplicativos de amostra em produção, certifique-se de que a navegação no diretório esteja desativada e aplique os cabeçalhos de segurança recomendados (Content Security Policy, X-Frame-Options, etc.). Use o princípio do privilégio mínimo para recursos na nuvem – se um serviço ou bucket não precisar de acesso público, bloqueie-o (e para aqueles que precisam ser públicos, certifique-se de que eles exponham apenas o que é pretendido). Revise regularmente sua infraestrutura como código ou configurações de ambiente em relação aos padrões de segurança.
varredura IaC a auditoria de configuraçãoAikidopodem ser um salva-vidas aqui. Se você usa Terraform, CloudFormation, Kubernetes YAML ou similares, Aikido verificar se há configurações inseguras (como grupos de segurança abertos, buckets S3 públicos ou configurações de criptografia ausentes). Ele também pode verificar se há configurações incorretas no seu ambiente de nuvem em execução. Para servidores web e aplicativos, os scanners Aikidosinalizam cabeçalhos de segurança ausentes ou mensagens de erro excessivamente detalhadas. Além disso, Aikidoproteção em tempo de execução podem monitorizar o uso anormal que pode indicar que alguém está a explorar uma configuração incorreta. A lição a ser aprendida é tornar as verificações de configuração parte do seu pipeline – Aikido automatizar isso, detectando os erros do tipo «ops, deixei esse bucket público» antes da implementação. E fique sempre atento a novos patches e atualizações; às vezes, as configurações incorretas resultam da execução de software desatualizado com fraquezas padrão conhecidas.
6. exposição de dados sensíveis Secrets
O que é: esta categoria abrange falhas na proteção adequada de informações confidenciais, tanto dados do utilizador como chaves secretas.exposição de dados sensíveis(também chamada de falhas criptográficas) significa que uma aplicação não protege adequadamente os dados em trânsito ou em repouso. Exemplos incluem não usar HTTPS para comunicações confidenciais, usar criptografia fraca ou nenhuma criptografia para dados armazenados (como hashes sem sal para senhas ou dados pessoais em texto simples em um backup de banco de dados) ou expor acidentalmente dados por meio de depuração ou logs. Intimamente relacionado está secrets – quando os desenvolvedores inadvertidamente expõem se você não tomar cuidado.
Prevenção: diligência e automação são fundamentais. Sempre altere as palavras-passe e chaves padrão (nada deve ser executado com "admin/admin" ou padrões semelhantes). Fortaleça as configurações do servidor e da estrutura: por exemplo, desative os modos de depuração e os aplicativos de amostra em produção, certifique-se de que a navegação no diretório esteja desativada e aplique os cabeçalhos de segurança recomendados (Content Security Policy, X-Frame-Options, etc.). Use o princípio do privilégio mínimo para recursos na nuvem – se um serviço ou bucket não precisar de acesso público, bloqueie-o (e para aqueles que precisam ser públicos, certifique-se de que eles exponham apenas o que é pretendido). Revise regularmente as configurações da sua infraestrutura como código ou ambiente em relação aos padrões de segurança.
varredura IaC a auditoria de configuraçãoAikidopodem ser um salva-vidas aqui. Se você usa Terraform, CloudFormation, Kubernetes YAML ou similares, Aikido verificar se há configurações inseguras (como grupos de segurança abertos, buckets S3 públicos ou configurações de criptografia ausentes). Ele também pode verificar se há configurações incorretas no seu ambiente de nuvem em execução. Para servidores web e aplicativos, os scanners Aikidosinalizam cabeçalhos de segurança ausentes ou mensagens de erro excessivamente detalhadas. Além disso, Aikidoproteção em tempo de execução podem monitorizar o uso anormal que pode indicar que alguém está a explorar uma configuração incorreta. A lição a ser aprendida é tornar as verificações de configuração parte do seu pipeline – Aikido automatizar isso, detectando os erros do tipo «ops, deixei esse bucket público» antes da implementação. E fique sempre atento a novos patches e atualizações; às vezes, as configurações incorretas resultam da execução de software desatualizado com fraquezas padrão conhecidas.
6. exposição de dados sensíveis Secrets
O que é: esta categoria abrange falhas na proteção adequada de informações confidenciais, tanto dados do utilizador como chaves secretas.exposição de dados sensíveis(também chamada de falhas criptográficas) significa que uma aplicação não protege adequadamente os dados em trânsito ou em repouso. Os exemplos incluem não usar HTTPS para comunicações confidenciais, usar criptografia fraca ou nenhuma criptografia para dados armazenados (como hashes sem sal para senhas ou dados pessoais em texto simples em um backup de banco de dados) ou expor acidentalmente dados por meio de depuração ou logs. Intimamente relacionado está secrets – quando os desenvolvedores inadvertidamente expõem secrets chaves de API, senhas de banco de dados, credenciais ou tokens, seja codificando-os no código, deixando-os em ficheiros de configuração enviados para repositórios ou armazenando-os no código do lado do cliente. Uma quantidade impressionante de secrets vazada por desenvolvedores a cada ano (muitas vezes no GitHub público). Resumindo, se a sua aplicação não encriptar corretamente o que deve ser encriptado, ou se você for descuidado com informações confidenciais e chaves, estará a convidar invasores a obter esses dados sem muito esforço.
Exemplo: Um dos lados desta questão são os dados não encriptados. Um exemplo simples, mas ilustrativo: há muitos anos, os sites às vezes aceitavam credenciais de login por HTTP simples – esses dias já não existem mais, mas mesmo agora ainda ocorrem erros. Em 2023, descobriu-se que uma importante integração de API transmitia dados pessoais de saúde sem a encriptação adequada (devido a uma cadeia de certificados TLS mal configurada), expondo informações privadas na rede. Outro exemplo: se um ficheiro de backup de base de dados for armazenado num bucket de nuvem não seguro (ligado a uma configuração incorreta), todos os dados pessoais nele contidos podem ficar expostos — isso aconteceu com uma companhia aérea em 2022, que vazou centenas de milhares de registos de clientes porque o backup não estava criptografado nem tinha controlo de acesso.
No secrets , o problema é endémico. Só em 2024, os investigadores detetaram quase 23,8 milhões de novos secrets codificados secrets commits públicos do GitHub – um aumento de 25% em relação ao ano anterior. Essa «proliferação de segredos» levou a violações reais. Por exemplo, em 2023, um invasor vazou todo o código-fonte do New York Times de um repositório privado, supostamente explorando credenciais vazadas. Noutro caso, uma empresa de inteligência empresarial (Sisense) teve uma credencial interna vazada num fórum público, que os invasores usaram para acessar dados confidenciais de clientes. Mais perto de casa para os desenvolvedores: quantas vezes já ouvimos falar de uma chave secreta da AWS acidentalmente enviada para o GitHub, apenas para que mineradores de criptomoedas ou piores a usassem em questão de minutos? Esses exemplos mostram que não proteger os dados com criptografia e não manter secrets em segredo pode levar diretamente a violações de dados e acesso não autorizado.
Impacto: Se dados confidenciais do utilizador (informações pessoais, dados financeiros, registos de saúde, etc.) forem expostos, o impacto geralmente é sentido tanto pelos utilizadores (violações de privacidade, risco de roubo de identidade) quanto pela empresa (penalidades regulatórias, danos à reputação). Por exemplo, registos de saúde expostos podem resultar em multas e processos judiciais ao abrigo da HIPAA. Palavras-passe ou números de cartões de crédito expostos conduzem obviamente a fraudes. Entretanto, secrets vazados secrets como chaves API ou tokens) podem ser um bilhete dourado para um invasor: por exemplo, uma palavra-passe de base de dados vazada pode permitir que um invasor se conecte e descarregue toda a sua base de dados; uma chave API da nuvem vazada pode permitir que eles ativem servidores (à sua conta) ou acessem dados confidenciais na nuvem. Uma credencial de administrador vazada pode, às vezes, comprometer um aplicativo inteiro ou até mesmo uma frota de sistemas. Não é surpresa que o Relatório de Custo de Violação de Dados da IBM consistentemente considere as violações envolvendo credenciais comprometidas e dados confidenciais entre as mais caras (tanto em dólares quanto em perda de confiança).
Prevenção: há dois aspetos aqui: proteger dados confidenciais e gerir secrets . Para dados confidenciais de utilizadores/empresas, use sempre HTTPS (aplique TLS para todo o tráfego e use protocolos/configurações modernos). Nunca transmita informações confidenciais, como senhas ou tokens, em texto simples, mesmo em comunicações internas. Em repouso, encripte campos de dados críticos (muitos bancos de dados e serviços de armazenamento em nuvem oferecem encriptação em repouso; use-a e considere a encriptação no nível do aplicativo para campos extremamente confidenciais). Evite a exposição excessiva de dados: não armazene desnecessariamente dados de que não precisa e elimine dados confidenciais quando já não forem necessários. Quanto à secrets : nunca codifique secrets código ou configuração que vão para o controlo de origem. Use variáveis de ambiente, serviços de gestão de segredos (como HashiCorp Vault ou armazenamentos de segredos na nuvem) ou, pelo menos, armazene secrets ficheiros de configuração seguros que não estejam no repositório. Se precisar de confirmar alguma configuração, use ferramentas para verificar se secrets enviar. Alterne as chaves regularmente para que, se algo vazar, seja válido apenas por um curto período.
A plataforma de segurançaAikidopossui recursos robustos para ajudar em ambas as frentes. A sua capacidade Secrets irá analisar o seu código e configuração em busca de chaves API, palavras-passe, certificados privados e outras credenciais. Por exemplo, se alguém acidentalmente deixar uma chave AWS ou uma cadeia de conexão de base de dados num ficheiro confirmado, Aikido sinalizá-la imediatamente, potencialmente salvando-o de uma invasão da sua conta AWS. Aikido até monitorizar os seus repositórios continuamente para detectar vazamentos de segredos em tempo real. No que diz respeito à proteção de dados, a análise Aikidopode identificar o uso de criptografia fraca (como o uso de funções hash ou algoritmos de criptografia desatualizados). Ele também pode verificar certas verificações de conformidade (por exemplo, garantir que o TLS esteja habilitado em todos os terminais, analisando a infraestrutura como código ou definições de API). Ao integrar Aikido, você ganha um vigilante automatizado que grita “Ei, isso é uma chave API – remova-a!” antes mesmo que ela chegue à produção. E se a sua organização tem muitos repositórios privados ou equipas de desenvolvedores, esse tipo de verificação automatizada de segredos é essencial – como evidenciado pelo número cada vez maior de secrets no código a cada ano.
7. Utilização de componentes com vulnerabilidades conhecidas (riscos da cadeia de abastecimento)
O que é: As aplicações web modernas são construídas com base em inúmeros componentes de terceiros – frameworks, bibliotecas, pacotes, container e serviços. Utilizar componentes com vulnerabilidades conhecidas significa que a sua aplicação inclui uma dependência (ou é executada num servidor) que tem uma falha de segurança publicamente conhecida e que não foi corrigida ou atualizada. Este é essencialmente o problema da «cadeia de abastecimento»: uma vulnerabilidade numa biblioteca que utiliza pode comprometer a sua aplicação, mesmo que o seu próprio código seja perfeito. Os exemplos são abundantes: uma versão vulnerável de uma estrutura web, uma biblioteca OpenSSL desatualizada, uma ferramenta de depuração com fugas, etc. Os atacantes procuram ativamente aplicações que utilizam versões vulneráveis específicas de software para as explorar. Top 10 OWASP esse risco (anteriormente “Usando componentes com vulnerabilidades conhecidas”, agora incorporado a uma categoria mais ampla em 2021), e o setor aprendeu lições difíceis com incidentes como o Log4Shell, em que uma única falha na biblioteca teve um efeito cascata global.
Exemplo: O caso mais emblemático é, sem dúvida, o Log4Shell (CVE-2021-44228). Tratava-se de uma vulnerabilidade RCE crítica na popular biblioteca de registo Log4j (amplamente utilizada em aplicações Java). Quando foi divulgada em dezembro de 2021, ela disparou alarmes em todos os lugares, pois milhares de aplicações estavam indiretamente vulneráveis, caso incluíssem uma determinada versão do Log4j. Os invasores rapidamente começaram a explorá-la, levando a incidentes em muitas empresas. Como afirmou um relatório, “a vulnerabilidade do Log4j demonstrou como um único componente amplamente utilizado pode criar exposição em toda a organização”. Outro exemplo: o Apache Struts 2 tinha uma falha RCE conhecida (CVE-2017-5638) que levou à famosa violação da Equifax em 2017 – a Equifax não tinha atualizado a estrutura e os atacantes exploraram-na para roubar dados de 147 milhões de pessoas. Mais recentemente, em 2022-2023, vimos o Spring4Shell (CVE-2022-22965) — uma vulnerabilidade do Spring Framework que ecoou o Log4Shell (embora menos grave) — e várias vulnerabilidades de pacotes npm/PyPI que permitiam aos atacantes executar código ou roubar dados se você usasse esses pacotes. Mesmo as bibliotecas front-end não estão isentas: por exemplo, uma vulnerabilidade na biblioteca DOMPurify em 2021 poderia comprometer proteção XSS não fosse atualizada. Tudo isso ilustra que os CVEs conhecidos na sua pilha são bombas-relógio.
Impacto: O impacto depende inteiramente da vulnerabilidade específica do componente, mas pode ser tão grave quanto possível – execução remota de código, fuga de dados, contorno de autenticação, entre outros. O problema é que essas vulnerabilidades são de conhecimento público e, muitas vezes, o código de exploração está prontamente disponível, de modo que os invasores podem automatizar varreduras para encontrar qualquer servidor que não tenha sido corrigido. Um único componente não corrigido pode levar a um comprometimento em massa se for vulnerável a worms (como aconteceu com as vulnerabilidades MS Exchange ProxyShell/ProxyLogon de 2021 – não exatamente um “aplicativo web”, mas um conceito semelhante de vulnerabilidades conhecidas exploradas em massa). Para a sua aplicação, usar um componente vulnerável pode significar que um invasor não precisa encontrar um bug no seu código – ele apenas explora a biblioteca. O resultado pode ser o mesmo de outras categorias: violação de dados, invasão do servidor, etc., mas é particularmente frustrante porque uma correção pode estar disponível e simplesmente não foi aplicada.
Prevenção: Isso resume-se a gestão de dependências e disciplina de aplicação de patches. Mantenha um inventário de todos os componentes (incluindo as suas versões) utilizados na sua aplicação – isto é frequentemente chamado lista de materiais de software SBOM). Subscreva feeds de vulnerabilidades ou utilize ferramentas automatizadas para alertá-lo quando uma biblioteca que utiliza tiver um CVE conhecido. Muitos gestores de pacotes têm comandos de auditoria (por exemplo, auditoria npm, auditoria pip) para identificar vulnerabilidades conhecidas na sua árvore de dependências. Mantenha as suas dependências atualizadas – atualize para versões corrigidas imediatamente. Sempre que possível, use ferramentas para aplicar patches virtuais ou soluções alternativas se não puder atualizar imediatamente. Para componentes como o seu sistema operativo, servidor web ou servidor de base de dados, aplique atualizações de segurança regularmente. Tenha também cuidado com pacotes maliciosos no ecossistema de código aberto – ocasionalmente, os atacantes publicam uma biblioteca comprometida (ou sequestram uma conta de mantenedor) para que, da próxima vez que você npm install, poderá estar a receber uma atualização com backdoor. Utilizar fontes confiáveis e bloquear versões de dependências (e verificar a integridade através de checksums/assinaturas) pode ajudar a mitigar isso.
Aikido muito o gerenciamento desse risco por meio análise de dependências análise de composição de software SCA) e análise de dependências . O scanner de dependências (SCA) Aikidodetecta automaticamente as bibliotecas e versões de código aberto que o seu código está a utilizar, cruza essas informações com bancos de dados de vulnerabilidades e alerta você sobre quaisquer CVEs conhecidas. Por exemplo, se o seu projeto estiver a utilizar, digamos, o Log4j 2.14.0 (que é vulnerável ao Log4Shell), Aikido isso com detalhes sobre o CVE e até sugerirá a versão corrigida para a qual você deve atualizar. Ele pode fazer isso diretamente no seu IDE ou pipeline de CI. Melhor ainda, Aikido AI AutoFix – em muitos casos, ele pode abrir automaticamente uma solicitação pull para atualizar uma dependência para uma versão mais segura ou aplicar um patch necessário. A plataforma também pode verificar container em busca de componentes desatualizados (garantindo que as suas imagens base e pacotes de SO estejam atualizados). Ao integrar Aikido, você basicamente terceiriza o trabalho tedioso de rastrear CVEs para um sistema automatizado que nunca dorme. Isso significa uma correção mais rápida – fundamental quando as explorações geralmente ocorrem dias ou horas após o anúncio de uma vulnerabilidade. Em resumo: mantenha tudo atualizado e use ferramentas como o Aikido SCA para se manter à frente dos invasores na frente dos componentes.
8. Falsificação de pedidos entre sites (CSRF)
O que é: Cross-Site Request Forgery é um ataque em que um site malicioso induz o navegador do utilizador a fazer solicitações não intencionais à sua aplicação web. Ele explora o facto de os navegadores incluírem automaticamente credenciais (como cookies de sessão) nas solicitações. Se um utilizador estiver conectado ao seu site e visitar um site malicioso, esse site malicioso poderá, por exemplo, carregar uma imagem ou um formulário oculto que envia uma solicitação ao seu site (o alvo) – e o navegador incluirá o cookie de sessão do utilizador. Sem a defesa adequada, o seu servidor pensa que o utilizador fez essa solicitação legitimamente e a executará. Em essência, o CSRF “sequestra” a sessão autenticada de um utilizador para realizar uma ação que o utilizador não pretendia. Exemplo clássico: um utilizador está conectado ao seu banco. Ele visita a página de um invasor que contém algum código oculto que emite uma solicitação de transferência de fundos para o site do banco – o banco vê um cookie de sessão válido e processa a transferência. O CSRF não rouba dados diretamente; ele engana o navegador da vítima para que se torne cúmplice do invasor. Muitas estruturas modernas têm proteções CSRF integradas (geralmente por meio de tokens), e os navegadores modernos adicionaram atributos de cookie SameSite para mitigar o CSRF, mas ele está longe de ser erradicado. Em 2025, o CSRF "não está morto, apenas diferente" — especialmente com aplicativos de página única e APIs que usam cookies para autenticação, onde os desenvolvedores podem se esquecer de implementar as proteções habituais.
Exemplo: Um caso real: o Reddit (2023) tinha uma vulnerabilidade CSRF numa página de configurações que permitia aos invasores alterar silenciosamente as preferências de um utilizador e até mesmo vincular a conta da vítima a uma conta de spam. Embora alterar as preferências de notificação não seja tão grave quanto transferências de dinheiro, isso mostra que o CSRF estava presente na funcionalidade de um site importante. Outro exemplo notável envolve aplicações de carteiras de criptomoedas – os invasores usaram CSRF para alterar endereços de pagamento padrão ou iniciar pequenas transações, explorando a interface web da carteira, efetivamente drenando fundos sem que o utilizador percebesse. Historicamente, também houve ataques CSRF mais devastadores: o Gmail teve um CSRF em 2007 que permitiu que invasores alterassem os endereços de encaminhamento de e-mail dos utilizadores (espionando e-mails), e houve o famoso Samy Worm no MySpace em 2005, que na verdade era um CSRF autopropagável (combinado com XSS) que fez o perfil de Samy Kamkar acumular um milhão de “amigos”. Esses exemplos variam de travessuras a violações significativas, mas todos reforçam a ideia: se você não tiver proteções contra CSRF, um invasor pode fazer com que seus usuários realizem ações que eles não pretendiam.
Impacto: A gravidade do CSRF depende das ações que estão vulneráveis. Se apenas algumas alterações menores nas preferências forem possíveis (como no exemplo do Reddit), o impacto é limitado (irritante, mas não catastrófico). Mas se ações críticas, como transferências de dinheiro, alterações de senha ou exclusões de conta, estiverem vulneráveis, então o CSRF é um problema sério. Considere um CSRF que altera a palavra-passe de um utilizador conectado para uma conhecida pelo invasor – isso é uma invasão total da conta. Ou um CSRF em um aplicativo bancário baseado na web que emite um pagamento – isso é roubo financeiro direto. Em um contexto corporativo, um CSRF que aciona alguma alteração de estado (como alterar uma configuração de controlo de acesso ou injetar dados maliciosos) pode ser um trampolim para um comprometimento mais profundo. A natureza silenciosa do CSRF – sem malware na máquina do utilizador, sem sinais externos imediatos – significa que tais ataques podem passar despercebidos até que seja tarde demais.
Prevenção: A boa notícia é que o CSRF é bem compreendido e existem defesas padrão:
- Tokens CSRF: Implemente tokens anti-CSRF para solicitações que alteram o estado. O servidor gera um token aleatório, define-o na sessão do utilizador (ou como um cookie) e também o insere em formulários ou APIs (como um campo oculto ou cabeçalho). Quando uma solicitação é recebida, o servidor espera o token e verifica-o. A solicitação falsificada de um invasor não terá o token correto, portanto, será rejeitada.
- Atributo SameSite do cookie: Defina os seus cookies de sessão com
SameSite=LaxouRigoroso. Isso ajuda a impedir que o navegador inclua cookies em solicitações entre sites (emboraRelaxadoainda permite algumas solicitações GET – que, idealmente, não deveriam ter efeitos colaterais). Muitos frameworks agora definem os cookies de sessão como padrão paraSameSite=Lax. Tenha cuidado se a sua aplicação precisar legitimamente de solicitações entre sites (por exemplo, integrações de terceiros) – pode ser necessário fazer exceções, mas, nesse caso, isole-as. - Certifique-se de que as ações que alteram o estado utilizam verbos HTTP adequados (por exemplo, utilize POST/PUT/DELETE, e não GET, para ações). Os navegadores não enviarão credenciais em POST entre sites se SameSite for Lax ou Strict, e é mais difícil para um invasor fazer um POST oculto do que um GET.
- Verifique os cabeçalhos Origin/Referer: como uma camada adicional, verificar se as solicitações se originam do domínio esperado pode detectar tentativas de cross-site em alguns casos (embora não seja infalível).
- Segurança da estrutura: use o middleware de proteção CSRF integrado à sua estrutura – quase todas as estruturas modernas possuem um.
- Não o desative durante o desenvolvimento (os programadores às vezes desativam as verificações CSRF para testar APIs e depois esquecem-se de reativá-las).
Aikido ajudar a garantir que a sua aplicação não esteja inadvertidamente vulnerável a CSRF. Por um lado, varredura dinâmica Aikido varredura dinâmica DAST) pode simular CSRF tentando realizar ações que alteram o estado a partir de um contexto externo e verificando se é bem-sucedido. Ele reportará quaisquer ações que não tenham proteção CSRF adequada. No lado do código, a análise estática Aikido(com a sua compreensão de frameworks) pode identificar rotas que modificam dados, mas não têm verificação de token CSRF implementada. (Na verdade, ferramentas como o Ghost Security – uma AppSec semelhante – anunciam especificamente a localização de «endpoints que alteram o estado, mas não têm tokens CSRF», e Aikido recursos comparáveis.) Aikido também Aikido detectar SameSite atributos, inspecionando os cabeçalhos Set-Cookie nas suas respostas ou configurações de segurança. Ao usar Aikido testar os seus formulários e pontos finais da API, você será alertado se algum caminho crítico estiver sem defesas CSRF, para que possa corrigi-lo (geralmente adicionando as verificações de token ou cabeçalho apropriadas). Com essas medidas, você pode bloquear efetivamente o CSRF, garantindo que a sua aplicação apenas honra os pedidos que realmente vêm do seu site e dos seus utilizadores.
9. Falsificação de pedidos do lado do servidor (SSRF)
O que é: O SSRF é uma adição mais recente ao Top 10 OWASP tornou-se um dos 10 itens principais na edição de 2021) e por um bom motivo. Falsificação de solicitações do lado do servidor ocorre quando uma aplicação obtém um URL ou localização de recurso de uma fonte não confiável (como entrada do utilizador) e o código do lado do servidor busca essa URL sem a devida validação. Essencialmente, um invasor engana o seu servidor para que envie uma solicitação em seu nome. Isso pode ser usado indevidamente para fazer com que o servidor envie solicitações a recursos internos que o invasor não pode acessar diretamente ou a endereços externos com as credenciais do servidor. Um cenário clássico é um aplicativo web com um recurso como "buscar o conteúdo desta URL" (para visualização ou importação de dados) – um invasor fornece uma URL como http://localhost/admin ou uma URL de metadados da AWS (http://169.254.169.254) para recuperar informações internas confidenciais através do seu servidor. O SSRF também pode permitir a varredura de portas da sua rede interna através do seu servidor, ou mesmo a exploração de serviços internos. Em ambientes de nuvem, o SSRF é particularmente perigoso porque as instâncias de nuvem geralmente têm acesso a pontos finais de metadados que geram credenciais. A violação da Capital One em 2019 foi um excelente exemplo do uso do SSRF em ambiente real (combinado com uma configuração incorreta).
Exemplo: A violação da Capital One: uma ex-engenheira da AWS explorou uma vulnerabilidade SSRF em um WAF ( firewall de aplicação web) mal configurado que a Capital One estava a executar. Ao criar solicitações a partir de uma aplicação web acessível externamente, ela conseguiu consultar o serviço de metadados da AWS do servidor, que retornou tokens de acesso da AWS. Usando esses tokens, ela acessou dados confidenciais (buckets S3 com informações de clientes), resultando no roubo de mais de 100 milhões de registos. Em resumo, o SSRF foi o ponto de entrada inicial que contornou as barreiras da rede externa, aproveitando os privilégios do próprio servidor. Outro exemplo: em 2022, pesquisadores de segurança descobriram que um SSRF em uma ferramenta DevOps popular lhes permitia acessar pontos finais de API internos que não estavam expostos, possibilitando ações administrativas. Também vimos bugs SSRF em funcionalidades de processamento de imagens ou geração de PDF (onde o servidor busca uma URL a partir da entrada), que os invasores transformaram em scanners de porta ou usaram para atingir consoles de administração de bancos de dados internos. Outro caso: alguns serviços em nuvem tinham SSRF em seus webhooks, o que permitia aos invasores acionar solicitações para pontos finais HTTP internos, obtendo acesso a coisas como Redis ou painéis internos.
Impacto: À primeira vista, o SSRF trata da realização de solicitações, o que pode parecer limitado. Mas pode ter um impacto crítico:
- Acesso à rede interna: se o seu servidor puder aceder a hosts internos (por exemplo, na mesma VPC ou centro de dados), um SSRF poderá potencialmente comunicar com serviços internos que não estão expostos publicamente. Isso pode levar à leitura de dados confidenciais (como contactar uma API HTTP interna que retorna informações do cliente) ou até mesmo à emissão de comandos privilegiados se uma interface administrativa interna não tiver autenticação (uma vez que se presumia que apenas chamadas internas poderiam aceder a ela).
- FugaCloud : Em provedores de nuvem (AWS, GCP, Azure), o SSRF é frequentemente usado para obter credenciais do serviço de metadados da instância. Essas credenciais podem permitir um comprometimento ainda maior dos recursos da nuvem (como no caso da Capital One).
- Contornar restrições baseadas em IP: se restringir algumas funcionalidades a, por exemplo, pedidos do «localhost» ou de determinados IPs, um SSRF poderá contornar isso fazendo o pedido a partir do próprio servidor local.
- Potencial de worm: em alguns casos, o SSRF pode ser um ponto de pivô para outras explorações – por exemplo, o SSRF para um serviço interno que tem um RCE conhecido pode resultar na execução remota real de código na rede interna.
De acordo com a nota da OWASP, as questões relacionadas ao SSRF estão realmente a aumentar nas aplicações modernas devido aos microsserviços e às complexidades da nuvem, e podem ser bastante graves.
Prevenção: Prevenir a SSRF significa principalmente validar e higienizar quaisquer URLs fornecidas pelo utilizador ou pedidos de recursos remotos. Se a sua aplicação precisar de obter um URL fornecido por um utilizador (ou um endereço), implemente uma lista de permissões rigorosa: por exemplo, permita apenas URLs de um conjunto de domínios em que confia (e imponha isso através de pesquisa DNS, etc., para evitar truques). Nunca permita que entradas brutas do utilizador controlem diretamente o destino das obtenções do lado do servidor. Também pode implementar proteções ao nível da rede: por exemplo, desative a capacidade do seu servidor de aceder a endereços internos se não for necessário. Alguns fornecedores de nuvem permitem desativar ou restringir o acesso ao serviço de metadados (a AWS tem o IMDSv2, que mitiga as solicitações GET simples). Além disso, o código deve verificar o esquema da URL – não permitir file:// URIs ou outros esquemas locais e, potencialmente, desautorize literais IP ou endereços locais de ligação. Utilize bibliotecas ou patches que executem proteção SSRF, se disponíveis (por exemplo, algumas bibliotecas de clientes HTTP permitem restringir quais os hosts que podem ser contactados). Essencialmente, trate URLs fornecidos externamente como entradas perigosas – porque elas são.
As ferramentas de verificação Aikidopodem ajudar a identificar riscos SSRF no seu código. Por exemplo, a análise estática Aikidopode detetar o uso de funções ou bibliotecas que fazem solicitações HTTP (como solicitações.obter() em Python, HttpClient em Java, etc.) onde a URL é derivada da entrada do utilizador. Em seguida, pode sinalizar isso como um potencial SSRF se não houver filtragem. Aikido também Aikido perceber se o seu código tenta obter informações de URLs sem validação e pode sugerir a adição de verificações de lista de permissões. No lado dinâmico, Ferramentas DAST pentest Aikido pode tentar cargas SSRF comuns (como fornecer http://169.254.169.254 como entrada para qualquer funcionalidade de obtenção de URL) para verificar se conseguem induzir o servidor a responder com conteúdo interno. Se for encontrado um vetor SSRF, Aikido reportá-lo juntamente com as provas. Com este feedback, poderá então implementar uma validação adequada ou restringir o acesso à rede. Os recursos de verificação na nuvem Aikidotambém podem alertá-lo se as suas instâncias tiverem configurações de rede excessivamente permissivas (por exemplo, se o seu servidor web puder sair para a Internet ou rede interna quando não deveria). Ao combinar análise e testes de código, pode detectar vulnerabilidades SSRF antecipadamente, antes que um invasor use a sua aplicação como proxy.
10. Deserialização insegura
O que é: A deserialização insegura é uma vulnerabilidade mais especializada, mas extremamente perigosa quando existe. Ela surge quando uma aplicação deserializa dados de uma fonte não confiável. sem validação adequada – o que significa que ele pega alguns dados binários ou estruturados (como objetos, JSON/XML ou blobs binários) do cliente e reconstrói um objeto na memória. Certos formatos de serialização (especialmente em linguagens como Java, .NET, Python, PHP) podem ser usados indevidamente para executar código durante o processo de desserialização. Os atacantes criam objetos serializados maliciosos (frequentemente chamados de “cadeias de gadgets”) que, quando o servidor os desserializa, acionam comandos ou comportamentos escolhidos pelo atacante. Isso pode levar à execução remota de código ou à manipulação lógica no servidor, sem a necessidade de uma falha de injeção normal. As vulnerabilidades de deserialização insegura são essencialmente bombas lógicas escondidas nos dados. Elas foram destacadas no Top 10 OWASP e continuam relevantes, embora o Top 10 de 2021 tenha ampliado para "Falhas de integridade de software e dados". Se um aplicativo aceita qualquer tipo de objeto serializado (como Java Serializável objetos, .NET ViewState ou até mesmo certos JSON com informações do tipo de classe) dos utilizadores, isso pode representar um risco.
Exemplo: Um exemplo recente que está a causar impacto é CVE-2025-55182 nos componentes do servidor React (divulgado em dezembro de 2025). Trata-se de uma vulnerabilidade crítica de RCE (Execução Remota de Código) causada por uma deserialização insegura no protocolo React Server Components. Essencialmente, um invasor poderia enviar uma carga HTTP malformada que o lado do servidor React deserializaria incorretamente, permitindo a execução de código arbitrário. Ela tinha um CVSS 10 e afetou um grande número de aplicações (já que o React é muito difundido). Isso mostra que mesmo frameworks de ponta não estão imunes a problemas de deserialização. Outro exemplo clássico: o Exploração do Java Commons Collections em 2016 – uma deserialização insegura em muitas aplicações Java (através de uma biblioteca) permitiu que invasores enviassem um objeto serializado que, após a deserialização, executaria comandos no servidor. Isso foi amplamente explorado em produtos como Jenkins, WebLogic, etc. No .NET, havia a vulnerabilidade de deserialização do ViewState (CVE-2017-8759) e outras em que dados não sanitizados num estado de visualização levavam a RCE. As aplicações PHP tiveram problemas quando unserialize() é chamado na entrada do utilizador. Até mesmo o JavaScript (Node.js) tinha um famoso no serializar-javascript pacote. Assim, desde sistemas empresariais até frameworks modernos, a deserialização insegura surge – muitas vezes com resultados graves.
Impacto: A deserialização insegura é frequentemente um caminho direto para a execução remota de código (RCE). Isso é o pior que pode acontecer – o invasor pode executar código arbitrário no seu servidor, potencialmente assumindo o controlo total dele. Mesmo que não seja uma RCE completa, as falhas de deserialização podem ser usadas para manipular a lógica (por exemplo, alterando estruturas de dados para obter privilégios mais elevados sobre os dados do objeto). Mas, normalmente, o impacto é crítico: se um invasor conseguir explorá-lo, muitas vezes pode instalar um webshell, criar um utilizador backdoor ou penetrar mais profundamente na rede. O perigo é ampliado pelo facto de que as explorações de deserialização geralmente não requerem autenticação (se a aplicação estiver a deserializar dados antes da autenticação) e podem ser feitas com uma única solicitação. É uma forma furtiva de entrar – sem consultas SQL suspeitas ou scripts entre sites, apenas um blob de dados aparentemente inofensivo que destrói a sua aplicação por dentro.
Prevenção: A melhor maneira de evitar a deserialização insegura é nunca deserializar dados não confiáveis. Se não for absolutamente necessário aceitar objetos serializados de utilizadores, não o faça. Use formatos de dados mais seguros (JSON, por exemplo, sem metadados de tipo de classe que possam invocar construtores arbitrários). Se precisar serializar/desserializar, considere implementar verificações de integridade: por exemplo, assinar os dados serializados ou incluir um MAC, para que a adulteração seja detectável. Algumas estruturas permitem restringir quais classes podem ser desserializadas (classes de lista de permissões). Isso pode impedir que cadeias de gadgets arbitrárias funcionem. Mantenha as bibliotecas atualizadas, pois muitas falhas de deserialização são corrigidas ao restringir o código executado durante a construção do objeto. A OWASP também sugere isolar o processo de deserialização, talvez executando-o em um ambiente com privilégios reduzidos ou em uma sandbox, para que, se uma exploração for acionada, o impacto seja mínimo. Em geral, trate os dados serializados como potencialmente hostis. Além disso, esteja ciente da serialização oculta, como em comunicações entre serviços ou caches.
A inteligência de vulnerabilidades e a análise Aikidopodem ajudar a detectar esses problemas. No que diz respeito à análise estática, Aikido sinalizar o uso de funções ou padrões perigosos – por exemplo, o uso de ObjectInputStream.readObject() em Java ou PHP unserialize() em dados do utilizador ou bibliotecas de deserialização inseguras conhecidas por serem exploráveis. Ele irá avisá-lo que «ei, você está a deserializar algo aqui — isso é seguro?». análise de dependências Aikido análise de dependências entra em ação: ela pode alertá-lo se você estiver a usar uma versão de biblioteca conhecida por ter uma vulnerabilidade de deserialização (por exemplo, uma versão desatualizada de uma biblioteca de serialização comum). Se surgir um CVE importante como o CVE-2025-55182 (o React), Threat Intelligence Aikido(como Aikido ) destacarão quais dos seus projetos podem ser afetados e precisam de um patch. Em termos de testes, isso é mais difícil para scanners dinâmicos, mas Aikido pode tentar payloads de exploração conhecidos se a sua aplicação estiver a usar uma estrutura comum conhecida por um bug de deserialização. Em última análise, a mitigação geralmente requer alterações no código ou atualizações da biblioteca, e o papel Aikidoé alertá-lo rapidamente sobre o risco. Ao detectar deserialização insegura durante o desenvolvimento ou a verificação, você pode refatorar para usar formatos de dados seguros ou atualizar para versões corrigidas. antes lançar uma bomba-relógio.
Construindo uma postura segura para aplicações web
Como vimos, as aplicações web atuais enfrentam uma infinidade de vulnerabilidades – desde falhas de injeção podem comprometer a sua base de dados, até falhas lógicas que permitem que invasores contornem a sua autorização, passando por vazamentos de segredos e riscos de dependência provenientes das ferramentas nas quais confiamos. Isso pode parecer assustador, mas o ponto em comum é a conscientização e a defesa proativa. Ao compreender essas principais vulnerabilidades, você já está um passo à frente na mitigação delas.
Algumas conclusões importantes para uma postura robusta de segurança de aplicações web:
- Mude a segurança para a esquerda: identifique os problemas logo no início do desenvolvimento. Integre SASTSCA (como Aikido) no seu pipeline de CI e IDE, para que as vulnerabilidades sejam sinalizadas e corrigidas antes da fusão do código. É muito mais fácil corrigir uma consulta SQL insegura ou adicionar uma verificação de autenticação durante a codificação do que se apressar após uma violação.
- Defesas em camadas: use várias camadas de controlos de segurança. Por exemplo, para evitar injeções e XSS, combine práticas de codificação seguras com bibliotecas de segurança e também execute um firewall de aplicação web firewall de aplicação WAF) para proteção adicional. Para autenticação, imponha MFA e use monitorização para detectar logins suspeitos. Defesa em profundidade significa que, mesmo que uma camada falhe, outras detectam o problema.
- Mantenha-se atualizado: mantenha as dependências e os servidores atualizados. Considere ativar atualizações automáticas para componentes críticos, quando possível. Aproveite feeds ou plataformas de vulnerabilidades (Aikido, Dependabot, etc.) para saber quando há algo vulnerável na sua pilha. Quanto mais rápido corrigir os problemas conhecidos, menos provável será ser afetado por campanhas de exploração em massa.
- Secrets e privilégios mínimos: trate as credenciais como joias da coroa. Use cofres ou configurações de ambiente para secrets, alterne-os regularmente e dê a cada serviço o acesso mínimo necessário. Dessa forma, mesmo que uma chave seja comprometida, o raio de impacto será limitado.
- Segurança desde a concepção: incorpore modelagem de ameaças e princípios de design seguro desde o início. Para novos recursos, considere como eles poderiam ser usados indevidamente e incorpore as verificações necessárias (por exemplo, certifique-se de que um novo recurso de upload de ficheiros valide os tipos e tamanhos de ficheiros para evitar problemas de deserialização ou DoS, certifique-se de que um novo endpoint de API verifique as funções dos utilizadores para evitar falhas de controlo de acesso, etc.).
- Eduque e automatize: mantenha a equipa de desenvolvimento informada sobre as armadilhas comuns (como as do Top 10 OWASP). Use scanners e testes automatizados como rede de segurança, mas também promova uma cultura em que os programadores pensem no impacto da segurança. Um pouco de consciência ajuda muito a evitar, por exemplo, a tentação de desativar tokens CSRF «apenas para testar» ou copiar e colar código do StackOverflow sem considerar a segurança.
Ao concentrar-se nessas práticas essenciais, pode reduzir drasticamente o perfil de risco da sua aplicação. Muitos ataques são bem-sucedidos não por serem ultra sofisticados, mas porque a higiene básica de segurança foi negligenciada. Preencha essas lacunas e os invasores passarão para alvos mais fáceis.
Conclusão
Criar aplicações web capazes de resistir às ameaças atuais está absolutamente ao alcance das equipas de desenvolvimento, especialmente com as ferramentas certas no seu arsenal. Analisámos as principais vulnerabilidades da web que afetam as aplicações e vimos como elas se relacionam com incidentes reais. O denominador comum é que a conscientização e a deteção precoce fazem toda a diferença. Quando se sabe o que procurar – seja uma entrada não sanitizada, uma verificação de acesso ausente ou uma biblioteca desatualizada –, é possível lidar com isso de forma proativa, em vez de reativa.
Como programador ou DevSecOps , não precisa enfrentar isso sozinho. AppSec modernas AppSec , como Aikido , são projetadas para se integrarem perfeitamente ao seu fluxo de trabalho e detectarem esses problemas rapidamente. Imagine ter um especialista em segurança automatizado a revisar cada commit: sinalizando aquele bug XSS sorrateiro, detectando a chave AWS antes que ela saia do seu laptop, apontando que você está a usar uma versão de uma biblioteca com um CVE crítico e até mesmo sugerindo ou aplicando correções. É isso que Aikido : varredura completa de código, dependências, configuração e muito mais, criada para programadores. É como ter Top 10 OWASP o banco de dados CVE mais recente a proteger-te, sem te atrasar.
Próximos passos: Não espere por uma auditoria ou (pior ainda) uma violação para descobrir essas vulnerabilidades. Pode começar executando uma verificação de segurança na sua base de código para ver em que ponto se encontra. Configure regras de linting para segurança, adicione verificação de dependências e habilite a autenticação de dois fatores (2FA) em todos os lugares. Se estiver interessado numa plataforma voltada para desenvolvedores que faça tudo isso e muito mais, considere Aikido – ele oferece verificação de código, SAST, detecção de segredos, IaC e container , além de correções assistidas por IA em uma interface unificada. Na verdade, Aikido mapear o status do seu projeto em relação Top 10 OWASP automaticamente e ajudá-lo a fechar as lacunas.
No final, o objetivo é integrar a segurança na estrutura do desenvolvimento. Ao concentrar-se nessas principais vulnerabilidades, escrever código seguro e usar ferramentas para automatizar o trabalho pesado, reduzirá significativamente o risco para as suas aplicações web. Os dados dos seus utilizadores permanecem seguros, a sua aplicação continua ativa e pode dormir um pouco mais tranquilo à noite (assim como 42% das equipas que continuam preocupadas com a segurança container aplicações, mencionadas anteriormente!).
Proteja seu software agora


.avif)
