From 4dca5eeef8f28d7dbfc023a5e1bf8e5259b00fc7 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 5 Sep 2023 14:42:49 +0000 Subject: [PATCH] Translated ['network-services-pentesting/pentesting-web/code-review-tool --- .../pentesting-web/code-review-tools.md | 238 ++++++++++++------ 1 file changed, 160 insertions(+), 78 deletions(-) diff --git a/network-services-pentesting/pentesting-web/code-review-tools.md b/network-services-pentesting/pentesting-web/code-review-tools.md index a174f7187..a08097665 100644 --- a/network-services-pentesting/pentesting-web/code-review-tools.md +++ b/network-services-pentesting/pentesting-web/code-review-tools.md @@ -76,44 +76,11 @@ sonar-scanner \ ``` {% endcode %} -### [**Snyk**](https://snyk.io/product/snyk-code/) - -Existe uma **versão gratuita instalável**. - -#### Início rápido -```bash -# Install -sudo npm install -g snyk - -# Authenticate (you can use a free account) -snyk auth - -# Test for open source vulns & license issues -snyk test [--all-projects] - -# Test for code vulnerabilities -## This will upload your code and you need to enable this option in: Settings > Snyk Code -snyk test code - -# Test for vulns in images -snyk container test [image] - -# Test for IaC vulns -snyk iac test -``` -Você também pode usar a [**Extensão do Snyk para o VSCode**](https://marketplace.visualstudio.com/items?itemName=snyk-security.snyk-vulnerability-scanner) para obter resultados dentro do VSCode. - ### CodeQL -Existe uma **versão gratuita instalável**. +Existe uma versão gratuita **instalável**. #### Instalação -```bash -brew install codeql -# Check it's correctly installed -codeql resolve qlpacks -``` -Ou {% code overflow="wrap" %} ```bash @@ -135,35 +102,151 @@ echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc # Check it's correctly installed ## Open a new terminal -codeql resolve qlpacks -``` -#### Início Rápido - -{% code overflow="wrap" %} -```bash -# Prepare the database -## You need to export a GITHUB_TOKEN (codeql will detect languages automatically) -export GITHUB_TOKEN=ghp_32849y23hij4... -codeql database create --db-cluster --source-root -## Or to indicate the languages yourself -codeql database create --language= --source-root -## For example -export GITHUB_TOKEN=ghp_32849y23hij4... -codeql database create /tmp/codeql_db --db-cluster --source-root /path/to/repo # This will generate the folder /tmp/codeql_db - -# Analyze the code -codeql database analyze --format= --output= -# If you used --db-cluster a different db was created per language, you need to indicate it. In this example I analyze the javascript folder. -codeql database analyze /tmp/codeql_db/javascript --format=csv --output=/tmp/graphql_results.csv - -# Get sarif format -codeql database analyze /tmp/codeql_db/javascript --format=sarif-latest --output=/tmp/graphql_results.sarif - -# You can visualize the findings in https://microsoft.github.io/sarif-web-component/ +codeql resolve qlpacks #Get paths to QL packs ``` {% endcode %} -Você também pode usar a [**extensão do VSCode**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql) para obter as descobertas dentro do VSCode. Ainda será necessário criar um banco de dados manualmente, mas depois você pode selecionar qualquer arquivo e clicar em `Clique com o botão direito` -> `CodeQL: Executar consultas nos arquivos selecionados` +#### Início rápido - Preparar o banco de dados + +{% hint style="success" %} +A primeira coisa que você precisa fazer é **preparar o banco de dados** (criar a árvore de código) para que as consultas possam ser executadas nele posteriormente. +{% endhint %} + +* Você pode permitir que o codeql identifique automaticamente o idioma do repositório e crie o banco de dados + +{% code overflow="wrap" %} +```bash +codeql database create --language + +# Example +codeql database create /path/repo/codeql_db --source-root /path/repo +## DB will be created in /path/repo/codeql_db +``` +{% endcode %} + +{% hint style="danger" %} +Isso **geralmente irá disparar um erro** dizendo que mais de um idioma foi especificado (ou detectado automaticamente). **Verifique as opções a seguir** para corrigir isso! +{% endhint %} + +* Você pode fazer isso **indicando manualmente** o **repositório** e o **idioma** ([lista de idiomas](https://docs.github.com/en/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#running-codeql-database-create)) + +{% code overflow="wrap" %} +```bash +codeql database create --language --source-root + +# Example +codeql database create /path/repo/codeql_db --language javascript --source-root /path/repo +## DB will be created in /path/repo/codeql_db +``` +{% endcode %} + +* Se o seu repositório estiver usando **mais de 1 linguagem**, você também pode criar **1 banco de dados por linguagem** indicando cada linguagem. + +{% code overflow="wrap" %} +```bash +export GITHUB_TOKEN=ghp_32849y23hij4... +codeql database create --source-root /path/to/repo --db-cluster --language "javascript,python" + +# Example +export GITHUB_TOKEN=ghp_32849y23hij4... +codeql database create /path/repo/codeql_db --source-root /path/to/repo --db-cluster --language "javascript,python" +## DBs will be created in /path/repo/codeql_db/* +``` +{% endcode %} + +* Você também pode permitir que o `codeql` identifique todas as linguagens para você e crie um banco de dados por linguagem. Você precisa fornecer um **GITHUB\_TOKEN**. + +{% code overflow="wrap" %} +```bash +export GITHUB_TOKEN=ghp_32849y23hij4... +codeql database create --db-cluster --source-root + +# Example +export GITHUB_TOKEN=ghp_32849y23hij4... +codeql database create /tmp/codeql_db --db-cluster --source-root /path/repo +## DBs will be created in /path/repo/codeql_db/* +``` +{% endcode %} + +#### Início rápido - Analisar o código + +{% hint style="success" %} +Agora é finalmente hora de analisar o código +{% endhint %} + +Lembre-se de que se você usou várias linguagens, **um BD por linguagem** teria sido criado no caminho que você especificou. + +{% code overflow="wrap" %} +```bash +# Default analysis +codeql database analyze --format= --output= +# Example +codeql database analyze /tmp/codeql_db/javascript --format=sarif-latest --output=/tmp/graphql_results.sarif + +# Specify QL pack to use in the analysis +codeql database analyze \ + --sarif-category= \ +--sarif-add-baseline-file-info \ --format= \ +--output=/out/file/path> +# Example +codeql database analyze /tmp/codeql_db \ +javascript-security-extended --sarif-category=javascript \ +--sarif-add-baseline-file-info --format=sarif-latest \ +--output=/tmp/sec-extended.sarif +``` +#### Início Rápido - Scriptado + +{% code overflow="wrap" %} +```bash +export GITHUB_TOKEN=ghp_32849y23hij4... +export REPO_PATH=/path/to/repo +export OUTPUT_DIR_PATH="$REPO_PATH/codeql_results" +mkdir -p "$OUTPUT_DIR_PATH" +export FINAL_MSG="Results available in: " + +echo "Creating DB" +codeql database create "$REPO_PATH/codeql_db" --db-cluster --source-root "$REPO_PATH" +for db in `ls "$REPO_PATH/codeql_db"`; do +echo "Analyzing $db" +codeql database analyze "$REPO_PATH/codeql_db/$db" --format=sarif-latest --output="${OUTPUT_DIR_PATH}/$db).sarif" +FINAL_MSG="$FINAL_MSG ${OUTPUT_DIR_PATH}/$db.sarif ," +echo "" +done + +echo $FINAL_MSG +``` +{% endcode %} + +Você pode visualizar as descobertas em [**https://microsoft.github.io/sarif-web-component/**](https://microsoft.github.io/sarif-web-component/) ou usando a extensão do VSCode [**SARIF viewer**](https://marketplace.visualstudio.com/items?itemName=MS-SarifVSCode.sarif-viewer). + +Você também pode usar a [**extensão do VSCode**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql) para obter as descobertas dentro do VSCode. Ainda será necessário criar um banco de dados manualmente, mas depois você pode selecionar qualquer arquivo e clicar em `Right Click` -> `CodeQL: Run Queries in Selected Files` + +### [**Snyk**](https://snyk.io/product/snyk-code/) + +Existe uma **versão gratuita instalável**. + +#### Início Rápido +```bash +# Install +sudo npm install -g snyk + +# Authenticate (you can use a free account) +snyk auth + +# Test for open source vulns & license issues +snyk test [--all-projects] + +# Test for code vulnerabilities +## This will upload your code and you need to enable this option in: Settings > Snyk Code +snyk test code + +# Test for vulns in images +snyk container test [image] + +# Test for IaC vulns +snyk iac test +``` +Você também pode usar a [**Extensão snyk para o VSCode**](https://marketplace.visualstudio.com/items?itemName=snyk-security.snyk-vulnerability-scanner) para obter resultados dentro do VSCode. ### [Insider](https://github.com/insidersec/insider) @@ -194,6 +277,7 @@ brew isntall yarn # Run cd /path/to/repo yarn audit +npm audit ``` * [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)**:** Scanner estático de código de segurança (SAST) para aplicações Node.js alimentado por [libsast](https://github.com/ajinabraham/libsast) e [semgrep](https://github.com/returntocorp/semgrep). ```bash @@ -216,7 +300,7 @@ retire --colors ## Python -* [**Bandit**](https://github.com/PyCQA/bandit)**:** Bandit é uma ferramenta projetada para encontrar problemas de segurança comuns em código Python. Para fazer isso, o Bandit processa cada arquivo, constrói uma AST a partir dele e executa plugins apropriados nos nós da AST. Uma vez que o Bandit termina de escanear todos os arquivos, ele gera um relatório. +* [**Bandit**](https://github.com/PyCQA/bandit)**:** Bandit é uma ferramenta projetada para encontrar problemas de segurança comuns em código Python. Para fazer isso, o Bandit processa cada arquivo, constrói uma AST a partir dele e executa plugins apropriados nos nós da AST. Uma vez que o Bandit tenha terminado de escanear todos os arquivos, ele gera um relatório. ```bash # Install pip3 install bandit @@ -243,33 +327,31 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs ``` ## Java -Java é uma linguagem de programação de alto nível, orientada a objetos e amplamente utilizada para desenvolvimento de aplicativos web. É uma das linguagens mais populares e amplamente adotadas no mundo da programação. +Java é uma linguagem de programação popular que é amplamente utilizada para desenvolvimento de aplicativos web. Ao realizar uma revisão de código em um aplicativo Java, existem várias ferramentas úteis que podem ajudar a identificar possíveis vulnerabilidades de segurança. Nesta seção, discutiremos algumas dessas ferramentas. -### Revisão de Código em Java +### FindBugs -A revisão de código é uma prática essencial para garantir a qualidade e segurança do código-fonte de um aplicativo. Existem várias ferramentas disponíveis para ajudar na revisão de código em Java. Aqui estão algumas das ferramentas mais populares: +O FindBugs é uma ferramenta de análise estática de código que pode ser usada para identificar possíveis bugs e vulnerabilidades em um código Java. Ele examina o código em busca de padrões conhecidos de erros e emite avisos sobre possíveis problemas. O FindBugs pode ajudar a identificar vulnerabilidades comuns, como uso incorreto de APIs, problemas de segurança de dados e erros de programação. -#### 1. FindBugs +### PMD -O FindBugs é uma ferramenta de análise estática de código que identifica possíveis bugs e problemas de qualidade em código Java. Ele verifica o código em busca de padrões conhecidos de erros e fornece relatórios detalhados sobre os problemas encontrados. +O PMD é outra ferramenta de análise estática de código que pode ser usada para identificar problemas de código em um aplicativo Java. Ele verifica o código em busca de más práticas de programação, código duplicado, variáveis não utilizadas e outros problemas de qualidade de código. O PMD pode ajudar a melhorar a legibilidade e a manutenibilidade do código, além de identificar possíveis vulnerabilidades. -#### 2. PMD +### Checkstyle -O PMD é uma ferramenta de análise de código-fonte que verifica o código Java em busca de problemas de estilo, código duplicado, código morto e outros problemas de qualidade. Ele fornece sugestões e recomendações para melhorar a legibilidade e a manutenibilidade do código. +O Checkstyle é uma ferramenta de análise estática de código que pode ser usada para aplicar um conjunto de regras de codificação em um aplicativo Java. Ele verifica o código em busca de conformidade com essas regras e emite avisos sobre possíveis violações. O Checkstyle pode ajudar a manter um código consistente e de alta qualidade, além de identificar possíveis vulnerabilidades de segurança. -#### 3. Checkstyle +### SonarQube -O Checkstyle é uma ferramenta de análise de código-fonte que verifica o código Java em busca de problemas de estilo e convenções de codificação. Ele ajuda a garantir que o código esteja em conformidade com as diretrizes de codificação definidas e fornece relatórios detalhados sobre os problemas encontrados. +O SonarQube é uma plataforma de análise de código que pode ser usada para avaliar a qualidade do código em um aplicativo Java. Ele fornece uma visão geral abrangente das métricas de qualidade do código, incluindo vulnerabilidades de segurança, bugs, dívidas técnicas e muito mais. O SonarQube pode ajudar a identificar e corrigir problemas de segurança em um aplicativo Java, melhorando assim sua robustez e confiabilidade. -#### 4. SonarQube +### Dependency-Check -O SonarQube é uma plataforma de análise de código-fonte que suporta várias linguagens de programação, incluindo Java. Ele fornece uma ampla gama de métricas e análises estáticas para avaliar a qualidade do código, identificar problemas de segurança e fornecer recomendações para melhorias. +O Dependency-Check é uma ferramenta que pode ser usada para identificar dependências de terceiros em um aplicativo Java que possuem vulnerabilidades conhecidas. Ele verifica as dependências do aplicativo em busca de vulnerabilidades conhecidas e emite avisos sobre possíveis problemas. O Dependency-Check pode ajudar a garantir que as dependências utilizadas em um aplicativo Java estejam atualizadas e livres de vulnerabilidades conhecidas. -#### 5. FindSecBugs +### Conclusão -O FindSecBugs é uma extensão do FindBugs que se concentra em encontrar vulnerabilidades de segurança em código Java. Ele verifica o código em busca de padrões conhecidos de vulnerabilidades e fornece relatórios detalhados sobre os problemas encontrados. - -Essas são apenas algumas das ferramentas disponíveis para revisão de código em Java. Cada uma delas tem suas próprias características e funcionalidades únicas. É recomendado utilizar uma combinação dessas ferramentas para obter uma análise abrangente do código e garantir a qualidade e segurança do aplicativo. +Ao realizar uma revisão de código em um aplicativo Java, é importante utilizar ferramentas de análise estática de código para identificar possíveis vulnerabilidades de segurança. O uso de ferramentas como o FindBugs, PMD, Checkstyle, SonarQube e Dependency-Check pode ajudar a melhorar a qualidade e a segurança do código Java, garantindo assim a robustez e confiabilidade do aplicativo. ```bash # JD-Gui https://github.com/java-decompiler/jd-gui @@ -371,8 +453,8 @@ Procure por: * Se a chave da API for encontrada, verifique aqui a sintaxe de uso potencial: https://github.com/streaak/keyhacks. * Funções vulneráveis * InnerHTML() - Se você encontrar isso, significa que há uma chance potencial de XSS se não houver uma sanitização adequada. Mesmo que sua carga útil esteja sanitizada, não se preocupe. Rastreie o código para descobrir onde ocorre a sanitização. Estude-o e tente contornar a sanitização. -* Postmessage() - Se você leu meu post anterior (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), você perceberá que o Postmessage() pode levar a um possível problema de CORS. Se o segundo parâmetro da função for definido como \*, você é o sortudo. Confira meu post anterior para entender mais sobre o mecanismo por trás disso. -* String.prototype.search() - Essa função parece normal. Por que seria uma função perigosa? Bem, é porque alguns desenvolvedores a usaram para encontrar a ocorrência de uma string dentro de outra string. No entanto, "." é tratado como caractere curinga nessa função. Portanto, se essa função for usada como verificação de sanitização, você pode simplesmente contorná-la inserindo ".". Confira o relatório do Filedescryptor no hackerone: https://hackerone.com/reports/129873 +* Postmessage() - Se você leu meu post anterior (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), você perceberia que o Postmessage() pode levar a um possível problema de CORS. Se o segundo parâmetro da função for definido como \*, você é o sortudo. Confira meu post anterior para entender mais sobre o mecanismo por trás disso. +* String.prototype.search() - Essa função parece normal. Por que seria uma função perigosa? Bem, é porque alguns desenvolvedores a usaram para encontrar a ocorrência de uma string dentro de outra string. No entanto, "." é tratado como caractere curinga nessa função. Portanto, se essa função for usada como verificação de sanitização, você pode simplesmente contorná-la inserindo ".". Confira o relatório do hackerone do Filedescryptor: https://hackerone.com/reports/129873 * Endpoints e parâmetros * Use [LinkFinder](https://github.com/GerbenJavado/LinkFinder) e [JS Miner](https://github.com/PortSwigger/js-miner). * Bibliotecas e dependências vulneráveis