mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 21:53:54 +00:00
Translated ['network-services-pentesting/pentesting-web/code-review-tool
This commit is contained in:
parent
18bd3bc9d8
commit
4dca5eeef8
1 changed files with 160 additions and 78 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue