Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
May 17, 2022 09:54 pm GMT

Como eu descobri uma falha de segurana em um sistema na minha universidade

English version: How did I discover a security vulnerability in a system of my university

Eai galera, ento hoje eu vou contar como eu descobri uma falha de segurana em um dos sistemas que minha universidade utiliza, o que eu fiz logo em seguida, como podemos evitar e minhas concluses.

Quero deixar claro que meu objetivo no manchar a imagem da empresa, universidade ou dos desenvolvedores, mas sim poder contribuir com a segurana do sistema bem como tambm contribuir para o cenrio de Segurana da Informao no pas.

Como eu descobri a falha?

Bom, na poca estavamos na pandemia em que as aulas em sua maioria eram todas onlines e por isso o uso de sistemas onlines eram mais frequentes do que no presencial. Ento, nessa aula foi nos apresentados um sistema (j utilizado a algum tempo pela universidade) e que deveriamos utilizar para postar atividades e acompanhar notas. Sendo um sistema novo, tive a curiosidade de ver o que estava trafegando nas requisies feitas pelo sistema e comecei a procurar requisies que fossem interessantes.

Ento, encontrei duas requisies interessantes.

  • Uma que me retornava meus dados cadastrais
  • Outra que me retornava alguns nmeros do meu carto de crdito, data de validade, bandeira e etc.

Rota dados pessoais
Rota carto de crdito

Mas Iaan, at agora s encontramos duas rotas que mostram nossos prprios dados, e dai?

Voc tem razo, por isso eu decidi testar se essas rotas permitiriam ser feitas se eu no tivesse um token ou se meu token fosse invlido, e...

