Pesquisadores de segurança da empresa Fenrisk revelaram informações sobre vulnerabilidades nas ferramentas Pagure e OBS (Open Build Service), que podem comprometer as infraestruturas de construção de pacotes das distribuições Fedora e openSUSE. Os pesquisadores demonstraram a possibilidade de realizar um ataque para executar código arbitrário em servidores com Pagure e OBS, o que poderia ser utilizado para injetar alterações nos pacotes nos repositórios do Fedora e openSUSE.
Na plataforma Pagure, utilizada no Fedora para colaboração em código e metadados de pacotes, foram identificadas 4 vulnerabilidades. Para explorar os problemas identificados, é necessário ter uma conta no serviço Pagure, a qual qualquer interessado pode obter (atualmente, há 24899 usuários registrados no Pagure.io). Três dos problemas permitem a leitura de arquivos no sistema, enquanto um permite a execução de código próprio no. servidor. Os problemas foram identificados em 1º de janeiro de 2024, comunicados via bugzilla.redhat.com em 25 de abril de 2024 e corrigidos no Pagure em 3 horas.
- As vulnerabilidades CVE-2024-4981 e CVE-2024-47515 são causadas pelo tratamento inadequado de links simbólicos nas funções de atualização de arquivos e geração de arquivos compactados. Essas vulnerabilidades permitem a leitura do conteúdo de arquivos locais no servidor; por exemplo, é possível acessar o conteúdo do arquivo com parâmetros de sessão do administrador do Pagure e obter acesso com suas permissões. A exploração da vulnerabilidade na função _update_file_in_git() se resume à criação de um repositório no Pagure; adição de um commit com um novo arquivo, que é criado como um link simbólico para o arquivo de sistema desejado; abertura desse arquivo para edição na interface web.
- A vulnerabilidade (CVE-2024-4982) na função view_issue_raw_file() permite escapar do diretório base ao especificar os caracteres "\/.." nos parâmetros da Issue solicitada. O problema permite a leitura de arquivos no sistema, conforme as permissões de acesso do processo sob o qual a interface web é executada. Por exemplo, para visualizar o arquivo \/etc\/passwd, você pode abrir a página "http:\/\/pagure.local:5000\/seu-repositorio\/issue\/raw\/..\/..\/..\/..\/..\/..\/..\/etc\/passwd".
- A vulnerabilidade (CVE-2024-47516) na função PagureRepo.log() permite a injeção de comandos personalizados e a execução de código no servidor. O problema ocorre porque, ao visualizar o histórico de alterações de um arquivo através da interface web, o comando 'git' é chamado com o identificador da branch passado na linha de comando (por exemplo, '/usr/bin/git --pretty=oneline --abbrev-commit -- README.md'). A validade do identificador não é verificada, permitindo que qualquer opção de linha de comando seja passada, como '--output=/tmp/foo.bar' para redirecionar a saída para um arquivo. Um atacante pode sobrescrever um arquivo no sistema enviando uma solicitação no seguinte formato: http://pagure.local:5000/test/history/README.md?identifier=--output=/tmp/foo.bar
O Pagure é executado sob o usuário git, portanto, apenas arquivos deste usuário podem ser sobrescritos. Para executar seu próprio código no servidor, pode-se utilizar um serviço de acesso ao repositório via SSH, que executa o comando 'bash -c /usr/libexec/pagure/aclchecker.py' ao ser chamado. O atacante pode usar a vulnerabilidade para sobrescrever o arquivo '/srv/git/.bashrc', que será executado pelo interpretador de comandos bash ao acessar o repositório via ssh.
O ataque consiste em registrar-se no sistema Pagure, criar um repositório, adicionar ao repositório um arquivo README.md com um comentário de commit do tipo '|| /bin/bash' e enviar a solicitação 'http://pagure.local:5000/test/history/README.md?identifier=--output=/srv/git/.bashrc'. Durante esses passos, a linha '34а5с43 || /bin/bash' será escrita no arquivo '/srv/git/.bashrc'. Para executar o arquivo criado '/srv/git/.bashrc', basta conectar-se ao repositório via SSH com sua conta. A execução de código com os privilégios do usuário git no servidor Pagure permite controlar todo o conteúdo dos repositórios com pacotes.
Na plataforma OBS (Open Build Service), utilizada no openSUSE e em algumas outras distribuições para compilar pacotes, foi identificada uma vulnerabilidade (CVE-2024-22033) que permite a execução de código no servidor. A vulnerabilidade foi descoberta em 27 de junho de 2024, comunicada ao projeto openSUSE em 29 de junho e corrigida em 10 de julho.
A vulnerabilidade está presente no serviço "obs-service-download_url", onde não havia a devida verificação da URL utilizada ao iniciar a ferramenta wget a partir de um script que realiza o download do código-fonte no OBS. Um atacante pode especificar na configuração do pacote gerado no serviço OBS, em que, em vez de uma URL para download do código, será indicada a opção da linha de comando para wget, por exemplo: --output-document=\/tmp\/test tempfile
Para contornar o retorno de erro ao tentar executar o wget sem URL, no exemplo é indicada a opção "download-manifest", que permite especificar uma lista de URLs em um arquivo separado. O exemplo acima levará à execução do comando: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 --output-document=\/tmp\/test
que permite gravar no arquivo \/tmp\/test o conteúdo baixado a partir do link especificado no arquivo \/srv\/obs\/service\/XXXXX\/src\/tempfile do código carregado pelo atacante no OBS através da interface build.opensuse.org, que permite registro livre. Além de sobrescrever o arquivo no servidor, o atacante também pode enviar qualquer arquivo para si, especificando, em vez de "--output-document", a opção "--post-file", por exemplo, "--post-file=\/etc\/passwd". Dessa forma, o atacante consegue ler e gravar arquivos no servidor, de acordo com as permissões que possui sob o serviço OBS.
Para transformar a capacidade de gravação em um arquivo em execução de código no servidor, pesquisadores propuseram um método em duas etapas. As duas etapas são necessárias, pois o atacante pode criar um arquivo ".wgetrc" com configurações para o wget, mas isso não é suficiente para executar comandos. Contudo, por meio do ".wgetrc", é possível criar condições para a execução de qualquer programa no sistema, mas sem passar argumentos para ele. Para iniciar código arbitrário, é sugerido executar o programa "prove", que processa o arquivo de configuração ".proverc", permitindo a especificação da opção "--exec" para executar qualquer código.
Na primeira etapa, através das manobras mencionadas com o «download-manifest» no diretório inicial do usuário «obsservicerun», é criado um arquivo «.proverc» que inclui comandos que serão executados ao iniciar o processo «prove». Na segunda etapa, é gerado um arquivo «.wgetrc» com o parâmetro «use-askpass=/usr/bin/prove», que chama «prove». Depois que esses arquivos aparecem, basta criar as condições para baixar quaisquer dados usando wget, o que levará à execução do código do atacante no servidor com os direitos do usuário «obsservicerun». Os direitos do usuário «obsservicerun» são suficientes para extrair chaves dos repositórios usadas pelos usuários do OBS para assinar pacotes.
Adendo: A equipe de Segurança do Produto SUSE acredita que o risco da vulnerabilidade no OBS está superestimado e que a alegação dos pesquisadores de que o problema permite comprometer todos os pacotes na distribuição openSUSE não corresponde à realidade. É mencionado que os serviços na infraestrutura build.opensuse.org são executados usando contêineres isolados, recriados e que não contêm informações críticas. A vulnerabilidade identificada é considerada perigosa, mas insuficiente para comprometer a infraestrutura de construção do openSUSE e os pacotes gerados. Além disso, foi indicado que as ações na interface do OBS, descritas no exemplo de ataque, poderiam ter sido realizadas apenas na variante do OBS instalada localmente na estação de trabalho do desenvolvedor.
Fonte: opennet.ru
