Os desenvolvedores do repositório de pacotes Python PyPI (Python Package Index) anunciaram a implementação do suporte ao mecanismo de certificação digital para verificar a autenticidade dos pacotes publicados, que substitui a verificação usando assinaturas PGP. A principal diferença na certificação é que a publicação do pacote é confirmada por uma terceira parte (o catálogo de pacotes) após a verificação da autenticidade da publicação por meio de um provedor externo de OpenID Connect (por exemplo, após verificar se o pacote publicado está relacionado ao repositório correspondente no GitHub ou GitLab).
O sistema de certificação elimina as falhas associadas ao mecanismo de verificação baseado em assinaturas PGP, que anteriormente foi declarado obsoleto no PyPI. Essa solução foi adotada devido a problemas na verificação da propriedade dos desenvolvedores de chaves PGP abertas utilizadas para verificar assinaturas digitais — de 1069 chaves PGP usadas desde 2020 para a formação de assinaturas no PyPI, 29% das chaves abertas estavam ausentes em grandes listas públicas. servidores Enquanto 35% das chaves não puderam ser confirmadas durante a auditoria. No entanto, as 36% das chaves PGP confirmadas cobriam apenas 0,3% de todos os arquivos assinados.
Na nova sistema, as assinaturas usadas para certificar pacotes são geradas usando chaves efêmeras de curta duração, que são geradas com base nas credenciais confirmadas por provedores de OpenID Connect. No momento da geração das chaves necessárias para criar a assinatura digital, o desenvolvedor se identifica através do provedor OpenID, que confirma sua ligação ao projeto principal. A infraestrutura para certificação digital foi construída com a ajuda do sistema Sigstore e do framework de certificação in-toto.
Entre as vantagens da certificação, destaca-se a ausência de vinculação a chaves PGP permanentes — a perda ou compromissão da chave privada destrói a confiança nas assinaturas criadas com base nela, enquanto na certificação a assinatura é gerada em vinculação a um token que confirma a autoridade no momento da publicação do pacote e a conexão do pacote com o repositório principal com o código. Por exemplo, ao publicar um pacote preparado através do GitHub Action, a certificação define uma ligação verificável e confirmada entre o arquivo colocado no PyPI, o repositório, o processo de workflow e o hash do commit baseado no qual o pacote foi formado.

Para rastrear a autenticidade das chaves e identificar possíveis compromissos, um log público centralizado é utilizado na formação de pacotes de projetos e do próprio PyPI, a fim de garantir a integridade e proteger contra a alteração de dados retroativamente, no qual é empregada a estrutura de ‘árvore de Merkle’ (Merkle Tree, onde cada ramo verifica todos os ramos e nós subjacentes devido ao hash em árvore).
Adicionalmente, pode-se destacar a identificação no diretório PyPI de um pacote malicioso chamado ‘fabrice’, que, através de typo-squatting (designação de nomes semelhantes, diferenciados por caracteres isolados, como exampl em vez de example, djangoo em vez de django, pyhton em vez de python, etc.), se disfarçava como a popular biblioteca ‘fabric’, que possui 201 milhões de downloads (7 milhões de downloads no último mês). O pacote malicioso passou despercebido desde 2021 e desde então foi baixado mais de 37 mil vezes.
O pacote ‘fabrice’ repetia a funcionalidade básica da biblioteca original e incluía adicionalmente código para detectar e enviar chaves de acesso a AWS (Amazon Web Services) para hosts externos, instalar um backdoor e executar certos scripts. A ativação dos componentes maliciosos ocorria em Linux e Windows. No Linux, os arquivos relacionados à atividade maliciosa eram baixados para o diretório ~/.local/bin/vscode.
Fonte: opennet.ru
