Cómo funcionan los checks¶
Cada check de RedBench tiene dos partes:
- Definición YAML — metadatos: ID, plataforma, severidad, modos seguros, tags
- Lógica Python — función
run()que ejecuta la verificación y devuelve unFinding
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 parseadatarget— nombre del targetdomain— dominio contra el que se ejecutafingerprint— resultado del fingerprinting previomode— 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 |