Translated ['network-services-pentesting/pentesting-web/code-review-tool

This commit is contained in:
Translator 2023-09-05 14:42:49 +00:00
parent 18bd3bc9d8
commit 4dca5eeef8

View file

@ -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 <database> --db-cluster --source-root </path/to/repo>
## Or to indicate the languages yourself
codeql database create <database> --language=<language-identifier> --source-root </path/to/repo>
## 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 <database> --format=<format> --output=</out/file/path>
# 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 <database> --language <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 <database> --language <language> --source-root </path/to/repo>
# 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 <database> --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 <database> --db-cluster --source-root </path/to/repo>
# 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 <database> --format=<format> --output=</out/file/path>
# 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 <database> \
<qls pack> --sarif-category=<language> \
--sarif-add-baseline-file-info \ --format=<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