Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/rvermeulen/codeql-workshop-cve-2021-21380
Análisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoSeguridad WebAprendizaje y EducaciónLabs y Práctica
GitHubrvermeulen/codeql-workshop-cve-2021-21380

codeql-workshop-cve-2021-21380

Un taller de CodeQL que cubre CVE-2021-21380

Ver Repositorio
12514hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Taller de CodeQL para Java: Encontrar una inyección SQL

En este taller utilizaremos el razonamiento sintáctico y semántico para encontrar una inyección SQL en el componente de calificación de la plataforma XWiki documentado por CVE-2021-21380

Contenidos

  • Taller de CodeQL para Java: Encontrar una inyección SQL
    • Contenidos
    • Requisitos previos e instrucciones de configuración
      • En tu máquina local
        • Instalación
        • Pasos de configuración
    • Taller
      • Aprendizajes
      • Planteamiento del problema
      • Ejercicios
        • Ejercicio 1
        • Intermedio 1
        • Ejercicio 2
        • Ejercicio 3
        • Intermedio 2
        • Ejercicio 4
        • Ejercicio 5
        • Intermedio 3
        • Ejercicio 6
        • Ejercicio 7
        • Ejercicio 8
    • ¿Qué sigue?

Requisitos previos e instrucciones de configuración

En tu máquina local

Por favor, completa esta sección antes del taller, si es posible.

Instalación

  • Instala Visual Studio Code.

  • Instala la extensión CodeQL para Visual Studio Code.

  • No necesitas instalar la CLI de CodeQL: la extensión se encargará de esto por ti.

  • Clona este repositorio:

    git clone https://github.com/advanced-security/codeql-workshop-cve-2021-21380.git
    

Pasos de configuración

  • Importa la base de datos de CodeQL que se usará en el taller:
    • Haz clic derecho en el archivo xwiki-platform-CVE-2021-21380.zip en la vista del Explorador y selecciona el comando CodeQL: Set Current Database.
    • La base de datos aparecerá en la vista de bases de datos de CodeQL, accesible desde el icono de QL en la Barra de Actividades.
  • Instala las dependencias para analizar código Java y ejecutar las pruebas de los ejercicios y soluciones.
    • Desde la Paleta de Comandos (Cmd/Ctrl+Mayús+P), busca y ejecuta el comando CodeQL: Install Pack Dependencies.
    • En la parte superior de tu ventana de VS Code, escribe github en la caja para filtrar la lista.
    • Marca la casilla junto a cve-2021-21380-exercises, cve-2021-21380-exercises-tests, cve-2021-21380-solutions y cve-2021-21380-solutions-tests.
    • Haz clic en OK/Enter.
  • Valida que todo funcione como se espera ejecutando las pruebas de las soluciones.
    • Abre la vista de pruebas y presiona ejecutar pruebas (el icono de reproducción aparece al pasar el ratón sobre las soluciones) junto al elemento de soluciones en el árbol.

Taller

Aprendizajes

El taller está dividido en varios ejercicios que introducen el soporte del lenguaje QL para Java y termina con una consulta final para encontrar la inyección SQL conocida. En estos ejercicios aprenderás:

  • Cómo razonar sobre información sintáctica.
  • Cómo razonar sobre información semántica.
  • Explorar el soporte del lenguaje QL para Java para expresar patrones.
  • Explorar cómo reutilizar y extender el modelado existente.
  • Usar múltiples bloques de construcción para componer la consulta final.

Planteamiento del problema

En este taller buscaremos vulnerabilidades de inyección SQL conocidas en el componente de API de calificaciones de la Plataforma XWiki. Tales vulnerabilidades pueden ocurrir en aplicaciones cuando información controlada por un usuario externo llega al código de la aplicación que construye de manera insegura una consulta SQL y la ejecuta.

La inyección SQL conocida que se discute en este taller está revisada en GHSA-79rg-7mv3-jrr5 en la Base de Datos de Avisos de GitHub. Para encontrar la inyección SQL, y posibles variantes, abordaremos los siguientes subproblemas:

  • Identificar la fuente de información no confiable y modelarla en QL.
  • Identificar el sumidero, el método que ejecuta consultas SQL, y modelarlo en QL.
  • Combinar las soluciones anteriores para determinar si hay un flujo de información entre la fuente y el sumidero usando seguimiento de contaminación (taint tracking).

Ejercicios

En los primeros ejercicios razonaremos sobre información sintáctica, usando el Árbol de Sintaxis Abstracta (AST), para identificar:

  • el método descrito en el aviso de seguridad para comprender la vulnerabilidad
  • parámetros que contienen datos no confiables, nuestras fuentes
  • llamadas a métodos que aceptan sentencias SQL, nuestros sumideros

Ejercicio 1

Encuentra todos los métodos con el nombre getAverageRating y su tipo declarante en el programa completando la consulta exercise1.ql

Pistas
  • El módulo java proporciona una clase Method para razonar sobre métodos en un programa.
  • La clase Method proporciona los predicados miembro getName y hasName para razonar sobre el nombre de un método.
  • La clase Method proporciona el miembro getDeclaringType para razonar sobre el tipo que declara el método.

Una solución se puede encontrar en la consulta exercise1.ql

Intermedio 1

Una solución al ejercicio 1 devuelve una lista de métodos. Algunos están definidos en una interfaz llamada RatingsManager y otros en las clases AbstractRatingsManager y RatingsScriptService.

De la información devuelta por la consulta y la documentación de componentes de XWiki podemos deducir que:

  • XWiki utiliza un diseño orientado a componentes para permitir extensiones y personalizaciones.
  • El método vulnerable es parte de un componente.
  • Un componente consiste en una interfaz, anotada con Role, y una implementación anotada con Component.
  • Un componente que extiende ScriptService se hace accesible a las páginas wiki a través de scripting.

Ejercicio 2

Encuentra todas las clases anotadas con la anotación Component completando la consulta exercise2.ql. Ten en cuenta que el nombre completamente calificado del tipo de la anotación es org.xwiki.component.annotation.Component.

Pistas
  • El tipo de dominio /clase/, la intersección de sus supertipos, se puede acceder usando la palabra clave this en el predicado característico.
  • La clase Class proporciona un método getAnAnnotation para obtener las anotaciones asociadas.
  • La clase Annotation proporciona el predicado miembro getType para razonar sobre su tipo.
  • La clase Type proporciona los predicados miembro getName y hasName para razonar sobre el nombre de un tipo.
  • La clase RefType, que representa clases e interfaces, proporciona los predicados miembro getQualifiedName y hasQualifiedName para razonar sobre el nombre completamente calificado del reftype.

Una solución se puede encontrar en la consulta exercise2.ql

Ejercicio 3

Descargar herramienta