Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
codeql-workshop-cve-2021-21380 — Um workshop de CodeQL abordando CVE-2021-21380 | Kitploit
Ferramentas/GitHubGitHub/rvermeulen/codeql-workshop-cve-2021-21380
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoSegurança WebAprendizado e EducaçãoLabs e Prática
GitHubrvermeulen/codeql-workshop-cve-2021-21380

codeql-workshop-cve-2021-21380

Um workshop de CodeQL abordando CVE-2021-21380

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Ver Repositório
12511há 1 anoAinda não revisado
Compartilhar

Workshop CodeQL para Java: Encontrando uma injeção de SQL

Neste workshop, usaremos raciocínio sintático e semântico para encontrar uma injeção de SQL no componente de avaliação da plataforma XWiki documentada pela CVE-2021-21380

Conteúdo

  • Workshop CodeQL para Java: Encontrando uma injeção de SQL
    • Conteúdo
    • Pré-requisitos e instruções de configuração
      • Na sua máquina local
        • Instalação
        • Etapas de configuração
    • Workshop
      • Aprendizados
      • Enunciado do problema
      • Exercícios
        • Exercício 1
        • Intermezzo 1
        • Exercício 2
        • Exercício 3
        • Intermezzo 2
        • Exercício 4
        • Exercício 5
        • Intermezzo 3
        • Exercício 6
        • Exercício 7
        • Exercício 8
    • O que vem a seguir?

Pré-requisitos e instruções de configuração

Na sua máquina local

Complete esta seção antes do workshop, se possível.

Instalação

  • Instale o Visual Studio Code.

  • Instale a extensão CodeQL para Visual Studio Code.

  • Você não precisa instalar o CLI do CodeQL: a extensão cuidará disso para você.

  • Clone este repositório:

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

Etapas de configuração

  • Importe o banco de dados CodeQL a ser usado no workshop:
    • Clique com o botão direito no arquivo xwiki-platform-CVE-2021-21380.zip na exibição do Explorer e selecione o comando CodeQL: Set Current Database.
    • O banco de dados aparecerá na exibição de bancos de dados CodeQL, acessível pelo ícone QL na Barra de Atividades.
  • Instale as dependências para analisar código Java e executar os testes dos exercícios e soluções.
    • Na Paleta de Comandos (Cmd/Ctrl+Shift+P), pesquise e execute o comando CodeQL: Install Pack Dependencies.
    • Na parte superior da janela do VS Code, digite github na caixa para filtrar a lista.
    • Marque a caixa ao lado de cve-2021-21380-exercises, cve-2021-21380-exercises-tests, cve-2021-21380-solutions e cve-2021-21380-solutions-tests.
    • Clique em OK/Enter.
  • Valide se tudo funciona como esperado executando os testes das soluções.
    • Abra a exibição de testes e pressione executar testes (o ícone de reprodução é exibido ao passar o mouse sobre as soluções) ao lado do item de soluções na árvore.

Workshop

Aprendizados

O workshop é dividido em vários exercícios que apresentam o suporte da linguagem QL para Java e termina com uma consulta final para encontrar a injeção de SQL conhecida. Nestes exercícios, você aprenderá:

  • Como raciocinar sobre informações sintáticas.
  • Como raciocinar sobre informações semânticas.
  • Explorar o suporte da linguagem QL para Java para expressar padrões.
  • Explorar como reutilizar e estender modelagens existentes.
  • Usar múltiplos blocos de construção para compor a consulta final.

Enunciado do problema

Neste workshop, procuraremos por vulnerabilidades de injeção de SQL conhecidas no componente da API de avaliações do XWiki Platform. Essas vulnerabilidades podem ocorrer em aplicações quando informações controladas por um usuário externo chegam ao código da aplicação que constrói e executa uma consulta SQL de forma insegura.

A injeção de SQL conhecida discutida neste workshop é revisada em GHSA-79rg-7mv3-jrr5 no GitHub Advisory Database. Para encontrar a injeção de SQL e possíveis variantes, vamos resolver os seguintes subproblemas:

  • Identificar a origem das informações não confiáveis e modelá-la em QL.
  • Identificar o sink, o método que executa consultas SQL, e modelá-lo em QL.
  • Combinar as soluções acima para determinar se há um fluxo de informações entre a fonte e o sink usando taint tracking.

Exercícios

Nos primeiros exercícios, raciocinaremos sobre informações sintáticas, usando a Árvore Sintática Abstrata (AST), para identificar:

  • o método descrito no aviso de segurança para construir entendimento sobre a vulnerabilidade
  • parâmetros que contêm dados não confiáveis, nossas fontes
  • chamadas de método que aceitam instruções SQL, nossos sinks

Exercício 1

Encontre todos os métodos com o nome getAverageRating e o tipo declarante no programa completando a consulta exercise1.ql

Dicas
  • O módulo java fornece uma classe Method para raciocinar sobre métodos em um programa.
  • A classe Method fornece os predicados membros getName e hasName para raciocinar sobre o nome de um método.
  • A classe Method fornece o membro getDeclaringType para raciocinar sobre o tipo que declara o método.

Uma solução pode ser encontrada na consulta exercise1.ql

Intermezzo 1

Uma solução para o exercício 1 retorna uma lista de métodos. Alguns são definidos em uma interface chamada RatingsManager e outros são definidos nas classes AbstractRatingsManager e RatingsScriptService.

A partir das informações retornadas pela consulta e da documentação de componentes do XWiki podemos deduzir que:

  • O XWiki usa um design orientado a componentes para permitir extensões e customizações.
  • O método vulnerável faz parte de um componente.
  • Um componente consiste em uma interface, anotada com Role, e uma implementação anotada com Component.
  • Um componente que estende ScriptService é tornado acessível a páginas wiki por meio de scripts.

Exercício 2

Encontre todas as classes anotadas com a anotação Component completando a consulta exercise2.ql. Observe que o nome totalmente qualificado do tipo da anotação é org.xwiki.component.annotation.Component.

Dicas
  • O /tipo de domínio da classe/, a interseção de seus supertipos, pode ser acessado usando a palavra-chave this no /predicado característico/.
  • A classe Class fornece um método getAnAnnotation para obter anotações associadas.
  • A classe Annotation fornece o predicado membro getType para raciocinar sobre seu tipo.
  • A classe Type fornece os predicados membros getName e hasName para raciocinar sobre o nome de um tipo.
  • A classe RefType, que representa classes e interfaces, fornece os predicados membros getQualifiedName e hasQualifiedName para raciocinar sobre o nome totalmente qualificado do reftype.

Uma solução pode ser encontrada na consulta exercise2.ql

Exercício 3

Encontre todos os componentes que implementam a interface ScriptService completando a consulta excercise3.ql

Dicas
  • O tipo Class fornece o predicado membro getASuperType para raciocinar sobre os supertipos de uma classe, ou seja, os tipos que ela extends ou implements.
Baixar ferramenta