Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Cómo razona un analizador estático

5 tareas · 40 min · Principiante

Un analizador estático no ejecuta la aplicación: lee el código y busca en él formas que alguien describió como peligrosas. Lo que encuentra depende de lo que le dijeron que buscara y de hasta dónde sabe seguir un dato. Seguros Caobo te entrega la única regla propia que corre sobre su portal de pólizas, el código del portal y el informe de anoche, que trae un solo resultado. Te preguntan si pueden decir que el portal está limpio.

0 de 5 · 0%

Objetivo de la sala

Un analizador estático no ejecuta la aplicación: lee el código y busca en él formas que alguien describió como peligrosas. Lo que encuentra depende de lo que le dijeron que buscara y de hasta dónde sabe seguir un dato. Seguros Caobo te entrega la única regla propia que corre sobre su portal de pólizas, el código del portal y el informe de anoche, que trae un solo resultado. Te preguntan si pueden decir que el portal está limpio.

Hay dos maneras de razonar dentro de un analizador. La más sencilla busca una forma en el texto del programa: una llamada a una función concreta, un argumento armado de cierta manera. Encuentra rápido lo que se parece al patrón y se equivoca en las dos direcciones: marca lo que se parece pero no es peligroso, y deja pasar lo peligroso escrito de otra forma.

La segunda sigue el recorrido de un dato. La regla declara de dónde vienen los datos que no son de fiar (las fuentes, por ejemplo lo que llega en una petición), dónde serían peligrosos (los sumideros, por ejemplo la función que ejecuta una consulta) y qué funciones los dejan limpios por el camino (los saneadores). El motor solo avisa cuando un dato va de una fuente a un sumidero sin pasar por un saneador. Es más preciso, y tiene una debilidad que conviene no olvidar: confía a ciegas en la lista de saneadores que alguien escribió.

Responde para continuar

En una regla de flujo de datos, ¿qué hace que el motor deje de avisar aunque un dato de la petición llegue a la consulta?

Ver pista de ayuda

Fíjate en las tres listas que declara la regla y en cuál de ellas corta el aviso.

Abre el laboratorio y lee regla-sql.yml: tiene sus fuentes, su sumidero y dos saneadores. Después lee utilidades.py para ver qué hace de verdad cada uno. Uno de los dos deja el dato en un tipo que ya no puede llevar texto libre; el otro solo cambia mayúsculas y espacios, que no tienen nada que ver con la forma de una consulta SQL. Busca en polizas.py la función que arma una consulta con un dato pasado por ese segundo saneador.

Responde para continuar

¿Qué función de polizas.py no sale en el informe porque su dato pasa por un saneador que no protege la consulta? Escribe su nombre tal como aparece.

Ver pista de ayuda

Busca dónde se llama a la función que pone el texto en minúsculas.

El informe dice en su cabecera cómo está configurado el flujo de datos. La documentación del motor de flujo de datos de Semgrep lo describe como intraprocedimental: sigue el dato dentro de una función, no de una función a otra. Cuando un dato de la petición entra en una función y se le pasa como argumento a otra, la segunda lo recibe como un parámetro cualquiera, y para la regla un parámetro no es una fuente.

No es un fallo del motor, es su alcance. El auditor que no lo sabe lee «cero resultados» como «cero problemas». Busca en polizas.py la función que arma una consulta con un valor que le llegó desde otra función, la que sí lo leyó de la petición.

Responde para continuar

¿Qué función ejecuta una consulta armada con un dato de la petición que le llegó como argumento desde otra función? Escribe su nombre.

Ver pista de ayuda

La función que lee el mes de la petición no ejecuta nada: se lo entrega a otra.

Una regla solo encuentra lo que describe. La de Caobo habla de consultas SQL; nadie escribió una que pregunte si una ruta comprueba que el recurso pedido es de quien lo pide. Ese tipo de fallo —control de acceso por un identificador que elige el usuario, CWE-639— casi nunca tiene una forma reconocible en el texto: depende de una comprobación que falta, y para que un analizador lo vea alguien tiene que contarle cuál es la comprobación que debería estar.

Lee utilidades.py para ver qué comprueba de verdad el decorador de sesión, y busca en polizas.py la ruta que entrega un documento de cualquier número que se le pida.

Responde para continuar

¿Qué ruta del portal entrega la póliza del número que se le pida sin comprobar de quién es? Escríbela tal como aparece en el decorador.

Ver pista de ayuda

El decorador de sesión solo mira que haya alguien conectado; busca la ruta que envía un archivo.

Con lo que has leído, el informe de una regla y un motor que no cruza funciones no puede sostener la frase «el portal no tiene inyección SQL», y mucho menos «no tiene fallos de código». Lo que sí puede sostener es más modesto y más útil: qué reglas corrieron, qué cubren, qué encontraron y qué puntos ciegos se conocen, con los que ya se encontraron a mano.

Responde para continuar

¿Qué debería decir la auditoría anual de Caobo sobre el análisis estático del portal?

Ver pista de ayuda

Un informe vacío dice lo que miró el motor, no lo que hay en el código.

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