Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
vcheck — Herramienta de detección y mitigación de vulnerabilidades para los bugs Copy Fail y Dirty Frag (CVE-2026-31431, CVE-2026-43284, CVE-2026-43500) | Kitploit
Herramientas/GitHubGitHub/krisiasty/vcheck
Escáneres de VulnerabilidadesAnálisis de VulnerabilidadesAuditoría de Configuración
GitHubkrisiasty/vcheck

vcheck

Herramienta de detección y mitigación de vulnerabilidades para los bugs Copy Fail y Dirty Frag (CVE-2026-31431, CVE-2026-43284, CVE-2026-43500)

Ver Repositorio
224hace 7 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
# vcheck

Audita un host Linux remoto a través de SSH en busca de las vulnerabilidades de módulos del kernel Copy Fail y Dirty Frag y, opcionalmente, aplica mitigaciones:

| CVE            | Nombre              | Módulos afectados                                  |
| -------------- | ------------------- | -------------------------------------------------- |
| CVE-2026-31431 | Copy Fail           | `algif_aead`                                       |
| CVE-2026-43284 | Dirty Frag (IPsec)  | `esp4`, `esp6`, `ipcomp4`, `ipcomp6`, `xfrm_user` |
| CVE-2026-43500 | Dirty Frag (RxRPC)  | `rxrpc`, `kafs`                                    |

Para cada módulo afectado, vcheck informa si está cargado actualmente, integrado en el kernel en ejecución, si tiene rastros pasados en los registros del kernel, si hay sockets `AF_ALG` activos (solo Copy Fail) y si ya está en la lista negra en `/etc/modprobe.d/`.

Con `-fix`, vcheck informa el estado inicial, escribe un fragmento `cve-XXXX-XXXXX-disable.conf` para cualquier módulo que aún no esté en la lista negra, luego vuelve a ejecutar las comprobaciones e informa el estado final. Con `-fix -unload`, vcheck también intenta descargar los módulos afectados que estaban cargados antes de la corrección, luego usa el análisis final para verificar si aún están cargados. Con `-fix -rebuild-initramfs`, vcheck reconstruye el initramfs para el kernel actualmente en ejecución (solamente) después de escribir un fragmento, de modo que la lista negra quede incorporada en la imagen de arranque siguiente. Las entradas de kernel anteriores conservan su initramfs original como respaldo.

## Use `-fix` solo después de una ejecución de solo verificación

**Ejecute siempre vcheck sin `-fix` primero.** Lea el informe y confirme que los módulos afectados son seguros de deshabilitar en este host antes de volver a ejecutar con `-fix`. Deshabilitar módulos del kernel de los que dependen cargas de trabajo legítimas puede afectar a los usuarios y romper aplicaciones.

En particular:

- Considere `-fix` como seguro **solo** cuando ninguno de los módulos afectados esté actualmente cargado, es decir, cada módulo se reporte como `mitigado` o `módulo no en lista negra` (sin líneas `VULNERABLE` o `en lista negra pero actualmente cargado`). Un módulo cargado casi siempre significa que _algo en el host lo está usando activamente_; verifique eso antes de ponerlo en la lista negra.
- Los módulos IPsec (`esp4`, `esp6`, `ipcomp4`, `ipcomp6`, `xfrm_user`) son necesarios para cualquier implementación de IPsec/strongSwan/WireGuard-over-IPsec/IKE. Los módulos `ipcomp4`/`ipcomp6` implementan la compresión de carga útil IPComp y pueden ser auto-negociados como parte de una SA IPsec incluso cuando no están configurados explícitamente. No ponga en la lista negra ninguno de ellos en una puerta de enlace VPN, un punto final IPsec, o en cualquier lugar donde `ip xfrm policy` devuelva reglas. Tenga en cuenta que el módulo del framework `xfrm_algo` está intencionalmente **no** en esta lista — según la guía de los proveedores (Red Hat, Ubuntu, AWS), bloquear los módulos de protocolo ESP e IPComp más la interfaz de configuración netlink `xfrm_user` es suficiente, y poner en la lista negra `xfrm_algo` rompería cualquier otra transformación xfrm sin beneficio adicional.
- Los módulos RxRPC (`rxrpc`, `kafs`) son necesarios para cualquier host que monte sistemas de archivos AFS. Deshabilitarlos romperá esos montajes en el próximo arranque.
- `algif_aead` expone la criptografía del kernel a través de la familia de sockets `AF_ALG`. Rara vez es usado directamente por código de aplicación, pero verifique listando los sockets activos (`ss -p --af-alg`) y comprobando los consumidores en espacio de usuario antes de ponerlo en la lista negra.

