Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Por qué existe una inyección: dato y código mezclados

5 tareas · 35 min · Principiante

Todas las inyecciones de este módulo son la misma historia contada con intérpretes distintos: alguien arma con texto la instrucción que otro componente va a entender, y dentro de ese texto viaja algo que escribió una persona. Esta sala lee el inventario de intérpretes que entregó Editorial Cachipay en un encargo de caja blanca, separa los puntos donde la estructura y el dato viajan juntos de los que los mandan por separado, y fija el criterio con el que se leen las cinco salas siguientes. No se envía ninguna petición a la plataforma: en esta fase solo se lee.

0 de 5 · 0%

Objetivo de la sala

Todas las inyecciones de este módulo son la misma historia contada con intérpretes distintos: alguien arma con texto la instrucción que otro componente va a entender, y dentro de ese texto viaja algo que escribió una persona. Esta sala lee el inventario de intérpretes que entregó Editorial Cachipay en un encargo de caja blanca, separa los puntos donde la estructura y el dato viajan juntos de los que los mandan por separado, y fija el criterio con el que se leen las cinco salas siguientes. No se envía ninguna petición a la plataforma: en esta fase solo se lee.

Un intérprete es cualquier componente que recibe texto y lo entiende como instrucciones: un motor de base de datos, un motor de plantillas, el intérprete de órdenes del sistema operativo, un analizador de documentos, un servidor de directorio. Lo que le llega tiene siempre dos partes: la estructura, que dice qué se hace, y los datos, que dicen sobre qué.

Cuando el programa arma una sola cadena uniendo la estructura con un valor que vino de fuera, el intérprete ya no puede distinguirlas: lo que recibe es un texto, y lo lee entero como instrucción. Si ese valor contiene algo con significado para ese intérprete, deja de ser un dato y pasa a formar parte de la instrucción. Eso es una inyección, y es la misma causa en todas sus formas. En el catálogo público de debilidades de MITRE la familia entera cuelga de CWE-74, y cada variante tiene su número debajo.

La consecuencia práctica para el evaluador: el hallazgo no se busca por el nombre de la tecnología, se busca por la forma de armar la instrucción.

Responde para continuar

¿Qué define a una inyección del lado servidor, sea del tipo que sea?

Ver pista de ayuda

Pregúntate qué tienen en común todas las variantes, no qué las diferencia.

El inventario de la editorial marca, para cada punto en el que la plataforma le entrega algo a un intérprete, si la estructura y el dato van en la misma cadena o separados. Esa columna es el mapa del módulo: cada punto marcado es un candidato que las salas siguientes revisan en su propio terreno.

Abre el laboratorio y revísala entera antes de contar.

Responde para continuar

¿Cuántos puntos del inventario entregan al intérprete la estructura y el dato en la misma cadena?

Ver pista de ayuda

Ejecuta `SELECT id, componente, interprete FROM interpretes WHERE estructura_y_dato = 'en la misma cadena'` y cuenta las filas.

Dos puntos con la misma forma de armar la instrucción no valen lo mismo. Lo que decide es el origen del dato: un valor que escribe cualquiera en un formulario público está al alcance de todo el mundo; uno que solo puede poner alguien del equipo exige antes una cuenta; y uno que produce y firma la propia aplicación, y cuya firma se comprueba al volver, no lo controla quien lo transporta.

Ese último caso es el que más confunde en los informes, porque el dato viaja por el navegador y parece de fuera. Ordena el inventario por el origen y busca el único que cumple esa condición.

Responde para continuar

Escribe el identificador del punto cuyo dato lo produce y lo firma la propia aplicación antes de devolverlo.

Ver pista de ayuda

Ejecuta `SELECT id, componente, origen_del_dato FROM interpretes ORDER BY origen_del_dato` y lee la columna del origen.

Si la causa es que estructura y dato viajan juntos, la corrección es separarlos: entregar al intérprete la estructura por un lado y los valores por otro, con la interfaz que ese intérprete ofrezca para ello. Casi todos tienen una, y es lo primero que hay que preguntar al revisar.

Hay un caso en el que no se puede, y conviene reconocerlo: cuando lo que la persona elige es parte de la estructura, como el nombre de una plantilla o el de un programa que se va a ejecutar. Ahí no hay valor que separar, y lo que corresponde es una lista cerrada de opciones permitidas en el servidor, donde lo que llega se usa para elegir una entrada de la lista y nunca para construir nada.

Filtrar caracteres sospechosos no entra en ninguno de los dos casos: siempre queda una variante fuera de la lista, y la causa sigue viva.

Responde para continuar

Una pantalla deja elegir qué informe se genera, y ese nombre decide qué plantilla se carga. ¿Qué recomiendas?

Ver pista de ayuda

Aquí el dato no es un valor dentro de la instrucción: es parte de la estructura.

Con el inventario delante, lo honesto es decir qué se sabe y qué no. Un punto donde la estructura y el dato viajan juntos es una condición necesaria, no una demostración: puede que el intérprete reciba el valor ya tratado un poco más arriba, o que el componente solo lo alcance alguien con una cuenta de administración. Afirmar un impacto sin evidencia que lo sostenga es lo que hace que un informe pierda credibilidad entera por un párrafo.

Responde para continuar

¿Cómo redactas el estado de estos hallazgos al cerrar la fase de lectura de código?

Ver pista de ayuda

Separa lo que la evidencia prueba de lo que todavía es una hipótesis razonable.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad