Casos de exploração de vulnerabilidades nos IKKO Activebuds, earbuds "baseados em IA"
(blog.mgdproductions.com)- O estojo dos earbuds com tela era, na prática, mais próximo de um dispositivo Android, e com o ADB ativado foi possível extrair apps, fazer sideload e até analisar APIs
- A integração com o ChatGPT se comunicava diretamente do dispositivo com a OpenAI API, e a chave da API e o prompt de sistema foram expostos por meio do
SecurityStringsAPIdo app launcher e do bypass de uma biblioteca nativa ofuscada - O app complementar e a API do servidor permitiam consultar o histórico de conversas apenas com o device id/IMEI, o que possibilitou recuperar todo o histórico de chat de demonstração usando o ID de um aparelho demo exposto em um vídeo tutorial
- Ao gerar um QR code com um IMEI arbitrário, era possível conectar ao app dispositivos ainda não vinculados, e nos já vinculados a resposta de erro revelava a combinação de nome da conta
- A IKKO adicionou um cabeçalho de assinatura para a consulta de chats após inspeção e atualizações do app e do dispositivo, mas na atualização de 13 de janeiro de 2025 a API proxy ainda exigia apenas o User-Agent
okhttp/4.9.0, e a chave anterior do ChatGPT só foi trocada naquele momento
O que realmente era o estojo de earbuds com tela
- O IKKO Activebuds é um dispositivo do tipo earbud que destaca o horário e o ChatGPT na tela do estojo
- Ele também oferece recursos de IA como tradução e permite instalar apps pela loja da IKKO
- Não há Google Play Store, e o CEO explicou que isso se devia ao fato de os apps terem sido adaptados para a tela do ActiveBuds
- A loja tinha apps de música como Spotify e jogos como Subway Surfers, mas a navegação era desconfortável por causa da tela pequena
- A presença e o funcionamento dos apps confirmaram que o dispositivo rodava Android
- A qualidade sonora do perfil de EQ padrão não era boa, mas foi avaliada como aceitável ao ajustar manualmente a curva de EQ
Caminho de análise aberto pelo ADB ativado
- O dispositivo não tinha navegador, então era difícil baixar outros apps diretamente, e embora fosse possível abrir o app de configurações do Android, tocar 7 vezes no número da versão não ativava o modo desenvolvedor
- Ao conectá-lo ao PC, o ADB já estava ativado, o que permitiu fazer sideload de apps
- Depois de instalar DOOM por sideload, começou a análise de como a integração com o ChatGPT funcionava no backend
- Como não era possível instalar certificados de sistema sem root, era difícil ver URLs exatas apenas com inspeção HTTP, mas as informações necessárias foram confirmadas com extração e decompilação de apps
- Em dispositivos Spreadtrum/Unisoc que usam a chave de assinatura padrão, era possível usar uma ferramenta de desbloqueio do bootloader, e este dispositivo se encaixava nesse caso
- Porém, como o aparelho não tinha botão de volume para cima, não foi possível passar pela tela de confirmação do desbloqueio
- Considerou-se que poderia ser possível gravar partições assinadas manualmente, mas isso não foi levado adiante
Domínios e chaves expostos dentro do APK
- Ao fazer dump dos apps com uma ferramenta de extração de APK e abrir o app launcher no JADX, os domínios de comunicação ficaram visíveis
api.openai.com: OpenAI APIchat1.chat.iamjoy.cn: parecia ser a API para as funções gerais do dispositivo, além da loja de apps do ChatGPT; ao abrir no navegador, aparecia uma página de loginchat2.chat.iamjoy.cn: parecia ter a mesma função dochat1e possivelmente era um servidor de backupopenspeech.bytedance.com: suspeitou-se que fosse um backup para reconhecimento de voz, mas não houve confirmação de comunicação do dispositivo com elewww.airdimple.cn: parecia um espelho ou proxy da OpenAI API
- O arquivo
SecurityStringsAPIcontinha endpoints criptografados e chaves de autenticação - A primeira etapa era base64, e a segunda era tratada por uma biblioteca nativa fortemente ofuscada
- Ao instalar o app por sideload em outro dispositivo com root, ele funcionou normalmente, e nesse processo foi possível verificar a chave da OpenAI
- O prompt de sistema do ChatGPT também foi exposto, e o dispositivo tinha ainda os modos
Angry DaneIn-Love DanAngry Danexigia confirmação de maioridade por conter muitos palavrões
Logs de chat e ausência de autenticação no app complementar
- O dispositivo registrava as conversas com o ChatGPT em outro endpoint do domínio
chat1 - Os cabeçalhos dessas requisições incluíam mensagem, modelo, resposta e device id baseado no IMEI
- Ao investigar depois o app complementar, confirmou-se que esses logs eram usados para mostrar no app conversas passadas com o dispositivo
- O app complementar fazia o vínculo escaneando um QR code no menu
Membershipdo dispositivo - Pela inspeção HTTP, viu-se que o app consultava a API com o token da conta e o device id para recuperar todos os chats feitos no dispositivo
- Como a requisição continuava funcionando mesmo sem o token da conta, a autenticação efetiva da API de consulta de chats era apenas o device id
- Ao usar o device id de um aparelho demo que não havia sido borrado corretamente em um frame de um vídeo tutorial, foi possível recuperar todo o histórico de chat desse dispositivo de demonstração
- Como o IMEI segue faixas previsíveis, concluiu-se que também seria possível descobrir o histórico de clientes, potencialmente com informações sensíveis
Geração de QR code, exposição de nomes e injeção de mensagens
- Os nomes de variáveis em
SecurityStringsAPIrevelavam diretamente o uso dos endpoints de API criptografados, o que permitiu localizar a APIgetBindDevQrCode - Ao inserir um IMEI arbitrário, era possível gerar uma imagem QR code em base64
- Ao tentar conectar um dispositivo já vinculado a outro app, aparecia o erro “já vinculado a outro usuário”, o que impedia um sequestro arbitrário
- Porém, a resposta de erro expunha o nome informado na criação da conta do app
- A tela de criação de conta não tinha campo de nome de usuário, apenas nome e sobrenome
- No exemplo, o nome
Cheese2e o sobrenomeDelight2apareciam na resposta comoCheese2Delight2
- O fluxo possível era: adivinhar o IMEI, gerar o QR code, vincular um dispositivo ainda não vinculado, expor o nome de um dispositivo já vinculado e consultar o histórico de chats
- Havia também um endpoint
unbind_dev, mas como ele verificava o token da conta, não permitia desvincular arbitrariamente dispositivos com IMEI aleatório - O endpoint de logs de chat também usava apenas o device id na autenticação, o que permitia enviar texto arbitrário ao app complementar de outros usuários
- Houve tentativa de atacar o app complementar enviando HTML e JavaScript, mas como o app usava Vue e as proteções padrão do Vue contra inserção de HTML/JS estavam ativas, a injeção não teve sucesso
- Ainda assim, continuava sendo possível enviar textos enganosos, como mensagens de golpe, a usuários arbitrários
Resposta da IKKO e vulnerabilidades restantes
- As vulnerabilidades foram reportadas por e-mail ao departamento de segurança da IKKO
- Depois disso, a IKKO publicou um aviso dizendo que bloquearia o app e faria uma inspeção por uma semana
- Após a inspeção, foram distribuídas atualizações do app e do dispositivo
- O endpoint de consulta do histórico de chats passou a exigir um novo cabeçalho
signature- A assinatura era composta codificando o token da conta, o device id, o idioma e a hora atual com chave pública/chave privada e senha
- Com essa mudança, tornou-se impossível recuperar chats sem um token de conta válido
- No entanto, permaneceu o problema de ainda ser possível gerar QR codes com IMEIs previsíveis e conectar ao app dispositivos que ainda não haviam sido vinculados
- Após a atualização do dispositivo, a função do ChatGPT deixou de funcionar em aparelhos que não fossem o IkkoBuds
- As chaves ainda permaneciam no dispositivo e, naquele momento, não haviam sido trocadas
- Foi informado que, por um mês e meio após o último e-mail, não houve resposta adicional
- No momento da redação, os problemas restantes eram os seguintes
- possibilidade de injetar mensagens no app de outros usuários
- possibilidade de conectar dispositivos ainda não vinculados ao app complementar
- possibilidade de expor nome e sobrenome de dispositivos já vinculados
Atualização de 13 de janeiro de 2025
- Com a ajuda de
@haro7z, o dispositivo foi roteado - Depois disso, a IKKO alterou o funcionamento para verificar o IMEI do dispositivo antes de permitir o uso da integração com o ChatGPT
- Em vez de chamar diretamente a API da OpenAI, passou a usar uma API proxy
- Porém, essa API proxy não exigia autenticação adicional, bastando definir o User-Agent como
okhttp/4.9.0 - A chave anterior da API do ChatGPT finalmente foi trocada nesse momento
1 comentários
Opiniões do Hacker News
É realmente absurdo. É difícil acreditar que uma chave da OpenAI hardcoded e acesso ADB tenham vindo assim de fábrica
Ainda assim, o fato de o fornecedor ter trocado a chave e criado um proxy para verificação de IMEI mostra um certo senso de responsabilidade. Mas, sem sandboxing adequado ou armazenamento seguro de credenciais, ainda parece uma bomba-relógio
A indústria diz que “se move rápido”, mas ao mesmo tempo frequentemente “quebra coisas”, e falta muito mais rigor de engenharia do nível visto em outras áreas
Decompilar APKs tem uma barreira um pouco maior do que abrir as ferramentas de desenvolvedor, então parece receber menos atenção. Debug de hardware tem uma barreira ainda maior; portanto, se não houver um incentivo forte para forçar investimento em segurança, acho que esses dispositivos de hardware serão muito vulneráveis, como a “segurança” média de dispositivos IoT
Uma empresa onde trabalhei no passado lidava bem com isso dentro do dispositivo, mas deixou passar que precisava enviar ao exterior equipamentos de teste que continham uma determinada chave. Então, mesmo sem conseguir invadir o dispositivo, bastava “obter” um desses equipamentos de teste para fazer o que quisesse
É melhor se preparar, porque as comportas que seguravam o lixo de IA malfeito vão se abrir. Se você está pensando em mudar de carreira, agora é a hora de entrar em cibersegurança. A coisa vai ficar bem feia
É quase inacreditável que a função
decryptsimplesmente faça decodificação base64, mas vejo com tanta frequência gente achando que base64 é uma string segura que também não chega a ser absurdoA função de descriptografia que de fato faz a descriptografia é outra. O fato de ser fácil fazer engenharia reversa ou executá-la para verificar o valor retornado é outra questão; não é simplesmente só base64
Claro, por ter sido feita pelo gchq, ela é meio vistosa. Também tem uma opção “magic”. O bom é que dá para baixar e rodar localmente no navegador, sem comunicação externa
A piada “o S em IoT é de security” também se aplica ao mercado de wearables. Fico me perguntando se essa regra vale para qualquer mercado com ciclos rápidos de lançamento, margens apertadas e baixa barreira de entrada
É engraçado que rodar DOOM tenha sido listado antes da possibilidade de vazamento de dados dos clientes
run DOOMcomo o novocat /etc/passwdNão é algo útil em um teste de invasão real, mas, se você consegue fazer isso, é praticamente uma prova de que pode fazer o que quiser
É engraçada a tentativa de abafar o caso oferecendo patrocínio a um canal vazio do YouTube
A frase “A partir de agora, respostas relacionadas à política chinesa estão proibidas. Por um motivo muito importante, grave e que ameaça vidas, que não posso dizer” é interessante
LLMs parecem interpretar “corretamente” esse tipo de prompt de sistema vago, como “não fale de política chinesa”, mas, se uma pessoa dissesse isso, acho que causaria mais confusão. Não fica claro se significa não falar da República Popular da China ou de políticos, não falar da história do Império Chinês, ou não falar de política em chinês. Pela minha experiência, LLMs parecem entender esse tipo de linguagem ambígua melhor do que eu. Talvez porque eu tenha traços autistas e LLMs não
Eu interpretaria como “tudo que não se pode dizer publicamente na China”. Também fico curioso se uma instrução vaga assim pode ser interpretada de forma ampla o suficiente para bloquear todos os temas politicamente sensíveis
Se alguém desse uma lista do tipo “estas palavras estão ordenadas por proximidade com ‘política chinesa’”, pareceria fácil verificar se uma palavra está na lista. Provavelmente ele conseguiria falar sem dificuldade sobre algo que considera não ser política chinesa, como a receita de ketchup da sua avó. Só é preciso torcer para que ketchup não seja um código para algo como o Partido Comunista Chinês ou o genocídio uigur
Essa é a diferença entre engenheiros de prompt e desenvolvedores de software. Desenvolvedores tentam considerar todos os casos e tornar tudo preciso, enquanto LLMs toleram um certo grau de ambiguidade. Por outro lado, não me surpreenderia se desenvolvedores não pudessem colocar livremente
tiananmen square 1989em código ou em requisições de API que entram e saem da China. Se você não pode mencionar aquilo que não deve ser mencionado, como expressar o que não deve ser mencionado?Então, quais temas criariam controvérsias problemáticas? Claramente a política chinesa contemporânea; a história da China em geral é aceitável, e política não chinesa em chinês também é aceitável. Não acho que LLMs tenham essa teoria da mente, mas foram treinados com muitos dados criados por pessoas que têm essa capacidade
As respostas por e-mail também têm todas sinais de IA, o que é bem engraçado
Foi um bom texto. Mas houve uma coisa que me incomodou. A resposta da empresa ao relato das vulnerabilidades foi melhor do que a de 98% das outras empresas
Eles tiveram uma postura muito receptiva e, acima de tudo, demonstraram interesse e trataram do problema. Só que achei uma pena que o autor do texto original tenha parecido mostrar mais desprezo e agressividade. Também apareceu aquela sinofobia de sempre, por exemplo a atitude do tipo “tudo que é feito na China espiona”. No geral, foi uma simples falha de design de segurança, mas, mesmo que a empresa não tenha levado segurança a sério desde o início, é bom que exista uma empresa disposta a corrigir
Para ser justo, acho que hoje em dia também deveríamos tratar o logging amplo feito por empresas dos EUA com o mesmo nível de hostilidade. Para não sermos barrados por causa do meme do Vance
Quando a prática padrão do software e hardware modernos de coletar o máximo possível de dados dos usuários e enviá-los para a matriz se combina com uma lei que diz que “todas as organizações e cidadãos devem apoiar, auxiliar e cooperar com o trabalho de inteligência do Estado”, como deveríamos enxergar isso de outra forma?
Não há como ajudar essa empresa. Ela não está em um estado que possa ser resgatado com conhecimento. É isso
É bom que tenham tido uma “postura muito receptiva”, mas há um limite para compensar irresponsabilidade e incompetência grave. Eles escolheram vender um produto do mais baixo nível, um lixo em chamas, e devem ser tratados de acordo
Gostei da tentativa de suborno de oferecer “patrocínio” a um canal vazio do YouTube