Hace algún tiempo, tuve la oportunidad de experimentar con la configuración de un enrutador ordinario. El hecho es que el primero de abril me obligó a interpretar a mis camaradas de la universidad. La universidad tenía una red wifi. Decidí crear una red falsa en mi enrutador (establecer un nombre, contraseña y establecer la dirección MAC de uno de los puntos de acceso legítimos), iniciar mi propio servidor DNS y web en la computadora portátil. Todos los que se conectaron accidentalmente a mi red e intentaron acceder a cualquier sitio deberían ser redirigidos a mi página con una imagen de April Fools. Pero la historia no se trata de eso. Cuando estaba hurgando en la configuración del enrutador, encontré un error interesante, hoy te lo contaré.

En la etapa de configuración, el enrutador estaba conectado a Internet. Pero por alguna razón, los dispositivos conectados a Wi-Fi no recibieron Internet. Tengo que entenderlo. Había una pestaña en el panel del enrutador con la capacidad de usar la utilidad ping, por lo que no se puede encender telnet (espero que todos los lectores entiendan el peligro de que telnet esté abierto al exterior). El formulario se veía así:

Esta característica se implementa de la siguiente manera. El programa enrutador recibe del usuario una cadena que contiene la dirección, luego sustituye el comando ping en la cadena de llamada:
ping -c < > <>
¿Qué tan bien verifica el enrutador la cadena que contiene la dirección? Fue esta pregunta la que surgió en mi cabeza. Luego sustituí el ampersand y el
comando ls . Tengo esto:

Para aquellos en el tanque
En los sistemas UNIX, podemos forzar a bash a ejecutar un comando en segundo plano, sustituyendo un ampersand después. Al mismo tiempo, podemos sustituir un comando después del signo y se ejecutará simultáneamente con el primero. Lo que usé en este caso. Sustituyendo "8.8.8.8 & ls", obtuve "ping -c 3 8.8.8.8 & ls". El enrutador ejecutó los comandos ping y ls simultáneamente. Luego trajo el resultado.
Si este error se permitiera en otro lugar, se convertiría en una amenaza muy grave. Después de todo, dicha vulnerabilidad ayudaría a un atacante a forzar al enrutador a ejecutar cualquier comando, o incluso a obtener un control completo sobre el dispositivo. Dichas vulnerabilidades se clasifican como
CWE-78 (inyección de comandos del sistema operativo) .
No me quedé quieto y me apresuré a escribirle al fabricante sobre el error encontrado. Describí en detalle el modelo del enrutador, la versión de firmware y el script para reproducir el error. A lo que recibí una respuesta interesante:

Traducción (textualmente)
¿Podría verificar la versión del hardware en la etiqueta inferior del producto?
No tenemos Rev. Px. ¿Conoces la fuente o el lugar de compra de este dispositivo?
Al final resultó que, no tuvieron en cuenta lo que estaba escribiendo desde Rusia. Este modelo de enrutador se distribuyó solo en nuestro país. La correspondencia terminó con el envío de un nuevo firmware, que eliminó todas las deficiencias del anterior y agregó muchas características, pero por alguna razón no era de dominio público.
