De Novato a Experto en CodeQL: Parte 5 – Depuración de Consultas

0
2

Al iniciar en el mundo de CodeQL, los usuarios a menudo enfrentan situaciones frustrantes cuando las consultas no arrojan los resultados esperados. La depuración de estas consultas puede ser un desafío, ya que CodeQL se basa en un lenguaje similar a Prolog, con un modelo de evaluación que difiere de lenguajes más comunes como Python. Esto significa que no se pueden utilizar técnicas tradicionales como «pasar por el código» o agregar declaraciones de impresión.

Sin embargo, CodeQL proporciona una variedad de características integradas que ayudan a diagnosticar y resolver problemas en las consultas. Entre estas herramientas se encuentran el árbol de sintaxis abstracta (AST) y gráficos de rutas parciales, que resultan esenciales para el proceso de depuración. Los usuarios pueden experimentar con ejemplos de consultas y plantear preguntas en la instancia pública de Slack de GitHub Security Lab, donde ingenieros de CodeQL están disponibles para ofrecer asistencia.

Recientemente, se han presentado dificultades al intentar escribir una consulta de CodeQL para detectar vulnerabilidades en proyectos que utilizan el marco Gradio. Este desafío fue traído a la atención gracias a las inquietudes de los usuarios, quienes encontraban complicada la implementación de dicha consulta. Un caso destacado involucró a un usuario que buscaba identificar variantes de una vulnerabilidad de deserialización insegura en un proyecto específico.

La vulnerabilidad en cuestión surge debido al uso de la función pickle.load para cargar archivos subidos por el usuario, lo que puede dar pie a ataques si se carga un archivo malicioso. Para abordar este asunto, los desarrolladores deben crear consultas de seguimiento de taint que identifiquen el flujo de datos desde los parámetros de entrada hasta los puntos de salida que podrían ejecutar código, como es el caso de las deserializaciones inseguras.

Para comenzar, los usuarios son aconsejados a crear ejemplos de código mínimos que faciliten la creación de bases de datos de CodeQL para reducir la cantidad de resultados y simplificar el proceso de prueba de las consultas. A partir de ahí, se puede avanzar hacia la evaluación rápida de predicados, la visualización de árboles de sintaxis abstracta y el uso de pasos adicionales de taint que ayuden a propagar adecuadamente los datos.

Al final del proceso, la implementación adecuada de estos elementos puede llevar a la identificación exitosa de vulnerabilidades en el código, permitiendo a los desarrolladores no solo comprender mejor sus aplicaciones, sino también fortalecer su seguridad ante posibles ataques.

vía: GitHub Security