Cartoon rock climber using proper security techniques while climbing a rock wall

Personalize sua configuração de revisão de dependência

Nicholas Liffen
Nicholas Liffen // Director, GitHub Advanced Security // GitHub

Por padrão, a revisão de dependências ajudará você a capturar dependências inseguras antes que elas sejam introduzidas em seu código. Porém, há mais que você pode fazer com a revisão de dependências configurando a ação de revisão de dependências. Vamos nos ater a três modificações muito comuns: falhas nas compilações com base no nível de gravidade da vulnerabilidade, licença de dependência e escopo.


Neste guia, você aprenderá:

  • Como editar o arquivo de fluxo de trabalho de revisão de dependência

  • Como implementar personalizações comuns de revisão de dependência


Uma dúvida comum é se você deve usar listas de permissões ou listas de bloqueio para filtrar dependências e licenças. O principal especialista em segurança de campo do GitHub, Keith Hoodlet, que tem vasta experiência trabalhando com grandes empresas, oferece algumas perspectivas:

Geralmente recomendamos usar listas de bloqueio em vez de listas de permissão. As listas de permissão são, de fato, a forma mais segura de garantir a implementação das coisas de uma perspectiva de segurança, mas poucas organizações têm os recursos para executá-las corretamente. É mais prático compilar uma lista de coisas muito ruins do que criar uma lista completa de todas as melhores bibliotecas que você quer permitir. Reprovar algo com base na gravidade de uma vulnerabilidade é uma boa forma de equilibrar as necessidades da segurança e oferecer experiências de baixo atrito para desenvolvedores. É claro, sua experiência pode variar, dependendo da natureza do seu repositório e os recursos da sua equipe.

O mesmo vale para licenças. Há inúmeros tipos de licenças disponíveis, então normalmente é mais prático excluir as licenças que você sabe que são incompatíveis com licenças atuais do que compilar uma lista de licenças compatíveis.

Keith Hoodlet
Keith Hoodlet // Principal Field Security Specialist, CodeQL // GitHub

1. Adicione a ação de revisão de dependência.

Certifique-se de que o GitHub Actions e o gráfico de dependência estejam habilitados.

Clique na guia Actions.

Encontre a seção Security e clique em View all.

Encontre Dependency review e clique em Configure.

Isso abrirá o arquivo de fluxo de trabalho do GitHub Actions da revisão de dependência, dependency-review.yml. Ele deve conter o seguinte:

name: 'Dependency Review'
on: [pull_request]



permissions:
  contents: read



jobs:
  dependency-review:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v3
      - name: 'Dependency Review'
        uses: actions/dependency-review-action@v3

2. Altere a gravidade.

Conforme explicado no arquivo de fluxo de trabalho acima, você pode impedir que códigos contendo dependências vulneráveis ​​sejam mesclados definindo a ação de revisão de dependência como obrigatória. Porém, bloquear vulnerabilidades de baixo risco pode ser muito restritivo em algumas circunstâncias. Podemos alterar a gravidade da vulnerabilidade que fará com que uma compilação falhe com a opção fail-on-severity .

Adicione o seguinte ao fim do arquivo dependency-review.yml :

      - name: Dependency Review
        uses: actions/dependency-review-action@v3
        with:
          fail-on-severity: moderate

3. Adicione licenças para bloquear.

Vulnerabilidades não são o único motivo pelo qual você pode querer bloquear uma dependência. Se a sua organização tiver restrições sobre os tipos de licenças que você pode usar, você poderá usar a revisão de dependência para aplicar essas políticas com a opção deny-licenses

Para interromper a construção se alguém introduzir uma dependência que contenha uma licença LGPL-2.0 ou BSD-2-Clause, vamos adicionar o seguinte ao arquivo dependency-review.yml :

          deny-licenses: LGPL-2.0, BSD-2-Clause

4. Adicionar escopos.

Por fim, usaremos fail-on-scopes para evitar a fusão de dependências vulneráveis ​​em ambientes de implantação específicos.

Vamos manter essas dependências fora de nosso ambiente de desenvolvimento adicionando o seguinte ao seu arquivo dependency-review.yml :

          fail-on-scopes: development

O arquivo dependency-review.yml agora deve ficar assim:

name: 'Dependency Review'
on: [pull_request]



permissions:
  contents: read



jobs:
  dependency-review:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v3
      - name: Dependency Review
        uses: actions/dependency-review-action@v3
        with:
          fail-on-severity: moderate
          deny-licenses: LGPL-2.0, BSD-2-Clause
          fail-on-scopes: development

É possível usar esse arquivo como modelo para suas próprias configurações personalizadas.

A seguir: Resumo do módulo intermediário sobre o GitHub Advanced Security

Agora vamos revisar o que aprendemos até o momento e ver o que mais podemos fazer com o GitHub Advanced Security.