o maior problema de segurança do seu app ou SAS nÃĢo tÃĄ na rede nem grandes exploits tÃĄ entre a cadeira e o monitor o problema nÃĢo ÃĐ que seu cÃģdigo pode ser hackeado ÃĐ que vocÊ jÃĄ deixou ele praticamente aberto mas calma hoje eu vou te mostrar as vulnerabilidades mais comuns que eu encontro por aà E como corrigir se depois desse vÃdeo vocÊ cometer esses erros nÃĢo ÃĐ descuido ÃĐ sabotagem eu nÃĢo vou focar em falar sobre grandes cvs redes nem nada disso ainda mais porque vocÊ tÃĄ hospedando na versel Fly ou outra grande empresa
que tem um certo tipo de proteçÃĢo e provavelmente vocÊ tÃĄ usando ORM que dificulta scale injection tÃĄ fazendo tudo em jsx que dificulta xss nÃĢo significa que ÃĐ impossÃvel vocÊ nÃĢo sofrer esses ataques sÃģ que nÃĢo ÃĐ o escopo desse vÃdeo e tem infinitos conteÚdos sobre essas vulnerabilidades e eu recomendo muito vocÊ pesquisar Bora lÃĄ web Hook todo mundo gosta mas principalmente a grande maioria usam sempre a mesma rota ap web Hook ou ap Hook isso nÃĢo tÃĄ errado e Tecnicamente nÃĢo ÃĐ uma coisa ruim mas qualquer um pode ficar chutando rotas possÃveis de web
Hook e acabar encontrando e se tiver mal configurado um usuÃĄrio mal intencionado pode mandar uma mensagem para sua rota fingindo o se mÃĐo de pagamento confirmando uma compra sempre que vocÊ for configurar um web Hook vocÊ tem que usar uma sinatura secreta no stripe vocÊ recebe o cabeçalho stripe signature e no mercado pago tem o ex signature seu backend deve validar esse cÃģdigo para garantir que a requisiçÃĢo veio da funte certa e aà Quando um usuÃĄrio mandar uma requisiçÃĢo pro web Hook a sua P vai reclamar que falta assinatura idor que ÃĐ basicamente nÃĢo verificar
permissÃĢo ao acessar S objetos via api imagina que vocÊ tem um Ed Point purchas barid e o cÃģdigo ÃĐ mais ou menos assim o usuÃĄrio vai mandar uma requisiçÃĢo get purchas com o ID 1 23 e vocÊ vai devolver os detalhes da compra Mas e se essa compra 1 23 nÃĢo foi dele ParabÃĐns Tu acabou de vazar os dados de outro usuÃĄrio outro erro clÃĄssico ÃĐ o Patch profile onde o servidor recebe o user ID no corpo da requisiçÃĢo NÃĢo façam isso o ID do usuÃĄrio deve vir sempre da sessÃĢo do jwt do que for
mas nunca do body da requisiçÃĢo sempre valida quem tÃĄ pedindo acesso Antes de mostrar editar ou excluir qualquer coisa data exposure que ÃĐ a exposiçÃĢo de dados sensÃveis imagina que vocÊ criou o Marketplace e vocÊ pode acessar um produto mandando uma requisiçÃĢo G com ide do produto beleza a retorna aos detalhes do produto e do vendedor sÃģ que junto com o nome e a foto do vendedor vocÊ tambÃĐm acaba recebendo o e-mail o CPF o telefone endereço senha criptografada isso aconteceu porque quando vocÊ buscou o produto acabou pegando os dados do vendedor tambÃĐm sÃģ sÃģ
que vocÊ acabou nÃĢo filtrando o que que devia ter sido enviado por front ou nÃĢo VocÊ deve enviar somente o que realmente for necessÃĄrio pro frontend se vocÊ precisa do nome da foto do vendedor sÃģ manda isso nÃĢo vai pensando que ah o frontend sÃģ usa o que precisa nÃĢo proteja seus usuÃĄrios nÃĢo colocar um rate limit ou um capt em certos lugares pode nÃĢo ser uma vulnerabilidade direta mas sem dÚvida ÃĐ uma das coisas que mais prejudica o produto imagina que sua aplicaçÃĢo tem uma p pÚblica para fazer um post se nÃĢo houver nenhuma
limitaçÃĢo no uso um atacante pode automatizar essa requisiçÃĢo e criar milhares de posts falsos isso acaba poluindo o banco de dados e degradando a experiÊncia dos usuÃĄrios e Vale lembrar que armazenamento em banco ÃĐ relativamente caro entÃĢo sem uma proteçÃĢo vocÊ acaba perdendo dinheiro um outro exemplo Suponha que vocÊ tem uma API para enviar um e-mail um atacante pode enviar milhares de requisiçÃĩes explodi o seu limite de envio de e-mail e vocÊ tem que acabar pagando para poder enviar mais e-mails de novo tambÃĐm nÃĢo colocar essas proteçÃĩes acabam diminuindo a segurança do seu aplicativo em
geral em uma pÃĄgina de login por exemplo dÃĄ para fazer um ataque de brute Force para descobrir a senha de alguÃĐm entÃĢo vocÊ tem que considerar implementar um capt limites ou outro mecanismos em lugares sensÃveis ou caros mass assignment conhecido como atribuiçÃĢo massiva essa vulnerabilidade Inclusive eu explorei lÃĄ no Último vÃdeo quando eu me tornei administrador quando vocÊ tem uma rota Patch vocÊ altera algumas informaçÃĩes de Algum objeto como o username para usuÃĄrio descriçÃĢo para algum produto essa vulnerabilidade deixa vocÊ alterar qualquer propriedade do objeto alÃĐm de vocÊ alterar o seu nome de usuÃĄrio vocÊ
tambÃĐm consegue alterar seu cargo para administrador ou qualquer outra propriedade vocÊ tem que definir explicitamente os campos que podem ser alterados ou nÃĢo esse aqui ÃĐ meu favorito que vulnerabilidade mais linda time of check to time of use ÃĐ um tipo de vulnerabilidade que ÃĐ causado quando tem um intervalo entre verificar uma condiçÃĢo que ÃĐ o cheque e usar o resultado o use o exemplo clÃĄssico ÃĐ do banco vocÊ tem R 100 na sua conta e vocÊ pede para fazer o saque dos R 100 primeiro o programa vai verificar se vocÊ tem o dinheiro se
tiver faz o saque Mas e se vocÊ mandar duas requisiçÃĩes ao mesmo tempo Tecnicamente ÃĐ bem difÃcil conseguir mandar sÃģ duas requisiçÃĩes ao mesmo tempo entÃĢo geralmente a gente manda vÃĄrias porque tem um delay de rede de tanto quem envia quanto quem recebe a funçÃĢo vai ser executada vÃĄrias vezes ao mesmo tempo e ao mesmo tempo vÃĢo passar pelo cheque que verifica o saldo e depois vai acontecer o saque vÃĄrias vezes isso funciona para muitas coisas tanto para like em alguma publicaçÃĢo compra de tickets e tudo mais e a resoluçÃĢo ÃĐ bem fÃĄcil vocÊ sÃģ
precisa travar os recursos crÃticos enquanto estÃĢo sendo usados vocÊ pode usar semÃĄforo sistema de filas mas o que ÃĐ mais usado Ger sÃĢo as transactions no banco de dados onde o check e o use aconteçam de forma atÃīmica ou seja uma operaçÃĢo ou acontece totalmente ou nÃĢo acontece nada sem interrupçÃĢo confiar no frontend Na verdade essa parte ÃĐ uma junçÃĢo de vulnerabilidades mas que eu agrupe tudo e gosto de chamar de confiar no frontend muita gente acha que validar sÃģ no front jÃĄ ÃĐ suficiente afinal se o botÃĢo tÃĄ desabilitado a requisiçÃĢo nunca vai ser
enviada se o frontend fala que eu tenho R 10 eu posso sacar os R 10 afinal foi o meu servidor que falou pro front Ele tem 10 certo nÃĢo ÃĐ bem assim qualquer regra que tÃĄ no front end pode ser ignorada ou manipulada pelo usuÃĄrio e isso ÃĐ verdade principalmente quando vocÊ US CSR quer ver a gente tÃĄ aqui na Aler pi eu mudar meu dinheiro para e pod liberar o botÃĢo do saque a primeira que a gente tem que fazer ÃĐ proc o texto de saque indisponÃvel que provavelmente uma renderizaçÃĢo condicional a gente procura
aqui encontr a gente pode achar aqui agora a condiçÃĢo de renderizaçÃĢo que ÃĐ ou saque indisponÃvel ou ÃĐ o botÃĢo de resgatar EntÃĢo essa aqui ÃĐ a nossa condiçÃĢo Vamos colocar um Break Point aqui em cima e recarregar a pÃĄgina agora eu tenho o cÃģdigo pronto aqui que vai mudar as variÃĄveis do front end entÃĢo ele vai mudar o meu amount Gross amount vai botar essa variÃĄvel c como como true vai mudar as informaçÃĩes da minha conta para ela poder liberar o saque e o cÃģdigo ÃĐ esse aqui Eu recarreguei a pÃĄgina parou no break
Point e agora vou mudar as variÃĄveis entÃĢo mudei o cÃģdigo execuçÃĢo mudei executa mudei executa pronto meu saldo Total tÃĄ aqui e o botÃĢo liberou agora se eu clicar sacar com pix vai mandar requisiçÃĢo pro backend mas eu sei que Alert pix ele Verifica o que o front Change envia EntÃĢo essa requisiçÃĢo vai falhar mas era sÃģ para mostrar para vocÊs que toda a renderizaçÃĢo condicional que acontece do lado do cliente pode ser falsificado Agora imagina o e-commerce que ele vai calcular os preços no front Change e enviar o valor pro backend e se interceptar
a requisiçÃĢo e mudar o preço para 50 o backend tem que ter algum controle EntÃĢo vocÊ recebeu o preço Confere se o preço no back end ÃĐ igual do front end se nÃĢo for retorna um erro sempre recalcule os preços no servidor vocÊ nunca nunca nunca deve confiar no frontend e sempre validar no backend se o seu sistema depende sÃģ do frontend Para ter segurança alguÃĐm vai burlar Pronto agora seu app tÃĄ impossÃvel de ser hackeado brincadeira segurança 100% nÃĢo existe e nunca vai existir Pensa bem todo programa que vocÊ usa para criar ou hospedar
seu app foi feito por ser humano e humanos erram pode ser um bug no seu cÃģdigo no Framework que vocÊ usa banco de dados sistema operacional Tudo foi feito por alguÃĐm que em algum momento pode ter cometido um Único erro e mesmo que seu cÃģdigo seja perfeito nada impede que alguÃĐm invada fisicamente seu servidor ou algum funcionÃĄrio do seu provedor de hospedagem roube suas credenciais vocÊ cai em algum Fishing enfim segurança ÃĐ um jogo infinito o objetivo nÃĢo ÃĐ ficar 100% Seguro mas ÃĐ dificultar ao mÃĄximo o ataque e reduzir os danos se alguma coisa
der errado agora falei jÃĄ viu essas falhas em algum lugar deixa nos comentÃĄrios e claro se curtiu jÃĄ sabe se inscreve deixa o like e manda o vÃdeo para aquele Dev que confia muito no fronte valeus