Recentemente, a notícia de que Uma vulnerabilidade crítica foi identificada em o repositório de pacotes rubygems.org (a vulnerabilidade já está catalogada sob CVE-2022-29176), que permitir sem a devida autorização, substituir os pacotes de outras pessoas no repositório retirando um pacote legítimo e fazendo upload de outro arquivo com o mesmo nome e número de versão em seu lugar.
É mencionado que a vulnerabilidade é devido a um bug no manipulador de ação "yank", que trata a parte do nome após o hífen como o nome da plataforma, o que possibilitou iniciar a remoção de pacotes externos que correspondem à parte do nome até o caractere hífen.
Em particular, no código do controlador da operação "arrancar", a chamada 'find_by!(full_name: "#{rubygem.name}-#{slug}")' foi usado para procurar pacotes, enquanto o parâmetro "slug" foi passado para o proprietário do pacote para determinar a versão a ser removida.
O proprietário do pacote "rails-html" poderia ter especificado "sanitizer-1.2.3" em vez da versão "1.2.3", o que faria com que a operação se aplicasse ao "rails-html-sanitizer-1.2.3" pacote ″ de outra pessoa. »
Um aviso de segurança para Rubygems.org foi publicado ontem.
O aviso dizia respeito a um bug que permitia a um usuário mal-intencionado minerar certas gemas e fazer upload de arquivos diferentes com o mesmo nome, número de versão e plataforma diferente.
Vamos dar uma olhada mais profunda para ver o que deu errado durante o processo de extração. Como pretexto, vamos imaginar um cenário onde criamos uma gem chamada "rails-html" com a intenção de obter acesso não autorizado à gem amplamente usada "rails-html-sanitizer".
É mencionado que três condições devem ser atendidas, para explorar com sucesso esta vulnerabilidade:
- O ataque só pode ser executado em pacotes que tenham um caractere de hífen em seu nome.
- Um invasor deve ser capaz de colocar um pacote de gemas com parte do nome até o caractere hífen. Por exemplo, se o ataque for contra o pacote "rails-html-sanitizer", o invasor deve colocar seu próprio pacote "rails-html" no repositório.
- O pacote atacado deve ter sido criado nos últimos 30 dias ou não atualizado por 100 dias.
O problema foi identificado por um pesquisador de segurança como parte do programa de recompensas HackerOne para encontrar problemas de segurança em projetos de código aberto conhecidos.
O problema corrigido em RubyGems.org em 5 de maio e de acordo com os desenvolvedores, ainda não identificaram vestígios de exploração da vulnerabilidade nos logs nos últimos 18 meses. Ao mesmo tempo, apenas uma auditoria superficial foi realizada até agora e uma auditoria mais aprofundada está planejada no futuro.
No momento, acreditamos que essa vulnerabilidade não foi explorada.
RubyGems.org envia um e-mail para todos os proprietários de gem quando uma versão de gem é lançada ou removida. Não recebemos nenhum e-mail de suporte de proprietários de gemas informando que suas gemas foram extraídas sem autorização.
Uma auditoria de alterações de gem nos últimos 18 meses não encontrou exemplos de uso malicioso dessa vulnerabilidade. Uma auditoria adicional para qualquer uso possível desta exploração não encontrou nenhuma instância dessa exploração sendo usada para assumir uma gem sem autorização na história do RubyGems. Não podemos garantir que isso nunca aconteceu, mas não parece provável.
Para verificar seus projetos, é recomendável analisar o histórico de operações no arquivo Gemfile.lock A atividade maliciosa é expressa na presença de alterações com o mesmo nome e versão, ou uma alteração de plataforma (por exemplo, quando um pacote xxx-1.2.3 . 1.2.3 é atualizado para xxx-XNUMX-xxx).
Como solução contra falsificação de pacotes ocultos em sistemas de integração contínua ou ao publicar projetos, Os desenvolvedores são recomendados a usar o Bundler com as opções “–frozen” ou “–deployment” para confirmar dependências.
Finalmente, se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir