Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Salidas hacia consultas y comandos

5 tareas · 40 min · Principiante

Cuando el texto del modelo termina dentro de una consulta a una base de datos o de una orden del sistema, ya no se trata de cómo se ve una página: se trata de qué datos se leen y qué se ejecuta. En esta sala consultas, en solo lectura, el inventario de consumidores de la salida de Pabilo en Tizón Seguros y el registro de las consultas que generó en una semana: cuál construye la consulta pegando texto, cuántas filas de más devolvió una de ellas y qué campo llega a una orden del sistema. Las condiciones dañinas están descritas, nunca escritas.

0 de 5 · 0%

Objetivo de la sala

Cuando el texto del modelo termina dentro de una consulta a una base de datos o de una orden del sistema, ya no se trata de cómo se ve una página: se trata de qué datos se leen y qué se ejecuta. En esta sala consultas, en solo lectura, el inventario de consumidores de la salida de Pabilo en Tizón Seguros y el registro de las consultas que generó en una semana: cuál construye la consulta pegando texto, cuántas filas de más devolvió una de ellas y qué campo llega a una orden del sistema. Las condiciones dañinas están descritas, nunca escritas.

Que un asistente traduzca una pregunta en lenguaje natural a una consulta es cómodo, y por eso es habitual. El diseño frágil es dejar que el modelo escriba el texto de la consulta y pegarlo tal cual, o pegar su filtro dentro de una consulta escrita por el equipo: cualquier condición que el modelo añada, porque se equivocó o porque un documento lo empujó, se ejecuta con los permisos de la aplicación. Es la inyección en consultas de siempre (CWE-89 en el catálogo de MITRE), con el modelo como intermediario.

El diseño robusto separa las dos cosas. El modelo no escribe código de consulta: elige entre opciones cerradas (qué campo filtrar, de una lista; qué operación, de una lista) y propone valores. El código de la aplicación construye la consulta con esas piezas y pasa los valores como parámetros, que la base de datos trata siempre como datos y nunca como parte de la instrucción. Si el modelo propone algo fuera de la lista, la consulta no se construye.

Responde para continuar

¿Qué diseño evita que una condición añadida por el modelo cambie lo que hace una consulta?

Ver pista de ayuda

Busca la opción en la que el texto del modelo nunca llega a ser parte de la instrucción.

Consulta el inventario de consumidores. Cada fila dice qué toma de la salida, para qué lo usa y cómo construye la consulta o la orden. Uno de los consumidores que consultan una base de datos lo hace bien: campo de lista cerrada y valor como parámetro. El otro no.

Localiza el consumidor que lleva el texto del modelo dentro de una consulta a una base de datos.

Responde para continuar

¿Qué consumidor construye su consulta a la base de datos pegando dentro el texto que escribió el modelo? Escribe su nombre tal como aparece.

Ver pista de ayuda

Ejecuta `SELECT * FROM consumidores` y lee la columna `construccion` de las filas que consultan una base.

Cuando una consulta construida así se desvía, el efecto se ve en los números: devuelve muchas más filas de las que pedía el usuario, porque la condición añadida amplía el alcance. El registro de consultas generadas anota, para cada una, cuántas filas se esperaban al rehacer el pedido a mano y cuántas devolvió de verdad. Esa diferencia es la primera medida del daño: cuántos registros vio alguien que no debía.

Fíjate también en la consulta que el sistema rechazó antes de ejecutarla: es la lista cerrada del buscador haciendo su trabajo. Después localiza la consulta desviada y calcula cuántas filas devolvió de más.

Responde para continuar

¿Cuántas filas devolvió de más la consulta desviada del informe de siniestralidad, respecto a las que esperaba el pedido? Escribe solo el número.

Ver pista de ayuda

Ejecuta `SELECT * FROM consultas_generadas` y resta las esperadas a las devueltas en la fila con observación.

El caso más grave es el de un texto del modelo que termina en una orden del sistema operativo. Si la orden se lanza a través de un intérprete de órdenes y el texto se pega dentro, los caracteres que ese intérprete trata como separadores o sustituciones convierten un título en otra orden (la debilidad CWE-78 del catálogo de MITRE). Aquí el daño no se limita a leer de más: puede ejecutarse cualquier cosa con los permisos del proceso.

El inventario muestra dos consumidores que lanzan programas. Uno pasa el valor como argumento de un programa fijo, sin intérprete, y además valida su formato. El otro no. Localiza qué campo de la salida acaba dentro de la orden.

Responde para continuar

¿Qué campo de la salida de Pabilo se pega dentro de una orden lanzada con un intérprete de órdenes? Escribe su nombre.

Ver pista de ayuda

Ejecuta `SELECT * FROM consumidores` y lee la fila del generador de reportes.

La corrección no es «limpiar» el título quitando caracteres raros: cualquier lista de caracteres prohibidos se queda corta. La corrección es estructural, igual que en las consultas. Primero, no usar un intérprete de órdenes: lanzar un programa fijo y pasarle los valores como una lista de argumentos, de modo que ninguno se interprete. Segundo, validar el valor contra lo que se espera (un formato, una longitud, una lista de permitidos). Tercero, que el proceso corra con el permiso mínimo, para que un fallo restante tenga poco alcance. Mejor aún si el título ni siquiera hace falta en la orden y se escribe dentro del archivo del reporte.

Responde para continuar

¿Qué cambio corrige el generador de reportes de Tizón?

Ver pista de ayuda

Fíjate en cómo lo hace el exportador contable del inventario.

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