
Un analyseur statique de vulnérabilités de sécurité pour les applications Ruby on Rails
[](http://brakemanscanner.org/)
[](https://circleci.com/gh/presidentbeef/brakeman)
[](https://qlty.sh/gh/presidentbeef/projects/brakeman)
# Brakeman
Brakeman est un outil d'analyse statique qui vérifie la présence de vulnérabilités de sécurité dans les applications Ruby on Rails.
# Installation
Avec RubyGems :
gem install brakeman
Avec Bundler :
```ruby
group :development do
gem 'brakeman', require: false
end
```
Avec Docker :
docker pull presidentbeef/brakeman
Avec Docker pour compiler à partir des sources :
git clone https://github.com/presidentbeef/brakeman.git
cd brakeman
docker build . -t brakeman
# Utilisation
#### Exécution locale
Depuis le répertoire racine d'une application Rails :
brakeman
En dehors de la racine Rails :
brakeman /path/to/rails/application
#### Exécution avec Docker
Depuis le répertoire racine d'une application Rails :
docker run -v "$(pwd)":/code presidentbeef/brakeman
Avec des couleurs un peu plus agréables :
docker run -v "$(pwd)":/code presidentbeef/brakeman --color
Pour un rapport HTML :
docker run -v "$(pwd)":/code presidentbeef/brakeman -o brakeman_results.html
En dehors de la racine Rails (notez que le fichier de sortie est relatif à path/to/rails/application) :
docker run -v 'path/to/rails/application':/code presidentbeef/brakeman -o brakeman_results.html
# Compatibilité
Brakeman devrait fonctionner avec toutes les versions de Rails de 2.3.x à 8.x.
Brakeman peut analyser du code écrit avec la syntaxe Ruby 2.0 et plus récente, mais nécessite au moins Ruby 3.2.0 pour s'exécuter.
# Options de base
Pour une liste complète des options, utilisez `brakeman --help` ou consultez le fichier [OPTIONS.md](https://github.com/presidentbeef/brakeman/blob/main/OPTIONS.md).
Pour spécifier un fichier de sortie pour les résultats :
brakeman -o output_file
Le format de sortie est déterminé par l'extension du fichier ou par l'utilisation de l'option `-f`. Les options actuelles sont : `text`, `html`, `tabs`, `json`, `junit`, `markdown`, `csv`, `codeclimate`, `github`, `sarif` et `sonar`.
Plusieurs fichiers de sortie peuvent être spécifiés :
brakeman -o output.html -o output.json
Pour générer une sortie à la fois dans un fichier et sur la console, avec des couleurs :
brakeman --color -o /dev/stdout -o output.json
Pour supprimer les avertissements informatifs et afficher uniquement le rapport :
brakeman -q
Notez que toutes les sorties de Brakeman, à l'exception des rapports, sont envoyées sur stderr, ce qui permet de rediriger facilement stdout vers un fichier pour n'obtenir que le rapport.
Pour voir toutes sortes d'informations de débogage :
brakeman -d
Certaines vérifications peuvent être ignorées, si souhaité. Le nom doit être écrit avec la casse correcte. Par exemple, pour ignorer la recherche de routes par défaut (`DefaultRoutes`) :
brakeman -x DefaultRoutes
Plusieurs vérifications doivent être séparées par une virgule :
brakeman -x DefaultRoutes,Redirect
Pour faire l'inverse et n'exécuter qu'un certain ensemble de tests :
brakeman -t SQL,ValidationRegex
Si Brakeman est un peu lent, essayez
brakeman --faster
Cela désactivera certaines fonctionnalités, mais sera probablement beaucoup plus rapide (actuellement, cela équivaut à `--skip-libs --no-branching`). *ATTENTION* : Cela peut amener Brakeman à manquer certaines vulnérabilités.
Par défaut, Brakeman renvoie un code de sortie non nul si des avertissements de sécurité sont trouvés ou si des erreurs d'analyse sont rencontrées. Pour désactiver ce comportement :
brakeman --no-exit-on-warn --no-exit-on-error
Pour ignorer certains fichiers ou répertoires que Brakeman pourrait avoir du mal à analyser, utilisez :
brakeman --skip-files file1,/path1/,path2/
Pour comparer les résultats d'une analyse avec ceux d'une analyse précédente, utilisez l'option de sortie JSON, puis :
brakeman --compare old_report.json
Cela produira un JSON avec deux listes : une des avertissements corrigés et une des nouveaux avertissements.
Brakeman ignorera les avertissements s'il est configuré pour le faire. Par défaut, il cherche un fichier de configuration dans `config/brakeman.ignore`. Pour créer et gérer ce fichier, utilisez :
brakeman -I
Si vous souhaitez voir temporairement les avertissements que vous avez ignorés sans affecter le code de sortie, utilisez :
brakeman --show-ignored
# Informations sur les avertissements
Consultez [warning\_types](https://github.com/presidentbeef/brakeman/blob/main/docs/warning_types) pour plus d'informations sur les avertissements signalés par cet outil.
# Contexte des avertissements
Le format de sortie HTML fournit un extrait du code source original de l'application à l'endroit où un avertissement a été déclenché. En raison du traitement effectué lors de la recherche de vulnérabilités, le code source peut ne pas ressembler à l'avertissement signalé et les numéros de ligne rapportés peuvent être légèrement décalés. Cependant, le contexte offre néanmoins un aperçu rapide du code qui a déclenché l'avertissement.
# Niveaux de confiance
Brakeman attribue un niveau de confiance à chaque avertissement. Cela donne une estimation approximative de la certitude de l'outil qu'un avertissement donné est effectivement un problème. Naturellement, ces évaluations ne doivent pas être considérées comme une vérité absolue.
Il existe trois niveaux de confiance :
+ Élevé - Soit il s'agit d'un avertissement simple (valeur booléenne), soit les entrées utilisateur sont très probablement utilisées de manière non sécurisée.
+ Moyen - Cela indique généralement une utilisation non sécurisée d'une variable, mais cette variable peut ou non être une entrée utilisateur.
+ Faible - Signifie généralement que des entrées utilisateur ont été utilisées indirectement d'une manière potentiellement non sécurisée.
Pour n'obtenir que les avertissements au-dessus d'un niveau de confiance donné :
brakeman -w3
L'option `-w` prend un nombre de 1 à 3, 1 étant faible (tous les avertissements) et 3 étant élevé (uniquement les avertissements de confiance la plus élevée).
# Fichiers de configuration
Les options de Brakeman peuvent être stockées et lues à partir de fichiers YAML.
Pour simplifier le processus d'écriture d'un fichier de configuration, l'option `-C` affichera les options actuellement définies :
```sh
$ brakeman -C --skip-files plugins/
---
:skip_files:
- plugins/
```
Les options passées en ligne de commande ont priorité sur les fichiers de configuration.
Les emplacements de configuration par défaut sont `./config/brakeman.yml`, `~/.brakeman/config.yml` et `/etc/brakeman/config.yml`.
L'option `-c` peut être utilisée pour spécifier un fichier de configuration à utiliser.
# Intégration continue
Un [plugin est disponible](http://brakemanscanner.org/docs/jenkins/) pour Jenkins/Hudson.
Pour encore plus de tests continus, essayez le [plugin Guard](https://github.com/guard/guard-brakeman).
Plusieurs [Actions GitHub](https://github.com/marketplace?type=actions&query=brakeman) sont disponibles.
# Compilation
git clone git://github.com/presidentbeef/brakeman.git
cd brakeman
gem build brakeman.gemspec
gem install brakeman*.gem
# Qui utilise Brakeman ?
* [Code Climate](https://codeclimate.com/)
* [GitHub](https://github.com/)
* [Groupon](http://www.groupon.com/)
* [New Relic](http://newrelic.com)
* [Twitter](https://twitter.com/)
[… et plus encore !](http://brakemanscanner.org/brakeman_users)
# Page d'accueil/Actualités
Site web : http://brakemanscanner.org/
Twitter : https://twitter.com/brakeman
Chat : https://gitter.im/presidentbeef/brakeman
# Licence
Brakeman est gratuit pour une utilisation non commerciale.
Voir [COPYING](https://github.com/presidentbeef/brakeman/blob/main/COPYING.md) pour plus de détails.