
Gestión de controles de GitHub Advanced Security (GHAS) a escala
Implementa y monitorea controles de Appsec a escala.
$ git clone [email protected]:mf-labs/witcher.git
$ cd witcher
$ npm i
$ git clone [email protected]:mf-labs/witcher.git
$ cd witcher
$ docker build -t witcher .
# Ejecutando la imagen Docker
$ docker run -e GITHUB_TOKEN=$GITHUB_TOKEN -e ORG=$ORG witcher -a status -m ghas -r offsec-sast-testing
➜ witcher git:(master) node witcher.js -h
usage: witcher.js [-h] -m MODULE -a ACTION [--daily-summary] [--mass-action] [--slack] [--siem] [--jira]
[--jira-ticket JIRATICKET] [--org ORG] [-r REPO] [-b BRANCH]
[--workflow-file WORKFLOW] [--repo-file REPOFILE]
witcher ....... you can't escape
optional arguments:
-h, --help show this help message and exit
-m MODULE, --module MODULE
ghas, dependabot, secret-scanning, codeql, iac, workflows, ALL
-a ACTION, --action ACTION
enable, disbale, status, alert, deploy, delete
--daily-summary Get the Daily Summary
--mass-action Perform action (enable, deploy, delete) at scale
--slack Post new alert(s) on Slack
--siem Log activities on SIEM
--jira Post new vulnerability ticket on Jira
--jira-ticket JIRATICKET
Jira ticket ID (e.g. PROJECT-123)
Input:
--org ORG Organization Name
-r REPO, --repo REPO Repository Name, ALL
-b BRANCH, --branch BRANCH
Branch Name
--workflow-file WORKFLOW
Workflow File Name
--repo-file REPOFILE Repo File Name

Configure las siguientes variables de entorno primero:
export GITHUB_TOKEN=YOUR_GITHUB_TOKEN
export GITHUB_USER=YOUR_GITHUB_USERNAME
export ORG=YOUR_GITHUB_ORGANIZATION
# Opcional para configurar Slack
export SLACK_BOT_TOKEN
export SLACK_SIGNING_SECRET
export SLACK_CHANNEL
# Opcional para enviar datos al SIEM
export SERVERLESS_APP_URL
# Opcional para la creación de tickets en Jira
export JIRA_API_TOKEN
export JIRA_EMAIL
export JIRA_URL
export JIRA_PROJECT
export JIRA_ISSUE_TYPE
Actualice el archivo github/data/exclusion.json con la lista de repositorios excluidos de Core Repositories / GHAS.
# Listar repositorios donde GHAS está deshabilitado
$ node witcher.js -m ghas -a status --repo All
# Habilitar GHAS en un repositorio específico
$ node witcher.js -m ghas -a enable --repo <nombre-repo>
# Deshabilitar GHAS en un repositorio específico
$ node witcher.js -m ghas -a disable --repo <nombre-repo>
# Verificar estado de GHAS en un repositorio específico
$ node witcher.js -m ghas -a status --repo <nombre-repo>
# Obtener la última vulnerabilidad de escaneo de código
$ node witcher.js -m codeql -a alert --slack // --slack para publicar en Slack
# Acción masiva
$ node witcher.js --mass-action -a enable -m ghas --repo-file mass_action.txt --jira-ticket PROJECT-123

Más comandos / Hoja de referencia
# Ejecutar resumen diario
$ node witcher.js --daily-summary -m ALL -a status --slack --jira
# El resumen diario incluye la verificación de
# 1. GHAS status on all repositories
# 2. Secret Scanning status on all repositories
# 3. Check for Depenabot status
# 4. Check for paused Dependabot
# 5. Code Scanning status on applicable repositories
# 6. IaC Scanning status on applicable repositories
# 7. Check alerts for any new vulnerability
# 8. Logged daily summary on SIEM and posted on Slack
- Todos los repositorios públicos están excluidos de witcher
- Todos los repositorios archivados están excluidos de witcher
- Todos los repositorios obsoletos están excluidos de witcher
Este proyecto está licenciado bajo la Licencia Apache 2.0
Copyright (c) 2025 Moonfare.
Eres libre de usar, modificar y distribuir el proyecto, siempre que incluyas las atribuciones correspondientes a Moonfare en tu uso.
Si deseas contribuir al proyecto, consulta nuestra CONTRIBUTING.md para obtener las pautas.