Los fragmentos de lista negra que escribe vcheck solo surten efecto en el momento de carga del módulo (típicamente en el próximo arranque, o `modprobe -r <módulo>` mientras el sistema está inactivo). Un módulo que _ya está cargado_ seguirá funcionando incluso después de `-fix` — vcheck reportará esto como `en lista negra pero actualmente cargado; ejecute 'modprobe -r' o reinicie`. Pasar `-unload` con `-fix` le pide a vcheck que ejecute `modprobe -r` para los módulos afectados cargados después de escribir los fragmentos de lista negra. Úselo solo cuando haya confirmado que los módulos son seguros de eliminar del kernel en ejecución.

Pasar `-rebuild-initramfs` con `-fix` regenera el initramfs **solo para el kernel actualmente en ejecución** (`update-initramfs -u -k $(uname -r)` en Debian/Ubuntu, `dracut -f --kver $(uname -r)` en RHEL/Fedora). Otros kernels instalados mantienen su initramfs existente intacto, por lo que si algo sale mal después de reiniciar, puede seleccionar una entrada de kernel anterior desde el menú de arranque y recuperarse. Las futuras instalaciones de kernel reconstruyen su propio initramfs a partir del estado actual de `/etc/modprobe.d/`, por lo que la lista negra se propaga automáticamente sin necesidad de volver a ejecutar vcheck. Si no está presente ni `update-initramfs` ni `dracut` (por ejemplo, Arch, Alpine, imágenes inmutables), vcheck advierte y continúa — reconstruya manualmente con la herramienta de la distribución antes de reiniciar.

La reconstrucción puede tardar varios minutos (especialmente `dracut` en hosts con muchos controladores), lo que excedería el tiempo de espera de diagnóstico `-command-timeout`. Se ejecuta bajo su propio `-initramfs-timeout` (por defecto `10m`) para que la reconstrucción tenga el tiempo que necesita mientras que las comprobaciones rápidas mantienen su presupuesto ajustado. Aumente `-initramfs-timeout` para hardware lento, o pase `0` para deshabilitar el tiempo de espera por completo. Durante los comandos remotos de larga duración, vcheck envía solicitudes de keepalive SSH cada `30s` por defecto para evitar que los temporizadores de inactividad NAT/cortafuegos corten la conexión. Ajuste esto con `-ssh-keepalive`, o pase `0` para deshabilitarlo.

## Instalación

**Homebrew (macOS):**

```bash
brew install --cask krisiasty/tap/vcheck
```

