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

This commit is contained in:
Translator 2023-09-05 14:43:13 +00:00
parent ca6d8af21c
commit 0100118721

View file

@ -48,7 +48,7 @@ semgrep scan --config auto
```
{% endcode %}
Vous pouvez également utiliser l'extension [**semgrep VSCode**](https://marketplace.visualstudio.com/items?itemName=Semgrep.semgrep) pour obtenir les résultats dans VSCode.
Vous pouvez également utiliser l'extension [**semgrep pour VSCode**](https://marketplace.visualstudio.com/items?itemName=Semgrep.semgrep) pour obtenir les résultats dans VSCode.
### [**SonarQube**](https://www.sonarsource.com/products/sonarqube/downloads/)
@ -76,6 +76,153 @@ sonar-scanner \
```
{% endcode %}
### CodeQL
Il existe une **version gratuite installable**.
#### Installation
{% code overflow="wrap" %}
```bash
# Download your release from https://github.com/github/codeql-action/releases
## Example
wget https://github.com/github/codeql-action/releases/download/codeql-bundle-v2.14.3/codeql-bundle-osx64.tar.gz
# Move it to the destination folder
mkdir ~/codeql
mv codeql-bundle* ~/codeql
# Decompress it
cd ~/codeql
tar -xzvf codeql-bundle-*.tar.gz
rm codeql-bundle-*.tar.gz
# Add to path
echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc
# Check it's correctly installed
## Open a new terminal
codeql resolve qlpacks #Get paths to QL packs
```
{% endcode %}
#### Démarrage rapide - Préparer la base de données
{% hint style="success" %}
La première chose que vous devez faire est de **préparer la base de données** (créer l'arborescence du code) afin que les requêtes puissent être exécutées dessus ultérieurement.
{% endhint %}
* Vous pouvez permettre à codeql d'identifier automatiquement le langage du dépôt et de créer la base de données
{% 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" %}
Cela **générera généralement une erreur** indiquant que plus d'une langue a été spécifiée (ou détectée automatiquement). **Vérifiez les options suivantes** pour résoudre ce problème !
{% endhint %}
* Vous pouvez le faire **manuellement en indiquant** le **repo** et la **langue** ([liste des langues](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 %}
* Si votre dépôt utilise **plus d'une langue**, vous pouvez également créer **1 base de données par langue** en indiquant chaque langue.
{% 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 %}
* Vous pouvez également permettre à `codeql` d'**identifier toutes les langues** pour vous et de créer une base de données par langue. Vous devez lui fournir un **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 %}
#### Démarrage rapide - Analyser le code
{% hint style="success" %}
Maintenant, il est enfin temps d'analyser le code
{% endhint %}
N'oubliez pas que si vous avez utilisé plusieurs langages, **une base de données par langage** aurait été créée dans le chemin que vous avez spécifié.
{% 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
```
{% endcode %}
#### Démarrage rapide - Scripté
{% 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 %}
Vous pouvez visualiser les résultats sur [**https://microsoft.github.io/sarif-web-component/**](https://microsoft.github.io/sarif-web-component/) ou en utilisant l'extension VSCode [**SARIF viewer**](https://marketplace.visualstudio.com/items?itemName=MS-SarifVSCode.sarif-viewer).
Vous pouvez également utiliser l'extension [**VSCode**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql) pour obtenir les résultats dans VSCode. Vous devrez toujours créer une base de données manuellement, mais ensuite vous pourrez sélectionner n'importe quel fichier et cliquer sur `Clic droit` -> `CodeQL: Exécuter les requêtes dans les fichiers sélectionnés`
### [**Snyk**](https://snyk.io/product/snyk-code/)
Il existe une **version gratuite installable**.
@ -103,70 +250,6 @@ snyk iac test
```
Vous pouvez également utiliser l'extension [**snyk VSCode**](https://marketplace.visualstudio.com/items?itemName=snyk-security.snyk-vulnerability-scanner) pour obtenir des résultats dans VSCode.
### CodeQL
Il existe une **version gratuite installable**.
#### Installer
```bash
brew install codeql
# Check it's correctly installed
codeql resolve qlpacks
```
Ou
{% code overflow="wrap" %}
```bash
# Download your release from https://github.com/github/codeql-action/releases
## Example
wget https://github.com/github/codeql-action/releases/download/codeql-bundle-v2.14.3/codeql-bundle-osx64.tar.gz
# Move it to the destination folder
mkdir ~/codeql
mv codeql-bundle* ~/codeql
# Decompress it
cd ~/codeql
tar -xzvf codeql-bundle-*.tar.gz
rm codeql-bundle-*.tar.gz
# Add to path
echo 'export PATH="$PATH:/Users/username/codeql/codeql"' >> ~/.zshrc
# Check it's correctly installed
## Open a new terminal
codeql resolve qlpacks
```
{% endcode %}
#### Démarrage rapide
{% 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/
```
{% endcode %}
Vous pouvez également utiliser l'extension [**VSCode**](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-codeql) pour obtenir les résultats dans VSCode. Vous devrez toujours créer une base de données manuellement, mais ensuite vous pourrez sélectionner n'importe quel fichier et cliquer sur `Clic droit` -> `CodeQL: Exécuter les requêtes dans les fichiers sélectionnés`
### [Insider](https://github.com/insidersec/insider)
C'est **Open Source**, mais semble **non maintenu**.
@ -196,6 +279,7 @@ brew isntall yarn
# Run
cd /path/to/repo
yarn audit
npm audit
```
* [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)**:** Outil de balayage de code de sécurité statique (SAST) pour les applications Node.js alimenté par [libsast](https://github.com/ajinabraham/libsast) et [semgrep](https://github.com/returntocorp/semgrep).
```bash
@ -251,17 +335,15 @@ Lors de l'examen du code Java, il existe plusieurs outils qui peuvent être util
Voici quelques-uns des outils de révision de code les plus couramment utilisés pour le code Java :
- **FindBugs** : FindBugs est un outil d'analyse statique du code qui recherche les erreurs de programmation courantes, les vulnérabilités de sécurité et les problèmes de performance dans le code Java.
- **FindBugs** : FindBugs est un outil d'analyse statique du code qui recherche les erreurs de programmation courantes et les vulnérabilités de sécurité dans le code Java. Il peut détecter des problèmes tels que des fuites de mémoire, des erreurs de gestion des exceptions et des erreurs de synchronisation.
- **Checkstyle** : Checkstyle est un outil qui vérifie si le code Java respecte les conventions de codage définies. Il peut être utilisé pour détecter les erreurs de style, les problèmes de formatage et les violations des règles de codage.
- **Checkstyle** : Checkstyle est un outil qui vérifie si le code Java respecte les conventions de codage définies. Il peut détecter des problèmes tels que des noms de variables incorrects, des espaces inutiles et des indentations incorrectes.
- **PMD** : PMD est un outil d'analyse statique du code qui recherche les erreurs de programmation, les mauvaises pratiques de codage et les problèmes de performance dans le code Java.
- **PMD** : PMD est un outil d'analyse statique du code qui recherche les erreurs de programmation et les mauvaises pratiques de codage dans le code Java. Il peut détecter des problèmes tels que des variables inutilisées, des boucles infinies et des conditions toujours vraies ou toujours fausses.
- **SonarQube** : SonarQube est une plateforme d'analyse continue du code qui fournit des informations détaillées sur la qualité du code. Il peut être utilisé pour détecter les vulnérabilités de sécurité, les erreurs de programmation et les problèmes de performance dans le code Java.
- **SonarQube** : SonarQube est une plateforme d'analyse continue du code qui peut être utilisée pour analyser le code Java et détecter les vulnérabilités de sécurité, les erreurs de programmation et les mauvaises pratiques de codage. Il fournit des rapports détaillés sur la qualité du code et propose des recommandations pour l'améliorer.
- **FindSecBugs** : FindSecBugs est un plugin FindBugs spécialement conçu pour rechercher les vulnérabilités de sécurité dans le code Java. Il peut être utilisé pour détecter les problèmes de sécurité tels que les injections SQL, les fuites d'informations sensibles et les erreurs de configuration.
Ces outils peuvent être utilisés individuellement ou en combinaison pour effectuer une révision approfondie du code Java et améliorer la qualité et la sécurité du code.
Ces outils de révision de code peuvent être utilisés pour améliorer la qualité du code Java, identifier les problèmes de sécurité potentiels et garantir que le code respecte les meilleures pratiques de codage.
```bash
# JD-Gui
https://github.com/java-decompiler/jd-gui
@ -351,8 +433,8 @@ Recherchez:
* Secrets
* Utilisez:
* [JS Miner](https://github.com/PortSwigger/js-miner)
* Motifs [RegHex](https://github.com/l4yton/RegHex)
* Motifs [gf](https://github.com/tomnomnom/gf/tree/master/examples)
* [RegHex](https://github.com/l4yton/RegHex) patterns
* [gf](https://github.com/tomnomnom/gf/tree/master/examples) patterns
* Recherchez des motifs pertinents dans le dictionnaire:
* pass, user, admin
* auth, login, sign, challenge, 2fa
@ -363,7 +445,7 @@ Recherchez:
* Si une clé API est trouvée, vérifiez ici la syntaxe d'utilisation potentielle: https://github.com/streaak/keyhacks.
* Fonctions vulnérables
* InnerHTML() - Si vous trouvez cela, cela signifie qu'il y a une chance potentielle de XSS si aucune désinfection appropriée n'a lieu. Même si votre charge utile est désinfectée, ne vous inquiétez pas. Suivez le code pour savoir où se trouve la désinfection. Étudiez-le et essayez de contourner la désinfection.
* Postmessage() - Si vous avez lu mon article précédent (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), vous remarquerez que Postmessage() peut entraîner un problème potentiel de CORS. Si le deuxième paramètre de la fonction est défini sur \*, vous êtes chanceux. Consultez mon article précédent pour en savoir plus sur le mécanisme derrière.
* Postmessage() - Si vous avez lu mon précédent article (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), vous remarquerez que Postmessage() peut entraîner un problème potentiel de CORS. Si le deuxième paramètre de la fonction est défini sur \*, vous êtes chanceux. Consultez mon article précédent pour en savoir plus sur le mécanisme derrière.
* String.prototype.search() - Cette fonction semble normale. Pourquoi serait-elle une fonction dangereuse ? Eh bien, c'est parce que certains développeurs l'utilisent pour trouver l'occurrence d'une chaîne à l'intérieur d'une autre chaîne. Cependant, "." est traité comme un caractère générique dans cette fonction. Donc, si cette fonction est utilisée comme vérification de désinfection, vous pouvez simplement la contourner en entrant ".". Consultez le rapport de Filedescryptor sur hackerone: https://hackerone.com/reports/129873
* Points de terminaison et paramètres
* Utilisez [LinkFinder](https://github.com/GerbenJavado/LinkFinder) & [JS Miner](https://github.com/PortSwigger/js-miner).