
Un escáner pasivo y de solo lectura que comprueba si un host REDCap está expuesto a **CVE-2026-90817** y ha sido comprometido por esta vulnerabilidad: el fallo de ejecución remota de código sin autenticación en el endpoint de encuestas, explotado por la campaña de criptominería XMRig documentada por Palo Alto Unit 42
redcap_cve_2026_90817_scan.py es un escáner pasivo y de solo lectura que comprueba si un
host de REDCap está expuesto a CVE-2026-90817 y comprometido por esta — la
vulnerabilidad de ejecución remota de código sin autenticación en el endpoint de encuestas
explotada por la campaña de criptominería XMRig documentada por Palo Alto Unit 42
(2026-10-07-XMRig-campaign-through-CVE-2026-90817).
Responde a dos preguntas sobre el host en el que se ejecuta:
Esta herramienta es solo de detección. Esta:
Está pensada para que un administrador la ejecute contra su propio servidor REDCap.
pip. Un único archivo; cópielo
al host y ejecútelo./var/log/apache2 (Debian) o /var/log/httpd
(RHEL/CentOS/Rocky/Alma), y los de nginx en /var/log/nginx. En RHEL 8 el
python3 del sistema es 3.6, así que invoque python3.9 (o superior) allí; RHEL/Rocky/Alma 9
incluyen 3.9+. Ejecútelo como root para un escaneo completo (los crontabs por usuario, las
authorized_keys de otros usuarios y /proc/<pid>/exe, y algunos registros son, de lo contrario,
ilegibles). Sin root, sigue ejecutándose y marca claramente el resultado como un
escaneo parcial.# Simplest: defaults to /var/www/html/redcap, auto-detects the mitigation date
sudo python3 -I redcap_cve_2026_90817_scan.py
# Point at a non-default install, pin the mitigation date, list every attack entry
sudo python3 -I redcap_cve_2026_90817_scan.py \
--redcap-root /var/https/redcap \
--mitigation-date 2026-09-21 \
--max-log-matches all
# Machine-readable output for monitoring / ticketing
sudo python3 -I redcap_cve_2026_90817_scan.py --json
En Windows, ejecútelo desde un símbolo del sistema con privilegios elevados y apunte --redcap-root a la
instalación (la plataforma y los directorios de registro predeterminados se detectan automáticamente):
# IIS or Apache/XAMPP; logs under C:\inetpub\logs\LogFiles or the Apache logs dir
python -I redcap_cve_2026_90817_scan.py --redcap-root C:\redcap --json
-I ejecuta Python en modo aislado (ignora $PYTHONPATH y el CWD) — buena higiene
al escanear un host que posiblemente haya sido manipulado.
| Flag | Predeterminado | Propósito |
|---|---|---|
--redcap-root PATH | /var/www/html/redcap | Raíz de la instalación de REDCap. |
--log-dir DIR (repetible) | específico de la plataforma (Apache/nginx en Linux; IIS LogFiles + Apache en Windows) | Directorios de logs del servidor web a escanear (maneja .gz rotados y logs W3C de IIS). |
--home-dir DIR (repetible) | /root + cada /home/* (Linux); cada C:\Users\* (Windows) | Directorios home adicionales a escanear en busca de claves SSH / archivos de shell/perfil. |
--platform auto|linux|windows | auto | Plataforma del host a asumir. Se autodetecta desde el SO; fuérzalo para seleccionar un proveedor (las sondas de host específicas del SO solo se ejecutan en el SO activo correspondiente). |
--mitigation-date YYYY-MM-DD | autodetectado | Fecha en que la vulnerabilidad fue cerrada mediante la actualización. Ver Momento del ataque. |
--since YYYY-MM-DD | — | Examinar solo las entradas de los logs web en o después de esta fecha (inclusive). Los archivos de log modificados por última vez antes no se abren. Se aplica a ambas pasadas de logs; las comprobaciones del estado del host no se ven afectadas. Ver Momento del ataque. |
--until YYYY-MM-DD | — | Examinar solo las entradas de los logs web en o antes de esta fecha (inclusive). |
--full-hash-scan | desactivado | Calcular recursivamente el hash de los archivos bajo temp/cache y los directorios de staging (más lento). |
--max-log-matches N | all | 100 | Cuántas entradas de log de ataque listar por categoría, mantenidas literalmente. |
--attacker-ip IP (repetible) | — | IP de atacante conocida adicional (p. ej., de un escaneo de otro host). Se trata como la IP IOC documentada. Ver Segunda pasada. |
--json | desactivado | Emitir JSON en lugar del informe de texto. |
--quiet | desactivado | Suprimir las líneas OK/INFO en la salida de texto. |
| Código | Significado |
|---|---|
0 | Limpio y parcheado, y el escaneo se completó en su totalidad. |
1 | Uno o más hallazgos (versión vulnerable y/o IOC/ataque) — investigar. |
2 | El escaneo no pudo completarse en su totalidad (errores, o sin privilegios y por lo demás limpio — no se pudo afirmar completamente un resultado limpio). |
Cada IOC documentado se corresponde con una comprobación local pasiva:
redcap_vX.Y.Z y la compara con las versiones parcheadas
(16.0.49 LTS / 17.3.10 LTS / 17.4.4 Standard; umbral afectado 13.3.0).temp/cache — se calcula el hash de cada archivo allí (y en los
directorios de staging) contra el SHA-256 del dropper de Unit 42. Nota: la herramienta no
marca archivos por la extensión .bladec. El núcleo de REDCap usa el motor de plantillas BladeOne,
que escribe plantillas compiladas .bladec con nombres basados en hash en temp/cache como
salida normal, por lo que la extensión no es un indicador de compromiso; un archivo malicioso
realmente depositado se detecta por el hash de su contenido, independientemente de la extensión..syslog-*, archivos xmrig*, y los directorios de la
competencia (/dev/shm/duet, /var/tmp/.bin) que la campaña bloquea con permisos 000./var/tmp, /dev/shm, /tmp, y procesos que se hacen pasar por syslog-ng-*.127.0.0.1:50001, y conexiones
activas a la(s) IP(s) de origen del atacante — la documentada, las
observadas, cualquier --attacker-ip, y cada IP que descubrió la comprobación de logs web.authorized_keys de SSH — claves que coinciden con la huella de la puerta trasera del atacante.
(Deliberadamente no lista claves no relacionadas para "revisión" — en un host normal
esas pertenecen a cuentas reales y no son verificables de forma independiente.)~/.profile — código de inicio inyectado y anti-forense de HISTFILE.