{"id":143,"date":"2025-02-10T17:17:52","date_gmt":"2025-02-10T17:17:52","guid":{"rendered":"https:\/\/fikresekhel.com\/blog\/?p=143"},"modified":"2025-02-10T17:17:53","modified_gmt":"2025-02-10T17:17:53","slug":"caso-de-estudo-exposicao-de-e-mails-de-usuarios-atraves-de-api-graphql","status":"publish","type":"post","link":"https:\/\/fikresekhel.com\/blog\/nossos-cases\/caso-de-estudo-exposicao-de-e-mails-de-usuarios-atraves-de-api-graphql\/","title":{"rendered":"Caso de Estudo: Exposi\u00e7\u00e3o de E-mails de Usu\u00e1rios Atrav\u00e9s de API GraphQL"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Resumo do Caso<\/h2>\n\n\n\n<p>Durante uma auditoria de seguran\u00e7a realizada em um programa de recompensa por vulnerabilidades no dia\u00a0<strong>11 de fevereiro de 2025, \u00e0s 05:55 UTC<\/strong>, um pesquisador de seguran\u00e7a da\u00a0<strong>FikreSekhel<\/strong>\u00a0identificou uma falha cr\u00edtica que permitia a exposi\u00e7\u00e3o dos e-mails de usu\u00e1rios da plataforma\u00a0<strong>#privacidade-cliente<\/strong>. A vulnerabilidade foi prontamente corrigida, com um tempo total de resposta de\u00a0<strong>menos de 3 horas<\/strong>, e nenhuma explora\u00e7\u00e3o maliciosa foi detectada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Linha do Tempo do Incidente<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Data<\/th><th>Hor\u00e1rio (UTC)<\/th><th>A\u00e7\u00e3o<\/th><\/tr><tr><td>10\/01\/2025<\/td><td>15:13<\/td><td>C\u00f3digo contendo a vulnerabilidade foi implantado em produ\u00e7\u00e3o<\/td><\/tr><tr><td>11\/01\/2025<\/td><td>05:53<\/td><td>Vulnerabilidade reportada pela FikreSekhel<\/td><\/tr><tr><td>11\/01\/2025<\/td><td>05:55<\/td><td>Equipe de resposta a incidentes notificada<\/td><\/tr><tr><td>11\/01\/2025<\/td><td>05:57<\/td><td>Relat\u00f3rio triado e equipe completa acionada<\/td><\/tr><tr><td>11\/01\/2025<\/td><td>06:04<\/td><td>Investiga\u00e7\u00e3o detalhada iniciada<\/td><\/tr><tr><td>11\/01\/2025<\/td><td>08:30<\/td><td>Patch de corre\u00e7\u00e3o implantado em produ\u00e7\u00e3o<\/td><\/tr><tr><td>11\/02\/2020<\/td><td>08:44<\/td><td>Conclus\u00e3o da investiga\u00e7\u00e3o t\u00e9cnica<\/td><\/tr><tr><td>11\/02\/2020<\/td><td>23:54<\/td><td>Usu\u00e1rios impactados foram notificados<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Causa Raiz<\/strong><\/h2>\n\n\n\n<p>A plataforma&nbsp;<strong>#privacidade-cliente<\/strong>&nbsp;possui um sistema de convite que permite que propriet\u00e1rios de programas enviem convites a usu\u00e1rios para participa\u00e7\u00e3o em programas privados. O convite pode ser enviado por&nbsp;<strong>e-mail<\/strong>&nbsp;ou&nbsp;<strong>nome de usu\u00e1rio<\/strong>. Para preservar a privacidade,&nbsp;<strong>o endere\u00e7o de e-mail do destinat\u00e1rio n\u00e3o deveria ser exposto<\/strong>&nbsp;ao emissor da solicita\u00e7\u00e3o.<\/p>\n\n\n\n<p>Anteriormente, essa restri\u00e7\u00e3o era aplicada corretamente por meio de&nbsp;<strong>listas de controle de acesso (ACLs) na API REST<\/strong>. No entanto, a migra\u00e7\u00e3o para&nbsp;<strong>GraphQL<\/strong>&nbsp;introduziu uma camada de prote\u00e7\u00e3o distinta, e a valida\u00e7\u00e3o da ACL n\u00e3o foi implementada corretamente para a nova API.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee0\ufe0f&nbsp;<strong>Como a Vulnerabilidade Poderia Ser Explorada?<\/strong><\/h3>\n\n\n\n<p>Usu\u00e1rios poderiam explorar essa falha da seguinte forma:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>A plataforma\u00a0<strong>#privacidade-cliente<\/strong>\u00a0oferece ambientes de demonstra\u00e7\u00e3o para que clientes testem a ferramenta.<\/li>\n\n\n\n<li>Dentro desse ambiente, qualquer usu\u00e1rio poderia acessar a interface de relat\u00f3rios e convidar um participante externo.<\/li>\n\n\n\n<li>Se um usu\u00e1rio fosse convidado pelo nome de usu\u00e1rio, o\u00a0<strong>e-mail associado a essa conta seria indevidamente revelado no retorno da API GraphQL<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>C\u00f3digo Explorado<\/strong>:<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/graphql HTTP\/1.1\n{\n  \"query\": \"mutation Adicionar_Convidado($input:AddReportParticipantInput!) {\n      addReportParticipant(input:$input) {\n        clientMutationId,\n        was_successful,\n        errors { nodes { message } },\n        invitation { email, token }\n      }\n    }\",\n  \"variables\": {\n    \"input\": {\n      \"report_id\": \"Z2lkOi8vcHJpdmFjaWRhZGUvUmVwb3J0LzYyNjM3MQ==\",\n      \"username\": \"usuario_teste\"\n    }\n  }\n}<\/code><\/pre>\n\n\n\n<p>\ud83d\udd34&nbsp;<strong>Resultado esperado:<\/strong>&nbsp;O e-mail n\u00e3o deveria ser retornado.<br>\u26a0\ufe0f&nbsp;<strong>Resultado obtido:<\/strong>&nbsp;O e-mail do usu\u00e1rio foi exposto na resposta da API.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Resolu\u00e7\u00e3o e Recupera\u00e7\u00e3o<\/strong><\/h2>\n\n\n\n<p>\ud83d\udd39&nbsp;<strong>Corre\u00e7\u00e3o r\u00e1pida<\/strong>: A vulnerabilidade foi reproduzida pela equipe de resposta e a falha foi identificada e corrigida em menos de 3 horas. Foi adicionada a&nbsp;<strong>verifica\u00e7\u00e3o de ACLs dentro da API GraphQL<\/strong>, garantindo que e-mails s\u00f3 fossem vis\u00edveis para usu\u00e1rios autorizados.<\/p>\n\n\n\n<p>\ud83d\udd39&nbsp;<strong>An\u00e1lise de Impacto<\/strong>: Nenhuma evid\u00eancia de explora\u00e7\u00e3o maliciosa foi encontrada. Apenas o pesquisador de seguran\u00e7a&nbsp;<strong>FikreSekhel<\/strong>&nbsp;realizou testes, acessando os e-mails de dois usu\u00e1rios para validar a falha.<\/p>\n\n\n\n<p>\ud83d\udd39&nbsp;<strong>Pontua\u00e7\u00e3o CVSS<\/strong>: A vulnerabilidade foi classificada como&nbsp;<strong>Alta (8.3\/10)<\/strong>, considerando a exposi\u00e7\u00e3o de informa\u00e7\u00f5es sens\u00edveis.<\/p>\n\n\n\n<p>\ud83d\udd39&nbsp;<strong>B\u00f4nus de Reconhecimento<\/strong>: Devido \u00e0 rapidez na descoberta da falha (16 horas ap\u00f3s o c\u00f3digo ser implantado), foi concedido um&nbsp;<strong>b\u00f4nus de $1.000<\/strong>&nbsp;ao pesquisador.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Impacto da Vulnerabilidade<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>Atributo<\/td><td>Descri\u00e7\u00e3o<\/td><\/tr><tr><td><strong>E-mail<\/strong><\/td><td>Endere\u00e7o de e-mail de usu\u00e1rios da plataforma exposto sem autoriza\u00e7\u00e3o<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Embora o impacto tenha sido limitado a dois usu\u00e1rios, o risco potencial da vulnerabilidade era&nbsp;<strong>significativo<\/strong>, pois poderia permitir a coleta massiva de e-mails, facilitando ataques de&nbsp;<strong>phishing, engenharia social e sequestro de contas<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Medidas Preventivas<\/strong><\/h2>\n\n\n\n<p>A equipe de&nbsp;<strong>#privacidade-cliente<\/strong>&nbsp;adotou diversas medidas para evitar que esse tipo de vulnerabilidade ocorra no futuro:<\/p>\n\n\n\n<p>\u2705&nbsp;<strong>Implementa\u00e7\u00e3o da verifica\u00e7\u00e3o de ACLs no modelo de convite<\/strong>: A falha foi corrigida diretamente na camada de seguran\u00e7a do GraphQL.<\/p>\n\n\n\n<p>\u2705&nbsp;<strong>Mapeamento de Campos Sens\u00edveis no Banco de Dados<\/strong>: Criada uma&nbsp;<strong>lista de controle<\/strong>&nbsp;para identificar dados confidenciais e exigir valida\u00e7\u00f5es espec\u00edficas antes da publica\u00e7\u00e3o de novas APIs.<\/p>\n\n\n\n<p>\u2705&nbsp;<strong>Revis\u00e3o de C\u00f3digo e Seguran\u00e7a Antes do Deploy<\/strong>: Todo novo c\u00f3digo que interage com dados sens\u00edveis agora exige uma revis\u00e3o manual de seguran\u00e7a antes da implanta\u00e7\u00e3o.<\/p>\n\n\n\n<p>\u2705&nbsp;<strong>Monitoramento Cont\u00ednuo e Simula\u00e7\u00f5es de Ataques<\/strong>: Implementado um sistema que simula ataques em APIs cr\u00edticas para identificar falhas antes que possam ser exploradas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\ud83d\udccc Conclus\u00e3o<\/strong><\/h2>\n\n\n\n<p>Este caso refor\u00e7a a import\u00e2ncia da&nbsp;<strong>seguran\u00e7a em APIs<\/strong>&nbsp;e do&nbsp;<strong>Pentest cont\u00ednuo<\/strong>&nbsp;para a detec\u00e7\u00e3o e mitiga\u00e7\u00e3o de vulnerabilidades antes que possam ser exploradas. A r\u00e1pida resposta da equipe e a colabora\u00e7\u00e3o com especialistas em seguran\u00e7a garantiram que a falha fosse corrigida&nbsp;<strong>antes que qualquer dano significativo ocorresse<\/strong>.<\/p>\n\n\n\n<p>\ud83d\udd0e&nbsp;<strong>Sua empresa est\u00e1 protegida contra esse tipo de ataque?<\/strong>&nbsp;Se voc\u00ea utiliza&nbsp;<strong>APIs REST ou GraphQL<\/strong>, realizar testes de seguran\u00e7a regulares pode evitar que vulnerabilidades cr\u00edticas sejam exploradas.<\/p>\n\n\n\n<p>\ud83d\udca1&nbsp;<strong>Fale agora com nossos especialistas e agende uma auditoria de seguran\u00e7a para sua plataforma!<\/strong><\/p>\n\n\n\n<p>\ud83d\udcf2\u00a0<strong><a href=\"https:\/\/wa.me\/5514998130671?text=Ol\u00e1,%20gostaria%20de%20mais%20informa\u00e7\u00f5es!\">Clique aqui e converse com um especialista no WhatsApp!<\/a><\/strong><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Resumo do Caso Durante uma auditoria de seguran\u00e7a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":144,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-143","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nossos-cases"],"_links":{"self":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/comments?post=143"}],"version-history":[{"count":1,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/143\/revisions"}],"predecessor-version":[{"id":145,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/posts\/143\/revisions\/145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media\/144"}],"wp:attachment":[{"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/media?parent=143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/categories?post=143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fikresekhel.com\/blog\/wp-json\/wp\/v2\/tags?post=143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}