Detecte mudanças de proprietário nas extensões do Chrome instaladas
(github.com/classvsoftware)- Under New Management é uma extensão que verifica periodicamente se as informações do desenvolvedor das extensões de navegador instaladas mudaram na Chrome Web Store ou no Firefox Add-ons
- Quando as informações do desenvolvedor mudam, ela exibe um selo vermelho no ícone da extensão para que o usuário saiba da mudança de propriedade
- A necessidade vem do problema de desenvolvedores de extensões receberem ofertas de aquisição com frequência, e de que, na imensa maioria dos casos, o comprador pretende abusar dos usuários existentes
- O usuário pode não saber que a propriedade de uma extensão instalada mudou e que ela pode ter sido comprometida, então a ferramenta oferece uma oportunidade para avaliar a situação
- Como o navegador impõe restrições à modificação de domínios de marketplaces de extensões, a verificação das informações do desenvolvedor é delegada ao servidor da API ExBoost
Detecção de mudança de propriedade de extensões
- Under New Management verifica ocasionalmente se as informações do desenvolvedor das extensões instaladas foram alteradas nas lojas Chrome Web Store ou Firefox Add-ons
- Se houver mudanças, um selo vermelho aparece no ícone da extensão, permitindo que o usuário perceba a mudança de propriedade
- O objetivo é dar ao usuário a oportunidade de fazer um julgamento informado sobre o software que usa
Por que isso é necessário
- Desenvolvedores de extensões recebem continuamente ofertas para comprar suas extensões
- O README afirma que, em quase todos os casos, o comprador tem o objetivo de enganar os usuários existentes
- O usuário pode não saber que a propriedade de uma extensão instalada mudou e que, agora, ela pode ter sido comprometida
Como instalar
- Instalação no Chrome: Chrome Web Store
- Instalação no Firefox: Firefox Add-ons
- Ou baixe a prebuilt release, extraia o arquivo
.zipe carregue o diretóriodistno navegador
Build a partir do código-fonte
- Under New Management usa Plasmo
pnpm install: instala as dependênciaspnpm dev: executa localmentepnpm build --zip: gera o build de releasepnpm build --target=firefox-mv3: gera o build para Firefox
Por que um servidor externo é necessário
- O navegador tem regras especiais para modificar domínios de marketplaces de extensões
- Por exemplo, não é possível configurar regras
declarative_net_requestparachromewebstore.google.com - Por isso, a verificação das informações do desenvolvedor é delegada ao servidor da API ExBoost
1 comentários
Opiniões no Hacker News
O ID de uma extensão é derivado da chave privada enviada junto quando o desenvolvedor a publica pela primeira vez na app store; se um ZIP enviado depois contiver um
key.pemdiferente, o ID muda.Porém, se não houver
key.pem, o ID da extensão é mantido. Então, se o ID mudar, é possível que o proprietário tenha mudado, mas o proprietário original também pode ter passado a chave privada para o novo proprietário. Como o Google não exige a chave privada a cada upload, o novo proprietário pode distribuir alterações mesmo sem essa chave.O ecossistema de extensões é interessante, então também estou criando ferramentas nessa área. Quero criar um repositório no GitHub para uma extensão específica, registrar cada atualização como uma alteração no repositório e então executar um analisador estático e uma análise dinâmica de taint para rastrear se entradas do usuário fluem para sinks perigosos como
evaloupostMessage: https://github.com/milesrichardson/crxmonDurante a negociação, eu disse que tiraria a extensão do ar e entregaria todo o código-fonte para que a pessoa a distribuísse por conta própria, mas ela esperava que eu entregasse também as credenciais da conta de extensões do Opera. No fim, desisti do negócio; e concordo que ferramentas assim são úteis até certo ponto, mas um scanner de malware para extensões seria melhor.
O desenvolvedor deveria assinar a extensão ou o manifesto com a chave privada, e compartilhar a chave pública ou incluí-la no upload. As atualizações também deveriam continuar sendo assinadas com a mesma chave privada e, enquanto a chave não mudar, seria possível verificar, pela chave pública do primeiro upload, que a mesma chave privada foi usada. Se a chave pública é incluída nos uploads posteriores não é algo essencial. Se você vender ou compartilhar a chave privada, outra pessoa pode criar atualizações assinadas legitimamente, mas esse é um risco decorrente de o signatário não manter a chave privada em segredo. Se o Google, ou qualquer um, compartilha a chave privada, a garantia de origem da extensão desmorona.
Mas fico me perguntando se é realmente possível o Google permitir que um novo proprietário distribua alterações sem a chave privada. A Chrome Web Store é extremamente exigente até com coisas triviais, então é estranho que não se preocupe com isso.
Uso 3 extensões publicadas apenas para testadores e as uso para instalá-las facilmente em várias máquinas, sem modo de desenvolvedor nem
rsync/robocopy. Mas neste fim de semana o Chrome desativou todas elas em apenas uma máquina, dizendo que “não estão listadas na Chrome Web Store e podem ter sido adicionadas sem o conhecimento do usuário”. Nem dá para reativá-las à força; na loja, elas aparecem como “desativadas” e mostram “ativar agora”, mas só o banner desaparece e volta quando atualizo a página. Esse perfil do Chrome está conectado com uma conta na lista de permissões.O selo da página da Chrome Web Store mostra que minha conta de desenvolvedor não tem punições e está em bom estado. Se eu não estivesse conectado com o e-mail da lista de permissões, nem conseguiria ver essa página. Não faz sentido que eles “se preocupem tanto” com isso e, ao mesmo tempo, permitam atualizações sem chave.
A CWS nunca deve alterar o ID de uma extensão existente, porque o ID identifica a extensão de forma única. Se o ID mudar, o cliente Chrome não consegue solicitar atualizações para aquela extensão, e a CWS e o Chrome não oferecem um recurso para migrar usuários de uma extensão para outra.
Até onde sei, depois da primeira submissão, a CWS recusaria um ZIP que contivesse
key.pem. Se o ID da extensão mudou, então não é a mesma extensão. É basicamente correto dizer que um novo proprietário pode distribuir alterações mesmo sem o PEM, mas, se o desenvolvedor assinou diretamente a extensão enviada à CWS, não é possível atualizá-la sem o PEM. Sinceramente, nem sei se esse recurso ainda existe; no passado, era uma armadilha enorme, em que desenvolvedores perdiam a chave privada usada no upload e acabavam perdendo toda a base instalada.Quase todo mundo acabaria concordando se o preço fosse certo; a diferença entre as pessoas é apenas quanto elas precisariam receber.
Alguns meses atrás, criei uma extensão gratuita e open source que pula rapidamente anúncios do YouTube, compartilhei aqui e ela chegou à primeira página.
Em menos de uma semana, uma pessoa que havia comentado no meu post Show HN copiou a extensão e promoveu a própria versão no Reddit; ela viralizou e passou de 300 mil usuários: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
Fiquei me perguntando por que a pessoa copiou em vez de enviar um PR para uma extensão gratuita e open source, mas algumas semanas depois ela estava tentando vendê-la em vários sites por um valor de cinco dígitos. Talvez ainda seja dona dela, mas também chamou a atenção que o desenvolvedor listado na Chrome Store mudou em relação ao lançamento inicial.
Não entendi todo o pano de fundo, mas essa extensão é, na prática, um JavaScript trivial de 50 linhas. Dizer que alguém a roubou é uma afirmação bem forte. A ideia em si não tem valor, e também é difícil alegar que ela seja muito nova. Mesmo supondo que a outra pessoa tenha se inspirado, a cronologia de quem fez o quê primeiro não é tão clara assim.
Só que por quanto tempo o YouTube e o Chrome vão deixá-la funcionando é outra questão, e talvez eles também não gostem disso.
“…se o mundo inteiro está cantando suas músicas / e todos os seus quadros foram pendurados / lembre-se de que o que era seu agora é de todos / isso não é certo nem errado / mas você pode se apegar a isso o quanto quiser / só que só você vai ficar ansioso…” — “What Light”, do Wilco
É realmente útil, mas, como outra pessoa disse, isso deveria ser um recurso embutido no navegador.
Ainda não olhei o código-fonte a fundo, mas fico me perguntando se ele avisa automaticamente quando há mudança de propriedade. Não precisa ser em tempo real, mas ele avisa ao iniciar, ou é preciso executar manualmente um comando de verificação?
Esse assunto também virou tema de discussão alguns meses atrás: https://news.ycombinator.com/item?id=36233068
Como no comentário no topo na época, Firefox e Chrome fariam bem em mudar a política de atualização automática de extensões nessas situações. Se a extensão divulgar a mudança de propriedade, a atualização deveria exigir aprovação do usuário; se não divulgar, o usuário deveria poder denunciá-la como maliciosa. Além disso, acho que o título provavelmente deveria ter “Show HN”.
Considerei que uma notificação mais forte do que isso seria invasiva demais.
Isso reduz o valor do produto ou da empresa numa venda. É amigável ao usuário, mas pouco amigável ao criador que precisa pagar as contas.
Isso não é motivo de piada.
Fui dono por alguns anos de uma extensão open source do Chrome bastante popular, e o total de doações não pagava nem o café de um mês.
Mas as ofertas para comprar a extensão, muitas vezes com objetivos claramente maliciosos e até declarados de forma explícita, eram numerosas e os valores eram absurdos. Recusei todas, mas esperar que, numa situação dessas, a moralidade do desenvolvedor original seja o único sistema de segurança e privacidade não é uma avaliação sensata.
Eu concordo bastante com o objetivo e entendo as limitações técnicas, mas é meio suspeito enviar a lista de todas as extensões do usuário para uma rede de publicidade centrada em extensões.
A justificativa para precisar de um servidor externo é que o navegador aplica regras especiais a modificações em domínios de marketplace de extensões, como
chromewebstore.google.com, então a verificação das informações do desenvolvedor é delegada ao servidor de API da ExBoost.https://www.extensionboost.com/
A ExBoost se descreve como uma rede colaborativa de extensões de navegador que querem mais usuários e avaliações. O funcionamento é inserir um slot da ExBoost na UI da extensão e exibir promoções de extensões semelhantes ou pedidos de avaliação.
Ao ver o resultado da API para uma das extensões instaladas, aparecem metadados relacionados ao desenvolvedor. Tentei usar a API do Chrome
chrome.management.get(id), mas ela não retornou essas informações, e também não parece haver uma forma programática de obter o conteúdo domanifest.json. Portanto, para fazer o que a extensão atual quer fazer, uma fonte externa de fato é necessária.https://github.com/classvsoftware/under-new-management/blob/...
https://api.extensionboost.com/v1/developer?extension_ids=gh...
A mensagem pedia para eu colocar o código deles na minha extensão e dizia: “se você mostrar a minha, eu mostro a sua. Custo zero, todo mundo ganha”. Pareceu suspeito, marquei como spam e não parecia diferente de outros spams que eu recebia de golpistas.
Para extensões do Firefox, existe o programa de extensões recomendadas da Mozilla, e a documentação diz que, antes de serem incluídas, elas passam por uma rigorosa revisão técnica feita por especialistas de segurança da equipe: https://support.mozilla.org/en-US/kb/recommended-extensions-...
Porém, só pelo documento de suporte, não fica claro se todas as atualizações são revisadas antes da publicação. Se forem revisadas sempre, isso resolveria em certa medida esse problema para extensões populares, mas também fico curioso para saber quanto atraso isso causaria quando fosse necessária uma atualização de segurança urgente.
Pela minha política pessoal atual, só permito que essas extensões curadas sejam executadas em todos os sites e abas.
Uma estrutura em que, por mais popular que seja uma organização, ou por mais conhecida, ela possa ser banida se violar regras repetidamente ou tentar contornar as funcionalidades do marketplace.
Em casos realmente maliciosos, quando uma extensão é transferida, muitas vezes o que se vende são as próprias credenciais da conta de desenvolvedor do Google, então isso não seria detectado.
Instalei o adblock muito tempo atrás e gostava muito dele.
Comprei uma máquina nova e precisei reinstalá-lo; foi a primeira vez que olhei as permissões e fiquei assustado. Faz sentido, logicamente, que para bloquear anúncios ele precise ver o que eu vejo, mas eu nunca tinha pensado nisso a sério.
Hoje uso Pi-hole e não uso nenhuma extensão.
Ainda assim, é bom que existam opções para quem quiser, e cada pessoa tem um perfil de risco e preocupações diferentes.
Algumas extensões são open source e confiáveis, mas muitas não são, e as pessoas parecem ter dificuldade para verificar isso.
Você fornece a lista de bloqueio e o próprio navegador faz o bloqueio. Não sei se isso é possível no Firefox: https://developer.apple.com/documentation/safariservices/cre...
Se eu fosse um comprador de extensões maliciosas, não bastaria manter o nome do desenvolvedor para evitar isso? Ou a Chrome Extension Store controla rigorosamente o nome do desenvolvedor?
Por exemplo, um agente estatal malicioso poderia oferecer dezenas de milhões de dólares ao autor do uBlock para obter acesso a muitos navegadores. Não sei como ficaria a viabilidade econômica, mas extensões mais de nicho poderiam ser alvo por valores muito menores.
Fico me perguntando se esse problema é pior no Chrome do que em outros navegadores
A única extensão de navegador que uso é o HonorLock, um software de supervisão de provas, e sou obrigado a usá-la. Como a extensão é exclusiva do Chrome, às vezes uso o Chrome por causa do HonorLock. Se eu abro o link de instalação no Safari, ele diz para instalar o Chrome: https://app.honorlock.com/install/extension
Fico me perguntando se há alguma característica exclusiva das extensões do Chrome que permita o caso de uso do HonorLock e, ao mesmo tempo, torne a ferramenta deste artigo mais útil