No deu em nada. :(

Foi ento que eu pensei, e se meu token for vlido mas minha requisio tiver um id diferente do meu, ou seja, de outro usurio?

E... funcionou! :D

Fiz uma requisio utilizando o comando curl e mudando meu id que era um paramtro na rota.

Imagem do terminal com curl

O mesmo acontecia na rota que mostrava informaes dos cartes de crditos.

Isso acontece pois o back-end da aplicao apenas verificava se o token era vlido para fazer a requisio mas no verificava se o id que eu estava solicitando realmente pertenciam a meu usurio.

Suponhamos que meu id seja o 21 e que eu esteja autenticado na aplicao, ento a rota para mostrar meus dados pessoais poderia ser algo assim:

http://apidosistema.com.br/dados-pessoais?id=21

Ento, como eu estava autenticado e meu token era vlido, se eu mudasse o id da requisio para 22, eu conseguia obter dados do usurio com esse id.

http://apidosistema.com.br/dados-pessoais?id=22

Ok, falha encontrada e agora?

O que eu fiz logo aps encontrar a falha?

Comecei a documentar o que eu tinha descoberto para reportar aos responsveis.
Criei um documento em que eu dava um resumo da falha que tinha acabado de descobrir.
Nesse documento descrevi um resumo da falha, gravidade, como executar, possvel soluo, um script simples que mostrava a falha (Proof-of-concept) e o cdigo fonte do mesmo.

Documento

PoC:https://www.youtube.com/watch?v=tU1qOoPhwtg

Como no sabia o email dos responsveis pela plataforma, entrei em contato com meu professor que me ajudou a enviar o documento para eles.
No dia seguinte, recebi um email com uma resposta da plataforma.

Prezados,
Esperamos encontrar todos bem.
Recebemos a sua notificao a respeito de uma falha de segurana em uma de nossas aplicaes e gostaramos de informar que de imediato, submetemos essa notificao ao nosso time de engenharia para anlise e devidas correes.
Aps anlise ficou constatado que de fato existia uma vulnerabilidade que permitiria a consulta dos dados cadastrais de outras pessoas, somente quando em posse de um token vlido. O token nesse contexto semelhante a uma chave, gerada a partir da autenticao bem-sucedida de um aluno no aps informar seu usurio e sua senha pessoal. Pessoas sem esse token, ou seja, sem um login vlido, no conseguiriam acesso aos referidos dados pessoais.

Todas as correes e validaes necessrias foram implementadas para que esse cenrio no ocorra mais.
Com relao aos dados de carto de crdito importante destacar que no armazenamos nenhum dado crucial ou sigiloso do carto de crdito do aluno. A fim de no restarem dvidas, abaixo segue uma breve explicao de como funciona o uso do carto de crdito nas nossas solues:

Quando um aluno deseja realizar qualquer pagamento via carto de crdito, ao inserir as informaes do seu carto, esses dados so enviados diretamente Instituio Bancria atravs de um processo chamado de Checkout transparente onde os dados esto sendo enviados diretamente ao banco de dentro da nossa plataforma. Em outras palavras, como se o aluno estivesse no site do banco estando ainda na nossa plataforma. Essa comunicao com o banco realizada utilizando uma conexo segura e criptografa, alm de todos os mais recentes protocolos de segurana disponveis para internet. Em nenhum momento ns coletamos quaisquer informaes transacionadas nessa operao. Aps a finalizao do pagamento a Instituio Bancria nos retorna se ela foi bemsucedida ou no, e, quando bem-sucedida, nos envia um token que identifica aquele carto do aluno junto ao banco. Acompanhado desse token vem o nmero mascarado do carto e sua bandeira, para que caso o aluno precise realizar outro pagamento pela plataforma, ele consiga faz-lo de forma mais fcil e rpida. Esse token por si s no tem nenhuma validade pois, na eventualidade de um novo pagamento, ser exigido a insero do cdigo de verificao impresso no carto de crdito e de uma chave pblica e outra privada criadas entre o banco e nosso sistema para que a transao seja validada, reforando que toda a transao ser realizada em um ambiente seguro fornecido pela Instituio Bancria.

Prezamos muito pela qualidade e integridade dos servios que prestamos. Nosso ciclo de inovao contempla revistar servios j construdos para mensurar critrios de desempenho e segurana. Sentimos profundamente que essa falha tenha passado despercebida. Por isso, verificamos com muita cautela todos os pontos que foram levantados e estes j se encontram corrigidos. Ressaltamos tambm nosso compromisso em seguir e mantermos atentos a toda
a legislao vigente referente a segurana da informao, em destaque para a Lei
n. 13.709/18 (Lei Geral de Proteo de Dados pessoais - "LGPD") e a Lei
12.965/2014 (Marco Civil da Internet).

Em todas as nossas plataformas, est disponvel, de forma pblica, a nossa poltica de privacidade que explica como os dados pessoais so tratados nas nossas solues. Questionamentos relacionados Poltica de Privacidade da XX ou quaisquer outras dvidas relacionadas ao tema de segurana e proteo dos Dados Pessoais, podem ser enviadas atravs do e-mail de contato com o suporte
Certo de nossa compreenso, nos colocamos disposio para quaisquer esclarecimentos. Atenciosamente,

Em seguida, eu conferi se a falha tinha sido corrigida:

Falha resolvida

O que podemos aprender disso?

Nunca confie no usurio, lembre-se que qualquer validao que voc faa no lado do cliente suceptvel a mudanas pelo usurio. Valide tudo no back-end que seja necessrio validao e faa testes para que se certifique que o seu resultado seja o esperado. Poderamos trocar o id de int para um UUID? Depende, se for s pra isso, no uma boa ideia pois uma validao ja impossibilitaria isso e somente com essa mudana voc estaria resolvendo apenas uma parte do problema. Voc tem que entender os trade-offs ao se adotar essa tcnica. (Recomendo o artigo Pretende usar UUID como PK em vez de Int/BigInt no seu banco de dados? Pense novamente..., tem alguns insights muito bom)

Concluso

Obrigado por ler at aqui, esse um dos meus posts que faz parte do meu novo jeito de aprender usando learn in public.

Caso tenha interesse, voc pode dar uma conferida sobre o que isso: https://www.swyx.io/learn-in-public/

Pretendo continuar fazendo isso e j tenho o prximo post preparado.

Spoiler: Esse tambm envolveu minha universidade

:)


Original Link: https://dev.to/ianito/como-eu-descobri-uma-falha-de-seguranca-em-um-sistema-na-minha-universidade-21f

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To