{"id":9058,"date":"2016-12-05T19:57:59","date_gmt":"2016-12-05T22:57:59","guid":{"rendered":"http:\/\/www.ethicalhacker.com.br\/site\/?p=9058"},"modified":"2019-10-22T21:06:21","modified_gmt":"2019-10-23T00:06:21","slug":"o-airdroid-tem-uma-vulnerabilidade-que-praticamente-cede-acesso-total-ao-seu-celular","status":"publish","type":"post","link":"https:\/\/www.ethicalhacker.com.br\/site\/2016\/12\/exploits\/o-airdroid-tem-uma-vulnerabilidade-que-praticamente-cede-acesso-total-ao-seu-celular\/","title":{"rendered":"An\u00e1lise de vulnerabilidades no AirDroid"},"content":{"rendered":"<p style=\"text-align: justify;\">An\u00e1lise de v\u00e1rias vulnerabilidades no AirDroid<\/p>\n<p style=\"text-align: justify;\">Relatado por: Simone Margaritelli<br \/>\nPesquisador de Seguran\u00e7a da Zimperium zLabs<\/p>\n<p style=\"text-align: justify;\">Editar: 11:02 PDT: adicionado c\u00f3digo POC explora\u00e7\u00e3o abaixo da cronologia de divulga\u00e7\u00e3o.<br \/>\nEditar: 06:01 PM PDT: linha de tempo editada para refletir as datas de lan\u00e7amento 4.0.0 e 4.0.1 e confirmando que ambas as vers\u00f5es ainda s\u00e3o vulner\u00e1veis.<\/p>\n<p style=\"text-align: justify;\">Background<\/p>\n<p style=\"text-align: justify;\">AirDroid \u00e9 uma ferramenta de gerenciamento remoto popular para Android. Tem uma base estimada de mais de 50 milh\u00f5es de dispositivos de acordo com a Google Play Store.<br \/>\nNossa pesquisa destaca como os canais de comunica\u00e7\u00e3o inseguros tornam milh\u00f5es de usu\u00e1rios vulner\u00e1veis \u200b\u200ba ataques Man-in-the-Middle (MITM), vazamento de informa\u00e7\u00f5es e sequestro remoto de atualiza\u00e7\u00e3o do APK, o que leva a uma execu\u00e7\u00e3o remota de c\u00f3digo por parte mal-intencionada. O invasor explora as funcionalidades internas do aplicativo e as usa contra seus usu\u00e1rios.<\/p>\n<p style=\"text-align: justify;\">Produtos Afetados<\/p>\n<p style=\"text-align: justify;\">AirDroid &lt;= 4.0 (vers\u00e3o mais recente)<br \/>\nHttps:\/\/www.airdroid.com\/<br \/>\nHttps:\/\/play.google.com\/store\/apps\/details?id=com.sand.airdroid<\/p>\n<p style=\"text-align: justify;\">Criptografia DIY e canais de comunica\u00e7\u00f5es inseguros<\/p>\n<p><iframe loading=\"lazy\" src=\"http:\/\/www.youtube.com\/embed\/HfkhApppNZI\" width=\"590\" height=\"391\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p style=\"text-align: justify;\">Resumo<\/p>\n<p style=\"text-align: justify;\">AirDroid depende de canais de comunica\u00e7\u00f5es inseguros, a fim de enviar os mesmos dados utilizados para autenticar o dispositivo para o seu servidor de estat\u00edsticas. Essas solicita\u00e7\u00f5es s\u00e3o criptografadas com DES (modo ECB), por\u00e9m a chave de criptografia \u00e9 codificada dentro da pr\u00f3pria aplica\u00e7\u00e3o (assim conhecida por um invasor). Qualquer parte mal-intencionada na mesma rede do dispositivo de destino pode executar um ataque\u00a0<span style=\"color: #1b2026;\">man in the middle<\/span>\u00a0para obter credenciais de autentica\u00e7\u00e3o e representar o usu\u00e1rio para solicita\u00e7\u00f5es adicionais.<\/p>\n<p style=\"text-align: justify;\">Impacto<\/p>\n<p style=\"text-align: justify;\">Uma parte mal-intencionada pode executar um ataque de rede MITM e capturar as informa\u00e7\u00f5es de autentica\u00e7\u00e3o do dispositivo, conforme mostrado na se\u00e7\u00e3o &#8220;Detalhes&#8221; da primeira solicita\u00e7\u00e3o HTTP que o aplicativo executa.<br \/>\nEsta solicita\u00e7\u00e3o HTTP pode ser descriptografada em tempo de execu\u00e7\u00e3o usando a chave <strong>890jklms<\/strong> codificada dentro do aplicativo e os campos de autentica\u00e7\u00e3o analisados \u200b\u200ba partir do JSON resultante.<br \/>\nTendo essas informa\u00e7\u00f5es, o invasor agora pode personificar o dispositivo da v\u00edtima e executar v\u00e1rias solicita\u00e7\u00f5es HTTP ou HTTPS em seu nome para os pontos de extremidade AirDroid API.<br \/>\nPor exemplo, uma carga \u00fatil como a seguinte (criptografada em DES com a mesma chave exata) pode ser enviada para o n\u00f3 de extremidade http:\/\/id4.airdroid.com\/p14\/\/user\/getuserinfoviadeviceid.html:<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture1.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1670 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture1-300x268.png\"  alt=\"picture1\" width=\"300\" height=\"268\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"color: #1b2026;\">O servidor responder\u00e1 com as informa\u00e7\u00f5es do usu\u00e1rio, incluindo seu e-mail e hash de senha:<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture2.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1671 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture2-290x300.png\"  alt=\"picture2\" width=\"290\" height=\"300\" \/><\/a><\/p>\n<p style=\"color: #1b2026;\">Este \u00e9 o log de sa\u00edda do nosso m\u00f3dulo proxy POC bettercap:<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture3.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1672 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture3-289x300.png\"  alt=\"picture3\" width=\"289\" height=\"300\" \/><\/a><\/p>\n<p style=\"color: #4b4b4b; text-align: justify;\">Al\u00e9m disso, um invasor que executa um ataque MITM e redireciona o tr\u00e1fego HTTP para um proxy mal-intencionado transparente, pode modificar a resposta para a solicita\u00e7\u00e3o \/ phone \/ vncupgrade que \u00e9 normalmente usada pelo aplicativo para verificar atualiza\u00e7\u00f5es de addons:<\/p>\n<p style=\"color: #4b4b4b; text-align: justify;\"><span style=\"color: #1b2026;\">GET \/p14\/phone\/vncupgrade\/?q=<\/span><strong style=\"color: #1b2026;\">[DES ENCRYPTED PAYLOAD]<\/strong><span style=\"color: #1b2026;\">&amp;ver=20151 HTTP\/1.1<\/span><br style=\"color: #1b2026;\" \/><span style=\"color: #1b2026;\">Host: srv3.airdroid.com<\/span><br style=\"color: #1b2026;\" \/><span style=\"color: #1b2026;\">Connection: close<\/span><br style=\"color: #1b2026;\" \/><span style=\"color: #1b2026;\">User-Agent: Apache-HttpClient\/UNAVAILABLE (java 1.4)<\/span><\/p>\n<p style=\"color: #1b2026;\">Injetar uma nova atualiza\u00e7\u00e3o, executando remotamente o c\u00f3digo personalizado no dispositivo de destino, \u00e9 apenas uma quest\u00e3o para modificar essa resposta:<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture4.apng_.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1673 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture4.apng_-300x172.png\"  alt=\"picture4-apng\" width=\"300\" height=\"172\" \/><\/a><\/p>\n<p style=\"color: #1b2026;\">Para algo como o seguinte:<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture4b.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1674 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture4b-300x124.png\"  alt=\"picture4b\" width=\"300\" height=\"124\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">AirDroid ir\u00e1 notificar o usu\u00e1rio de uma atualiza\u00e7\u00e3o dispon\u00edvel, baixar o pacote RCE.apk e, eventualmente, solicitar ao usu\u00e1rio para sua instala\u00e7\u00e3o no dispositivo de destino.<\/p>\n<p style=\"text-align: justify;\">Detalhes<\/p>\n<p style=\"text-align: justify;\">A AirDroid confia em endpoints HTTPS API seguros para a maioria de suas funcionalidades, mas durante nossa an\u00e1lise descobrimos que outros canais inseguros s\u00e3o usados para tarefas espec\u00edficas. Por exemplo, o aplicativo envia estat\u00edsticas para http:\/\/stat3.airdroid.com como podemos ver na classe com.sand.airdroid.configs.urls.Release:<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture5a.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1675 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture5a-300x147.png\"  alt=\"picture5a\" width=\"300\" height=\"147\" \/><\/a><\/p>\n<p style=\"color: #1b2026;\">Ao usar este ponto de extremidade, o aplicativo se baseia em DES criptografados JSON de cargas \u00fateis, a fim de adicionar uma camada m\u00ednima de seguran\u00e7a. Voc\u00ea pode ver no objeto com.sand.common.Jsonable que \u00e9 usado como uma classe base para cada carga JSON sendo enviada para o servidor de stats:<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture5b.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1676 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture5b-300x104.png\"  alt=\"picture5b\" width=\"300\" height=\"104\" \/><\/a><\/p>\n<p style=\"color: #1b2026;\">Uma vez que o buildParamQ \u00e9 executado na carga \u00fatil, toda a solicita\u00e7\u00e3o HTTP ser\u00e1 semelhante a:<\/p>\n<p style=\"color: #1b2026;\">GET \/phone\/open\/?q=<strong>[HEX ENCODED DES ENCRYPTED PAYLOAD]<\/strong>&amp;ver=20151 HTTP\/1.1<br \/>\nHost: stat3.airdroid.com<br \/>\nConnection: close<br \/>\nUser-Agent: Apache-HttpClient\/UNAVAILABLE (java 1.4)<\/p>\n<p style=\"color: #1b2026;\">Infelizmente, sendo a chave usada para criptografia DES codificada no APK, voc\u00ea pode ver na classe com.sand.common.DesCrypto :<\/p>\n<p style=\"color: #1b2026;\"><a style=\"font-weight: bold;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture6.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1677 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture6-268x300.png\"  alt=\"picture6\" width=\"268\" height=\"300\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Apesar de seu nome, o m\u00e9todo sandDecrypt inverte esses n\u00fameros e hexadecimal decodificando-os, retornando a chave de criptografia final: 890jklms<\/p>\n<p>Uma vez desencriptada, a carga \u00e9 enviada para o servidor de estat\u00edsticas. Essa carga \u00e9 semelhante a esta:<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a style=\"font-weight: bold; color: #1b2026;\" href=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture7.png\" class=\"gallery_colorbox\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1678 aligncenter\" src=\"http:\/\/blog.zimperium.com\/wp-content\/uploads\/2016\/12\/Picture7-242x300.png\"  alt=\"picture7\" width=\"242\" height=\"300\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Os campos account_id, androidid, device_id, imei, imsi, logic_key e unique_id s\u00e3o usados para todas as outras solicita\u00e7\u00f5es de API, em HTTP ou HTTPS, para autenticar o dispositivo e identific\u00e1-lo de forma exclusiva.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Mitiga\u00e7\u00e3o<\/p>\n<p>&nbsp;<\/p>\n<p>Utilize apenas canais de comunica\u00e7\u00e3o seguros (HTTPS)<br \/>\nVerifique a chave p\u00fablica remota (key pinning) para evitar SSL MITM.<br \/>\nPara criptografia adicional, use mecanismos seguros de troca de chaves como Diffie-Hellman em vez de chaves de criptografia codificadas no aplicativo.<br \/>\nAproveite e verifique assinaturas digitais para arquivos de atualiza\u00e7\u00e3o.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<div id=\"gt-src-c\" class=\"g-unit\" style=\"color: #777777;\"><\/div>\n<div id=\"gt-res-c\" class=\"g-unit\" style=\"color: #777777;\">\n<div id=\"gt-res-p\">\n<div id=\"gt-res-data\">\n<div id=\"gt-res-wrap\">\n<div id=\"gt-res-content\">\n<div dir=\"ltr\"><span id=\"result_box\" lang=\"pt\" style=\"color: #222222;\" tabindex=\"-1\">Recomenda\u00e7\u00f5es<br \/>\n<\/span><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><span id=\"result_box\" lang=\"pt\" style=\"color: #222222;\" tabindex=\"-1\"><br \/>\nUse a solu\u00e7\u00e3o de prote\u00e7\u00e3o contra amea\u00e7as m\u00f3veis como ZIPS de Zimperium para prevenir proativamente os ataques de viola\u00e7\u00e3o de rede e fornecer per\u00edcias para entender o impacto potencial para o dispositivo do funcion\u00e1rio.<\/span><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><span id=\"result_box\" lang=\"pt\" style=\"color: #222222;\" tabindex=\"-1\"><br \/>\nDesinstale ou desative o AirDroid at\u00e9 que uma corre\u00e7\u00e3o esteja dispon\u00edvel.<\/span><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><\/div>\n<div dir=\"ltr\"><span style=\"color: #000000;\"><strong>Fonte :\u00a0<a title=\"Malware\" href=\"http:\/\/blog.zimperium.com\/analysis-of-multiple-vulnerabilities-in-airdroid\/\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/blog.zimperium.com\/analysis-of-multiple-vulnerabilities-in-airdroid\/<\/a><\/strong><\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>An\u00e1lise de v\u00e1rias vulnerabilidades no AirDroid Relatado por: Simone Margaritelli Pesquisador de Seguran\u00e7a da Zimperium zLabs Editar: 11:02 PDT: adicionado c\u00f3digo POC explora\u00e7\u00e3o abaixo da cronologia de divulga\u00e7\u00e3o. Editar: 06:01 PM PDT: linha de tempo editada para refletir as datas de lan\u00e7amento 4.0.0 e 4.0.1 e confirmando que ambas as vers\u00f5es ainda s\u00e3o vulner\u00e1veis. Background [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":9059,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[89,100,21,105],"tags":[],"class_list":["post-9058","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-basico","category-diversos","category-exploits","category-noticias"],"_links":{"self":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/9058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/comments?post=9058"}],"version-history":[{"count":8,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/9058\/revisions"}],"predecessor-version":[{"id":10279,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/posts\/9058\/revisions\/10279"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media\/9059"}],"wp:attachment":[{"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/media?parent=9058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/categories?post=9058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ethicalhacker.com.br\/site\/wp-json\/wp\/v2\/tags?post=9058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}