Durante un pentest encontré una manera de agregar reglas de firewall iptables arbitrarias a un servidor. Estas reglas se aplican mediante el comando iptables-restore, y me he estado preguntando si hay alguna forma de ejecutar comandos manipulando la entrada.
Mi punto de partida es el siguiente, que dará como resultado la ayuda para iptables-restore
:
printf '*filter\n--help\n' | iptables-restore --test
Así que sé que las opciones se ejecutan como se esperaba. Ahora, la página de manual menciona una opción --modprobe=command
, que se describe como:
--modprobe = comando
Al agregar o insertar reglas en una cadena, use el comando para cargar los módulos necesarios (destinos, coincidencias de extensiones, etc.).
Genial, pensé, puedo ejecutar un comando proporcionando un objetivo inexistente y persuadiendo a iptables para que lo pruebe. He intentado lo siguiente (y sus variantes):
printf '*filter\n--modprobe=/some/command -A INPUT -j sometarget\n' | iptables-restore --test
Pero esto solo da un error sin intentar ejecutar /some/command
:
iptables-restore v1.4.12: No se pudo cargar el destino 'sometarget': no existe tal archivo o directorio
También he intentado usar un módulo que existe pero no está cargado actualmente, pero el módulo se carga correctamente sin llamar al comando modprobe personalizado.
¡Cualquier sugerencia o sugerencia sobre dónde ir a continuación (o cualquier otra ruta que pueda investigar) sería muy apreciada!
Editar: --modprobe
parece estar fuera de cuestión, por lo que la pregunta es: ¿existen otras posibles vulnerabilidades al pasar reglas maliciosas a iptables
?