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
opnsense-captive-lastseen-roam — OPNsense 26.7.6 - Alta - Remota - Omisión de acceso a la red - captive lastseen roam | Kitploit
Herramientas/GitHubGitHub/abraxas/opnsense-captive-lastseen-roam
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad de RedesPruebas de PenetraciónLabs y Práctica
GitHub

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
abraxas/opnsense-captive-lastseen-roam

opnsense-captive-lastseen-roam

OPNsense 26.7.6 - Alta - Remota - Omisión de acceso a la red - captive lastseen roam

Ver Repositorio
hace 2 díasAún no revisado

Abraxas Labs - opnsense-captive-lastseen-roam

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  opnsense-captive-lastseen-roam

opnsense-captive-lastseen-roam

Clase: Elusión de control de acceso a red Alcance: Remoto

OPNsense core 26.7.6 (a842fe48) - opnsense.org

El roaming del portal cautivo todavía hereda una sesión para el IPv4 más reciente de hostwatch en una MAC, más todos los IPv6. GHSA-864r (26.7.3) detuvo "añadir todos los IPv4". El IPv4 residual es list_hosts.py ORDER BY last_seen DESC. La IP primaria se asigna luego desde current_ips[0] sin filtrar. Un ARP gratuito attacker_IP is-at victim_MAC actualiza last_seen. Después de 26.7.3 ese IPv4 no es uno entre muchos; es el IPv4 que el filtro conserva si es más reciente que el propio ARP de la víctima. El NDP de IPv6 nunca estuvo limitado. Roaming y hostwatch activados por defecto.

Este paquete de GitHub permanece privado hasta la divulgación coordinada.

IDaún sin CVE
ClaseElusión de control de acceso a red
AlcanceRemoto (adyacente a L2, zona de portal cautivo)
CWECWE-345 / CWE-863
CVSSAlto: 7.4 CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N
ProductoOPNsense core
Afectado26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) roaming del portal cautivo
AutenticaciónHost no autenticado adyacente a L2 en una zona de portal cautivo; roaming activado
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Fijé la etiqueta 26.7.6 peel a842fe48. El laboratorio es un gadget de Python de las líneas fijadas de _filter_addresses / list_hosts.py / arp.py, espera en loopback en 127.0.0.1:18820.

Qué puede hacer un atacante

MétodoDestinoPrivilegio
IPv4 más reciente de hostwatch para una MAC con roaming=1fijar _filter_addresses / list_hosts.py ORDER BY last_seen DESC; primaria desde current_ips[0] sin filtrarIntegridad (probado en laboratorio): atacante 192.0.2.99 conservado, víctima 192.0.2.10 descartada, primaria=192.0.2.99. Laboratorio: attacker-ipv4-kept=192.0.2.99 victim-ipv4-dropped=yes roaming=1.
Misma MAC, roaming=0_filter_addresses devuelve [addresses[0]]Negativo (probado en laboratorio): primer IPv4 192.0.2.10 conservado.
IPv6 en la misma MAC, roaming=1_filter_addresses conserva todo lo que no sea v4Integridad (probado en laboratorio): todos los IPv6 conservados (2001:db8::10 y 2001:db8::99).
GARP / NDP falsificado que hostwatch almacena bajo la MAC de la víctimaPF.add_to_table / IPFW.add_accounting en vivo sobre __captiveportal_zone_NIntegridad (inferido): la IP de origen del atacante coincide con la tabla de paso del portal. El nombre de usuario y la cuota de la sesión siguen siendo de la víctima. El GARP en vivo en el cable y el paso en vivo de la tabla de zona no se ejecutan en este gadget.
Misma adición a la tablanúmero de regla de contabilidad de ipfw por sesiónIntegridad (inferido): los bytes del atacante cuentan en la sesión de la víctima.
El IPv4 de la víctima ya no es el primero_remove_client / eliminación pf de direcciones que no están en list_session_ipsDisponibilidad (inferido): el IPv4 de la víctima puede salir de la tabla de zona mientras el IPv4 del atacante permanece.

Probado en laboratorio vs inferido: conservación/descarte del IPv4 de last_seen, primera IP con roaming=0, y todos los IPv6 son ÉXITO en laboratorio. El GARP falsificado en el cable, el paso en vivo de pf/ipfw y la contaminación de contabilidad son inferidos. Gadget, no una VM FreeBSD completa de OPNsense.

Requiere: host no autenticado adyacente a L2 en una zona de portal cautivo. Roaming activado (por defecto). Hostwatch activado (por defecto). Una sesión ya autorizada en esa zona.

Superficie adyacente que permanece cerrada

SuperficieLaboratorio
GHSA-864r añadir-todos-los-IPv4cerrado en 26.7.3; este residual es el IPv4 de last_seen más todos los IPv6
roaming=0primer IPv4 conservado; IPv4 del atacante no seleccionado
Suplantación de XFF / X-Real-Ip de una IP de inicio de sesión distintael proxy de zona lo añade; no es un CIDR pf limpio
logon no autenticado de la IP del llamanteinicio de sesión documentado del portal de getClientIp()
Fuerza bruta de voucher sobre CSPRNG por defecto de 8+10no es este residual
zip-slip de plantillarealpath más carga de administrador
XSS del splash del portal al origen de WebGUIpuerto / chroot diferente
WAN no autenticadoadyacente a L2 en la zona
WebGUI / root / emisión de voucherpermanece cerrado

Sin WebGUI no autenticado. Sin root. Sin omisión del portal desde WAN.

Laboratorio

cd lab
./run.sh

Espera en loopback 127.0.0.1:18820. Proyecto de Compose opnsense-captive-lastseen-roam. Etiqueta de imagen de ese compose. Testigo OPNSENSE-CAPTIVE-LASTSEEN-ROAM-WITNESS. Última línea:

SUCCESS opnsense-captive-lastseen-roam attacker-ipv4-kept=192.0.2.99 victim-ipv4-dropped=yes roaming=1 OPNSENSE-CAPTIVE-LASTSEEN-ROAM-WITNESS

Lanzador raíz: python3 opnsense-captive-lastseen-roam-Abraxas-Labs.py.

La solución

Elegir el IPv4 que la sesión ya autorizó, no la fila más reciente de hostwatch para esa MAC. Limitar IPv6 de la misma manera, o exigir NDP que el kernel todavía mantenga. No asignar la primaria desde current_ips[0] sin filtrar cuando el filtro ya eligió una dirección diferente. Tratar un GARP que solo actualiza last_seen como observación no confiable, que es la invariante de GHSA-864r.

Referencias

  • github.com/opnsense/core a842fe48c21288d11a422cb944678e8eb308becf
  • cp-background-process.py _filter_addresses y reescritura de IP primaria
  • list_hosts.py ORDER BY last_seen DESC
  • lib/arp.py get_all_addresses_by_mac
  • Hermano (añadir-todos-los-IPv4, no este residual): GHSA-864r
  • CWE-345 / CWE-863
Descargar herramienta