
Forked from https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
Este é um aplicativo web Flask que rastreia correções de segurança no Alpine.
Ao usar o secdb do Alpine, podemos geralmente deduzir quais CVEs foram e não foram corrigidas. Algumas extensões ao esquema de relatórios do secfixes serão adicionadas para permitir que os mantenedores de pacotes indiquem falsos positivos.
Num futuro próximo, as alterações de estado serão relatadas a uma lista de anúncios de segurança conforme o mecanismo as processar.
Você deve criar um virtualenv da maneira usual e, em seguida, executar pip3 install -r requirements.txt.
Se quiser usar um banco de dados diferente de sqlite, você precisará instalar o driver correspondente, por exemplo pip3 install psycopg2.
Por fim, você precisará escrever um arquivo de configuração: copie o exemplo e modifique-o de acordo com suas necessidades.
Em seguida, você precisará definir estas variáveis de ambiente para algo útil:
SECFIXES_TRACKER_CONFIG: caminho para o arquivo de configuraçãoFLASK_APP: o nome do aplicativo, secfixes_trackerDepois de concluído, inicialize o banco de dados com flask init-db.
Opcionalmente, execute make para compilar secfixes-cli. Isso requer que go esteja instalado.
Depois que o ambiente estiver configurado, você pode executar várias tarefas:
flask runExecuta o servidor web. Isso também pode ser feito com gunicorn ou algo do tipo, mas isso não é abordado aqui.
flask init-dbInicializa o banco de dados.
flask import-apkindex [repo]Importa os repositórios configurados.
flask import-secfixes [repo]Importa os feeds secdb configurados.
flask import-nvd [feed-name]Importa um feed NVD, como 2021 ou recent.
Depois que os feeds anuais forem importados, você só precisará importar o feed recent diariamente.
./secfixes-cli import-vulnrichImporta detalhes de CVEs de https://github.com/cisagov/vulnrichment.
flask update-states [repo]Atualiza os vários itens de VulnerabilityState com base no conteúdo atual dos feeds secfixes, NVD e apkindex. Isso deve ser executado após as tarefas de importação acima, a cada hora.
As regras de reescrita são sincronizadas de Alpine infra/docker/secfixes-tracker. Veja config/README.md para a organização dos arquivos.
O aplicativo Flask usa CUSTOM_REWRITERS do Python em secfixes_tracker/application.cfg (espelhado em config/prod.settings.py). As regras são funções lambda correspondidas como cpe_vendor:source_pkgname ou cpe_vendor:*.
PACKAGE_EXCLUSIONS no mesmo arquivo exclui pacotes que acumulam CVEs de falso positivo (por exemplo, bridge).
secfixes-cli usa regras baseadas em expr em config/application.toml (espelhado em config/prod.application.toml). As regras são baseadas em expr.
Um exemplo de regra é assim:
[[rewriters]]
predicate = "target_sw == 'python'"
rewrite_rule = "product | lower() | replace('_', '-') | fmt('py3-%s')"
predicate determina se a regra se aplica, enquanto rewrite_rule determina como o cpe deve ser reescrito. Uma terceira opção opcional chamada field especifica qual campo do CPE será reescrito. Se não for fornecida, o padrão é product.
As seguintes variáveis estão disponíveis no ambiente das expressões:
vendorproducttarget_swversionfmt é implementado com fmt.Sprintf, mas aceita apenas 2 argumentos. O primeiro argumento é uma string ou uma slice. Isso possibilita usá-lo com pipes.
Você vai querer executar as tarefas de importação e, em seguida, as tarefas de atualização de estados. Isso é tudo o que precisa ser feito.
A parte de e-mail está sendo redesenhada para se encaixar melhor na forma como o mecanismo de rastreamento foi implementado. Fique de olho neste espaço quando a parte de e-mail estiver pronta para as instruções de configuração.
No momento, o esquema do banco de dados é instável. Você precisará reconstruir o banco de dados ao atualizar este software. Quando chegarmos à versão 1.0, o esquema do banco de dados será estável.