Skip to content

Cómo funcionan los checks

Cada check de RedBench tiene dos partes:

  1. Definición YAML — metadatos: ID, plataforma, severidad, modos seguros, tags
  2. Lógica Python — función run() que ejecuta la verificación y devuelve un Finding

El runner carga automáticamente cualquier par .yml + .py que encuentre en las carpetas de checks.

Estructura de archivos

src/redbench/checks/
├── infrastructure/
│   ├── security_headers.yml    ← definición
│   ├── security_headers.py     ← lógica
│   ├── exposed_git.yml
│   ├── exposed_git.py
│   └── ...
├── magento2/
│   ├── admin_exposed.yml
│   ├── admin_exposed.py
│   └── ...
├── magento1/
│   └── ...
└── prestashop/
    └── ...

Definición YAML

id: RB-M2-001
name: Admin panel exposed
description: >
  Checks if the Magento 2 admin panel is publicly accessible at common
  paths without IP restriction or additional authentication.
platform: magento2
type: posture
severity: high
safe_modes:
  - passive
  - safe-active
  - authenticated
tags:
  - admin
  - hardening
  - access-control

Campos

Campo Tipo Descripción
id string Identificador único (RB-{PLAT}-{NUM})
name string Nombre del check
description string Descripción larga
platform enum magento1, magento2, prestashop, infrastructure
type string posture, cve-verification, malware, config
severity enum critical, high, medium, low, info
safe_modes list En qué modos se puede ejecutar este check
tags list Etiquetas para filtrado

Lógica Python

Cada check es un módulo Python con una función run() async:

async def run(
    check: CheckDef,
    target: str,
    domain: str,
    fingerprint: Fingerprint | None = None,
    mode: ExecMode = ExecMode.PASSIVE,
) -> Finding:
    ...

La función recibe:

  • check — la definición YAML ya parseada
  • target — nombre del target
  • domain — dominio contra el que se ejecuta
  • fingerprint — resultado del fingerprinting previo
  • mode — modo de ejecución activo

Y devuelve un Finding con resultado, evidencia y remediación.

Flujo de ejecución

1. Scanner pide checks → runner.load_checks(platform, mode)
2. Runner busca *.yml en la carpeta de la plataforma + infrastructure/
3. Filtra por modo (safe_modes) y tags
4. Para cada check: importa el .py, llama a run()
5. Cada run() devuelve un Finding
6. Scanner acumula findings y genera el reporte

Convenciones de ID

Prefijo Plataforma
RB-INFRA- Infrastructure (aplica a todas)
RB-M1- Magento 1
RB-M2- Magento 2 / Adobe Commerce
RB-PS- PrestaShop