**Binarios precompilados** para Linux, macOS y Windows están publicados en la [página de versiones](https://github.com/krisiasty/vcheck/releases).

**Desde el código fuente** (requiere Go 1.26+):

```bash
go install github.com/krisiasty/vcheck@latest
```

## Uso

```text
vcheck -host HOST [flags]
```

| Flag                 | Por defecto  | Descripción                                                                                          |
| -------------------- | ------------ | ---------------------------------------------------------------------------------------------------- |
| `-host`              | _(requerido)_| Host remoto                                                                                          |
| `-user`              | `$USER`      | Usuario remoto                                                                                       |
| `-port`              | `22`         | Puerto SSH remoto                                                                                    |
| `-agent`             | `true`       | Usar el agente SSH para la autenticación                                                             |
| `-identity`          | _(vacío)_    | Ruta a un archivo de clave privada (solicita contraseña si está cifrada)                             |
| `-password`          | `false`      | Solicitar una contraseña SSH                                                                         |
| `-insecure`          | `false`      | Aceptar claves de host aún no registradas en `known_hosts`; las discrepancias con una clave registrada aún fallan |
| `-fix`               | `false`      | Escribir fragmentos en `/etc/modprobe.d` para los módulos que aún no están en la lista negra       |
| `-unload`            | `false`      | Con `-fix`, descargar los módulos afectados después de ponerlos en la lista negra                     |
| `-rebuild-initramfs` | `false`      | Con `-fix`, reconstruir el initramfs solo para el kernel en ejecución (`update-initramfs` o `dracut`)  |
| `-skip-logs`         | `false`      | Omitir las comprobaciones del historial de registros del kernel                                     |
| `-timeout`           | `15s`        | Tiempo de espera de conexión SSH                                                                      |
| `-ssh-keepalive`     | `30s`        | Intervalo de keepalive SSH (`0` lo deshabilita)                                                       |
| `-command-timeout`   | `30s`        | Tiempo de espera de comando remoto (`0` lo deshabilita)                                              |
| `-initramfs-timeout` | `10m`        | Tiempo de espera para el paso de reconstrucción del initramfs (`0` lo deshabilita); solo se usa con `-rebuild-initramfs` |
| `-debug`             | `false`      | Aumentar la verbosidad de los registros                                                              |
| `-version`           | `false`      | Mostrar la versión y salir                                                                           |

Al menos uno de `-agent`, `-identity` o `-password` debe producir un método de autenticación utilizable. Los métodos se prueban en el orden listado.

Se requiere sudo en el destino. Si está configurado sudo sin contraseña, la herramienta procede silenciosamente; de lo contrario, solicita una contraseña una vez (la entrada está oculta) y la proporciona a través de `sudo -S` para cada comando subsiguiente.

## Códigos de salida

| Código | Significado                                                                        |
| ------ | ---------------------------------------------------------------------------------- |
| `0`    | Todos los módulos afectados en lista negra, descargados, no integrados e inactivos |
| `1`    | Error de uso                                                                       |
| `2`    | Conexión SSH fallida                                                               |
| `3`    | Autenticación sudo fallida                                                         |
| `4`    | Uno o más módulos no en lista negra (sin exposición actual)                        |
| `5`    | Uno o más módulos actualmente cargados, integrados en el kernel o en uso activo    |
| `99`   | Fallo interno/de comprobación                                                      |

## Salida de ejemplo

### Host completamente mitigado

```console
$ vcheck -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF mitigated cve=CVE-2026-31431 module=algif_aead
INF mitigated cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs
```

### Host no mitigado y parcialmente cargado — verificación simple

```console
$ vcheck -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR VULNERABLE cve=CVE-2026-43284 module=esp4 loaded=true
ERR module not blacklisted cve=CVE-2026-43284 module=esp6
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp4
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp6
ERR module not blacklisted cve=CVE-2026-43284 module=xfrm_user
ERR module not blacklisted cve=CVE-2026-43500 module=rxrpc
ERR module not blacklisted cve=CVE-2026-43500 module=kafs
```

### Mismo host con `-fix` — primera ejecución

```console
$ vcheck -fix -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF findings before fix
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR VULNERABLE cve=CVE-2026-43284 module=esp4 loaded=true
ERR module not blacklisted cve=CVE-2026-43284 module=esp6
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp4
ERR module not blacklisted cve=CVE-2026-43284 module=ipcomp6
ERR module not blacklisted cve=CVE-2026-43284 module=xfrm_user
ERR module not blacklisted cve=CVE-2026-43500 module=rxrpc
ERR module not blacklisted cve=CVE-2026-43500 module=kafs
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43284-disable.conf modules="[esp4 esp6 ipcomp4 ipcomp6 xfrm_user]"
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43500-disable.conf modules="[rxrpc kafs]"
INF re-scanning after fix snippets_written=2
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF findings after fix
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR blacklisted but currently loaded; run 'modprobe -r' or reboot cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs
```

La lista negra está en vigor, pero `esp4` ya estaba cargado en el kernel antes de que se escribiera el fragmento. Reinicie o ejecute `sudo modprobe -r esp4` en el destino para eliminarlo por completo.

### Segunda ejecución — esp4 aún cargado

```console
$ vcheck -fix -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF findings before fix
INF mitigated cve=CVE-2026-31431 module=algif_aead
ERR blacklisted but currently loaded; run 'modprobe -r' or reboot cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs
INF fix: nothing to do — all affected modules already blacklisted
```

### Tercera ejecución — después de `modprobe -r esp4`

```console
$ vcheck -host host.example.com -identity ~/.ssh/id_ed25519
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
INF checking vulnerability cve=CVE-2026-43284 name="Dirty Frag (IPsec)"
INF checking vulnerability cve=CVE-2026-43500 name="Dirty Frag (RxRPC)"
INF mitigated cve=CVE-2026-31431 module=algif_aead
INF mitigated cve=CVE-2026-43284 module=esp4
INF mitigated cve=CVE-2026-43284 module=esp6
INF mitigated cve=CVE-2026-43284 module=ipcomp4
INF mitigated cve=CVE-2026-43284 module=ipcomp6
INF mitigated cve=CVE-2026-43284 module=xfrm_user
INF mitigated cve=CVE-2026-43500 module=rxrpc
INF mitigated cve=CVE-2026-43500 module=kafs
```

### Con `-rebuild-initramfs`

```console
$ vcheck -fix -rebuild-initramfs -host host.example.com -identity ~/.ssh/id_ed25519
...
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43284-disable.conf modules="[esp4 esp6 ipcomp4 ipcomp6 xfrm_user]"
INF writing modprobe.d snippet path=/etc/modprobe.d/cve-2026-43500-disable.conf modules="[rxrpc kafs]"
INF rebuilding initramfs for running kernel timeout=10m0s
INF initramfs rebuilt for running kernel tool=update-initramfs
INF re-scanning after fix snippets_written=2
...
```

Solo se reconstruye el initramfs del kernel en ejecución. Otros kernels instalados conservan su initramfs existente, por lo que una entrada anterior en el menú de arranque sigue siendo un respaldo funcional si el nuevo initramfs causa problemas. En un host que no tenga ni `update-initramfs` ni `dracut`, vcheck registra `WRN no supported initramfs tool found ...` y continúa.

### Host por primera vez — `-insecure`

```console
$ vcheck -insecure -host host.example.com -identity ~/.ssh/id_ed25519
WRN host key not in known_hosts; accepting due to -insecure host=host.example.com:22 remote=192.0.2.42:22 fingerprint=SHA256:AAAAEXAMPLEfingerPrint000000000000000000000
INF connected user=ops host=host.example.com port=22
INF checking vulnerability cve=CVE-2026-31431 name="Copy Fail"
...
```

`-insecure` acepta hosts que aún no están en `known_hosts`. Si un host _ya_ está registrado y presenta una clave diferente, la conexión aún falla — el indicador es solo una anulación de "primer contacto", no una forma de suprimir las advertencias de intermediario en un host conocido.

## Detalles de detección

- **Cargado:** `lsmod` se obtiene una vez y los nombres de los módulos se comparan con la primera columna.
- **Integrado:** Se verifican `/lib/modules/$(uname -r)/modules.builtin` y `/sys/module` porque los fragmentos de modprobe no pueden deshabilitar el código compilado en el kernel en ejecución.
- **En lista negra:** se busca en cada archivo bajo `/etc/modprobe.d/` (`grep -rE`) una directiva `install <módulo> /bin/false` — la misma forma que escribe vcheck con `-fix`. Otras formas de deshabilitar (por ejemplo, `blacklist`) no se reconocen.
- **Actividad pasada:** se consulta primero `journalctl -k`, con un respaldo a `/var/log/kern.log`; se conservan las últimas cinco líneas coincidentes por módulo. Pase `-skip-logs` para omitir este paso.
- **Sockets activos (solo `algif_aead`):** `ss -p --af-alg` enumera los sockets `AF_ALG` abiertos; cualquier salida que no sea el encabezado cuenta como uso activo.

Todos los comandos se ejecutan a través de `sudo` y están limitados por `-command-timeout` — se requiere acceso privilegiado para leer `/var/log/kern.log`, enumerar sockets `AF_ALG` y escribir en `/etc/modprobe.d/`. Con `-unload`, también se requiere acceso privilegiado para ejecutar `modprobe -r`. Con `-rebuild-initramfs`, vcheck ejecuta `update-initramfs -u -k $(uname -r)` (Debian/Ubuntu) o `dracut -f --kver $(uname -r)` (RHEL/Fedora), que también necesitan root.
Descargar herramienta