Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Una regla por dentro

4 tareas · 40 min · Principiante

Detrás de cada hallazgo hay una regla, y una regla es un archivo de texto que alguien escribió, que puede estar demasiado ancha o demasiado estrecha y que se puede probar como cualquier otro código. En esta sala abres las reglas del repositorio de Naranjal Seguros y sus pruebas: aprendes a leer su estructura, a entender qué declaran sobre el fallo que buscan y a interpretar el resultado de una corrida de pruebas con sus dos formas de equivocarse.

0 de 4 · 0%

Objetivo de la sala

Detrás de cada hallazgo hay una regla, y una regla es un archivo de texto que alguien escribió, que puede estar demasiado ancha o demasiado estrecha y que se puede probar como cualquier otro código. En esta sala abres las reglas del repositorio de Naranjal Seguros y sus pruebas: aprendes a leer su estructura, a entender qué declaran sobre el fallo que buscan y a interpretar el resultado de una corrida de pruebas con sus dos formas de equivocarse.

Una regla en formato YAML, como las de Semgrep, tiene piezas fijas: un id, los languages a los que aplica, una severity, un message que le explica al desarrollador qué cambiar y un bloque metadata para lo que la herramienta no usa pero las personas sí. El corazón es el patrón. pattern es una forma de código a buscar; pattern-either pide que se cumpla cualquiera de varias; patterns pide que se cumplan todas. Las metavariables como $A capturan cualquier expresión. Y hay una familia de excluyentes, pattern-not y pattern-not-inside, que descartan lo que parece el fallo pero se sabe inocuo.

Una regla ancha atrapa mucho y se equivoca mucho (falsos positivos); una estrecha se equivoca poco pero deja pasar variantes (falsos negativos). Escribir una regla es elegir ese equilibrio con los ojos abiertos.

Responde para continuar

En una regla de este formato, ¿qué pieza se usa para decir qué forma conocida como inocua debe dejar pasar?

Ver pista de ayuda

Lo que se excluye se escribe como un patrón más, con la palabra «not» en su nombre. Abre las reglas y busca dónde aparece.

El bloque metadata es donde la regla enlaza su hallazgo con el catálogo de debilidades de software que mantiene MITRE, el CWE. Gracias a ese identificador, los informes de herramientas distintas se agrupan bajo el mismo nombre y quien lee un informe sabe a qué familia de fallos se refiere. La confianza dice cuánta probabilidad hay de que el hallazgo sea real; más adelante en este módulo la política la usa para decidir qué reglas pueden bloquear una fusión y cuáles solo avisan.

Cuando una regla propia o heredada no declara a qué debilidad corresponde, el informe pierde buena parte de su valor para quien debe priorizar.

Responde para continuar

Abre las reglas de Naranjal y escribe el identificador CWE que declara la regla hash-contrasena.

Ver pista de ayuda

Está en el bloque metadata del archivo de esa regla.

Una regla sin pruebas es una opinión. Para tenerlas se escribe un archivo de código con casos marcados con comentarios: # ruleid: <id-de-la-regla> antes de una línea que la regla debe marcar, y # ok: <id-de-la-regla> antes de una que no debe marcar. Con semgrep --test se corren todas y el resultado separa los dos fallos posibles: un caso ok que la regla marcó es un falso positivo; un caso ruleid que la regla no marcó es un falso negativo.

La regla propia de Naranjal, que exige autorizar un reintegro antes de pagarlo, tiene tres casos de prueba. El resultado de la última corrida dice dónde falla.

Responde para continuar

Escribe el nombre de la función de pruebas/reintegro.py cuyo caso la regla debía marcar y no marcó.

Ver pista de ayuda

El resultado de las pruebas da un número de línea. Abre el archivo de pruebas y mira qué función contiene esa línea.

Cuando una prueba falla hay dos tentaciones: cambiar la prueba para que vuelva a pasar o aflojar la regla para que deje de molestar. Las dos esconden el problema. La corrección honesta pregunta primero si el caso de prueba tiene razón. Si la tiene, se cambia la regla de modo que lo cumpla, y se vuelven a correr todas las pruebas para comprobar que lo que ya funcionaba sigue funcionando.

En la regla de consultas de Naranjal, un caso que se escribió como inocuo (dos textos fijos pegados entre sí) está siendo marcado. El caso tiene razón: ningún dato de fuera interviene.

Responde para continuar

La prueba consulta_fija falla porque la regla marca la unión de dos textos escritos en el código. ¿Cómo se corrige?

Ver pista de ayuda

El caso de prueba describe lo que la regla debe hacer. ¿Qué parte de la regla hay que cambiar, y qué hay que repetir después?

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