
Análise detalhada do CVE-2022-21668, uma vulnerabilidade crítica de RCE no parsing de requirements.txt do Pipenv, incluindo código do bug, mecânica de exploração e validação da correção.
Neste documento, a vulnerabilidade do Pipenv (CVE-2022-21668) é discutida em detalhes. As seções seguintes cobrem o código com bug no arquivo pipenv/utils.py que abre portas para vários ataques RCE e também sobre a correção recente que valida a conexão SSL/TLS e verifica o nome do host contra uma lista de hosts confiáveis.
Pipenv Pipenv é uma ferramenta que cria e gerencia automaticamente um virtualenv para seus projetos, além de adicionar/remover pacotes do seu Pipfile conforme você instala/desinstala pacotes.
Para mais informações clique aqui
Precisamos de um arquivo requirements.txt sempre que lidamos com sistemas complexos. Este arquivo de texto também é útil quando queremos portar a aplicação para outro ambiente. Este arquivo contém todos os pacotes/dependências necessários para executar uma aplicação com sucesso, juntamente com seus números de versão.
Exemplo de arquivo requirements.txt:
Fonte da imagem: https://www.idkrtm.com/what-is-the-python-requirements-txt/
Se não tivermos um arquivo requirements.txt, pode não ser possível portar nossa aplicação com sucesso para outro sistema, pois pode haver um problema de compatibilidade entre as versões dos pacotes.
A partir da versão 2018.10.9 do Pipenv e anterior à versão 2022.1.8, uma falha na análise dos arquivos de requisitos do pipenv permite que um invasor insira uma string especialmente criada dentro de um comentário em qualquer lugar de um arquivo requirements.txt, o que fará com que as vítimas que usam pipenv para instalar o arquivo de requisitos baixem dependências de um servidor de índice de pacotes controlado pelo invasor. O ataque RCE é altamente viável contra esses sistemas altamente vulneráveis.
cvedetails classifica essa vulnerabilidade como crítica / grave.
Pontuação CVSS do cvedetails:
(Fonte: https://www.cvedetails.com/cve/CVE-2022-21668/)
Esta função é chamada iterativamente em cada linha de um arquivo de requisitos e usa o módulo argparse para encontrar e processar as opções --index-url, --extra-index-url e --trusted-host. No entanto, ela não ignora essas opções quando aparecem em comentários. O problema com o código é que ele analisará as strings que começam com "--index-url, --extra-index-url e --trusted-host" em qualquer lugar do arquivo. Essa funcionalidade o torna mais vulnerável.
Para mais informações clique aqui
Ataques de execução remota de código (RCE) permitem que um invasor execute código malicioso remotamente em um computador. O impacto de uma vulnerabilidade RCE pode variar desde execução de malware até um invasor obter controle total sobre uma máquina comprometida.
Se um invasor conseguir ocultar uma opção --index-url maliciosa em um arquivo de requisitos que uma vítima instala com pipenv, o invasor pode incorporar código malicioso arbitrário em pacotes servidos a partir de seu servidor de índice malicioso, que será executado no host da vítima durante a instalação (execução remota de código/RCE). A exploração usando essa técnica seria relativamente simples de ser alcançada por um invasor com conhecimento básico de Python, pois o invasor pode simplesmente criar uma distribuição fonte para qualquer um dos pacotes especificados no arquivo de requisitos e incorporar código malicioso arbitrário no arquivo setup.py. Quando o pip instala a partir de uma distribuição fonte, qualquer código no setup.py é executado pelo processo de instalação.
Para mais detalhes clique aqui
As versões 2022.1.8 e superiores têm esse problema corrigido. Uma nova função “get_host_and_port(url)” foi adicionada no arquivo pipenv/utils.py. Esta função recupera o host e a porta da url submetida no arquivo requirements.txt. O endereço do host recuperado é analisado usando urllib3, que internamente valida a conexão SSL/TLS. O endereço do host também é verificado contra uma lista de endereços de host confiáveis.
Mais informações aqui
Ataques básicos podem usar o RCE inicial acionado quando uma vítima instala o pacote malicioso do invasor para roubar credenciais do host da vítima, drenar os recursos do host para minerar criptomoedas, ou instalar kits de exploração ou outros malwares. Invasores mais sofisticados podem usar técnicas mais avançadas para persistir o acesso ao host da vítima, ocultar ou remover evidências de seu ataque excluindo referências ao servidor de índice malicioso no Pipfile e Pipfile.lock gerados pelo pipenv ou outros potenciais indicadores de comprometimento. Invasores altamente sofisticados podem tentar pivotar para alvos adicionais a partir do host inicial comprometido, e podem alavancar quaisquer credenciais expostas no ambiente do host comprometido ou autorização implícita concedida ao host para obter acesso privilegiado a outros sistemas ou recursos, como repositórios de código fonte ou registros de pacotes. (Fonte: https://github.com/pypa/pipenv/security/advisories/GHSA-qc9x-gjcv-465w)
Um erro de análise que não considera a análise adequada dos comentários criou uma vulnerabilidade crítica.
Item da lista: Com tal vulnerabilidade em mãos, até mesmo configurar o servidor de índice malicioso para servir versões de pacotes comprometidas é relativamente simples, mesmo para um invasor não sofisticado.