Aller au contenu
Sécurité medium

Bearer : scanner SAST pour détecter vulnérabilités et fuites de données

16 min de lecture

logo Bearer

Votre application manipule des adresses e-mail, des mots de passe, des numéros de carte bancaire. Mais savez-vous exactement où ces données transitent dans votre code ? Un console.log(user) oublié, une requête SQL construite par concaténation, un cookie sans flag HttpOnly — autant de failles que les scanners classiques ne détectent pas toujours.

Bearer est un scanner SAST (Static Application Security Testing) qui va plus loin que la détection de vulnérabilités : il trace les flux de données sensibles dans votre code. En une commande, il identifie les failles OWASP Top 10, les violations CWE Top 25 et les risques de fuite de données personnelles au regard du RGPD.

Le SAST (Static Application Security Testing) analyse votre code source sans l’exécuter pour y détecter des vulnérabilités. Là où un linter vérifie le style et les erreurs de syntaxe, un scanner SAST cherche des failles de sécurité : injections SQL, XSS, secrets en dur, configurations dangereuses.

Bearer se distingue des autres scanners SAST par une capacité unique : le suivi des flux de données (data flow analysis). Il ne se contente pas de repérer un logger.info(data) — il remonte la chaîne pour déterminer si data contient un e-mail, un mot de passe ou un numéro de sécurité sociale. Cette analyse permet de détecter des problèmes que les scanners basés uniquement sur des patterns ne voient pas.

  • Vulnérabilités OWASP Top 10 : injections (A03), authentification cassée (A07), XSS (A03), exposition de données (A02)
  • CWE Top 25 : les 25 faiblesses logicielles les plus dangereuses selon le MITRE
  • Fuites de données sensibles : PII (données personnellement identifiables), PHI (données de santé), PD (données personnelles) — plus de 120 types de données reconnus
  • Secrets en dur : via le scanner dédié --scanner secrets
  • Mauvaises configurations : cookies sans flags de sécurité, communications non chiffrées, journalisation excessive
LangageFrameworks courants détectés
JavaScriptExpress, React, Next.js
TypeScriptNestJS, Angular
RubyRails, Sinatra
PythonDjango, Flask, FastAPI
JavaSpring, Jakarta
GoGin, Echo, net/http
PHPLaravel, Symfony

Avant de commencer, vérifiez que vous disposez de :

  • Un terminal sous Linux ou macOS (Windows via WSL)
  • Git installé (pour cloner des projets à scanner)
  • curl ou Homebrew (pour l’installation)
  • Connaître les bases du SAST est un plus, mais pas indispensable

Bearer est distribué sous forme d’un binaire unique — pas de dépendance Java, Python ou Node.js à installer.

Fenêtre de terminal
curl -sfL https://raw.githubusercontent.com/Bearer/bearer/main/contrib/install.sh | sh

Le binaire est installé dans /usr/local/bin/bearer. Vérifiez l’installation :

Fenêtre de terminal
bearer version

Vérification :

Fenêtre de terminal
bearer version
# v2.0.1

Si ça ne marche pas : vérifiez que /usr/local/bin est dans votre $PATH. Si vous utilisez Docker, vérifiez que le volume est correctement monté.

Pour découvrir Bearer, le meilleur moyen est de scanner un projet volontairement vulnérable. Juice Shop d’OWASP est parfait pour ça.

  1. Cloner le projet de test

    Fenêtre de terminal
    git clone https://github.com/juice-shop/juice-shop.git
    cd juice-shop
  2. Lancer le scan de sécurité

    Fenêtre de terminal
    bearer scan .

    Le scan prend quelques minutes selon la taille du projet. Bearer affiche une barre de progression, puis le rapport.

  3. Analyser le rapport

    Le rapport liste les vulnérabilités trouvées, classées par sévérité :

    CRITICAL: Sensitive data stored in HTML local storage detected.
    https://docs.bearer.com/reference/rules/javascript_lang_local_storage
    File: frontend/src/app/login/login.component.ts:52
    HIGH: SQL injection vulnerability detected. [CWE-89]
    https://docs.bearer.com/reference/rules/javascript_lang_sql_injection
    File: routes/login.ts:30

    Chaque finding contient :

    • La sévérité (CRITICAL, HIGH, MEDIUM, LOW, WARNING)
    • Une description du problème
    • Un lien vers la documentation de la règle
    • Le fichier et la ligne concernés
    • Un fingerprint unique pour ignorer le finding si nécessaire
SévéritéSignificationExemple
CRITICALExploitation directe possible, impact majeurStockage de données sensibles en local storage
HIGHFaille exploitable, correctif prioritaireInjection SQL, XSS
MEDIUMRisque réel mais exploitation conditionnelleCookie sans flag Secure
LOWBonne pratique non respectéeJournalisation insuffisante
WARNINGInformation, pas de risque immédiatUsage d’algorithme faible (MD5)

Plutôt que de passer des flags à chaque commande, créez un fichier bearer.yml à la racine de votre projet :

Fenêtre de terminal
bearer init

Cette commande génère un fichier avec les valeurs par défaut. Voici une configuration typique :

bearer.yml
# Niveaux de sévérité inclus dans le rapport
severity: "critical,high,medium"
# Règles à ignorer globalement
rule:
skip-rule:
- javascript_lang_logger
# Dossiers à exclure du scan
scan:
skip-path:
- "node_modules"
- "vendor"
- "test"
- "spec"
- "*.test.js"
# Scanner à utiliser (sast, secrets, ou les deux)
scanner:
- sast

Pour n’afficher que les vulnérabilités critiques et hautes :

Fenêtre de terminal
bearer scan . --severity critical,high

Vous pouvez ignorer des règles spécifiques pour tout le projet :

Fenêtre de terminal
# Ignorer une règle
bearer scan . --skip-rule javascript_lang_logger
# N'exécuter que certaines règles
bearer scan . --only-rule javascript_lang_sql_injection,javascript_lang_hardcoded_secret

Pour ignorer une règle sur un bloc de code précis, utilisez un commentaire :

// bearer:disable javascript_lang_logger
function logUser(user) {
logger.info(user.name);
}

Chaque finding a un fingerprint unique. Pour l’ignorer dans les scans futurs :

Fenêtre de terminal
bearer ignore add 4b0883d52334dfd9a4acce2fcf810121_0 \
--author="Stéphane" \
--comment="Faux positif validé" \
--false-positive

Les fingerprints ignorés sont stockés dans le fichier bearer.ignore. Pour voir les findings ignorés :

Fenêtre de terminal
bearer ignore show 4b0883d52334dfd9a4acce2fcf810121_0

En plus du SAST, Bearer intègre un scanner de secrets en dur (clés API, tokens, mots de passe) :

Fenêtre de terminal
bearer scan . --scanner secrets

Pour combiner les deux scanners :

Fenêtre de terminal
bearer scan . --scanner sast,secrets

C’est la fonctionnalité qui distingue vraiment Bearer des autres scanners SAST. Le rapport privacy cartographie tous les flux de données personnelles dans votre code : où elles sont collectées, stockées, transmises et journalisées.

Fenêtre de terminal
bearer scan . --report privacy

Bearer reconnaît plus de 120 types de données sensibles, réparties en catégories :

  • PII (Personally Identifiable Information) : nom, e-mail, adresse, téléphone, numéro de sécurité sociale
  • PHI (Protected Health Information) : données médicales, prescriptions, diagnostics
  • PD (Personal Data au sens RGPD) : adresse IP, cookies, identifiants de session, géolocalisation

Si votre application traite des données de citoyens européens, le RGPD exige que vous sachiez exactement quelles données vous collectez et où elles transitent. Le rapport privacy de Bearer produit une cartographie exploitable pour :

  • PIA (Privacy Impact Assessment) : évaluation d’impact sur la vie privée
  • DPIA (Data Protection Impact Assessment) : imposé par le RGPD pour les traitements à risque
  • RoPA (Record of Processing Activities) : registre des activités de traitement

Bearer supporte plusieurs formats de sortie, selon votre usage :

FormatUsageCommande
Texte (défaut)Lecture humaine dans le terminalbearer scan .
JSONIntégration avec d’autres outilsbearer scan . --format json
YAMLAlternative lisible au JSONbearer scan . --format yaml
SARIFGitHub Code Scanning, VS Codebearer scan . --format sarif
GitLab SASTGitLab Security Dashboardbearer scan . --format gitlab-sast
HTMLRapport pour partage / auditbearer scan . --format html --output rapport.html

Bearer fournit une action officielle prête à l’emploi :

.github/workflows/bearer.yml
name: Bearer Security Scan
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
jobs:
bearer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Bearer Scan
uses: bearer/bearer-action@v2

Pour ne remonter que les nouvelles vulnérabilités introduites par une PR (et éviter de noyer l’équipe sous les findings existants) :

.github/workflows/bearer-pr.yml
name: Bearer PR Check
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
jobs:
bearer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Bearer Diff Scan
uses: bearer/bearer-action@v2
with:
diff: true

Pour afficher les résultats directement dans l’onglet Security du dépôt :

.github/workflows/bearer-sarif.yml
name: Bearer SARIF
on:
push:
branches: [main]
permissions:
contents: read
security-events: write
jobs:
bearer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Bearer Scan
uses: bearer/bearer-action@v2
with:
format: sarif
output: results.sarif
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: results.sarif
.gitlab-ci.yml
bearer-sast:
image: bearer/bearer:latest
stage: test
script:
- bearer scan . --format gitlab-sast --output gl-sast-report.json
artifacts:
reports:
sast: gl-sast-report.json
when: always

Le rapport au format gitlab-sast s’affiche automatiquement dans le Security Dashboard de GitLab.

.gitlab-ci.yml
bearer-mr-diff:
image: bearer/bearer:latest
stage: test
script:
- bearer scan . --diff --format gitlab-sast --output gl-sast-report.json
artifacts:
reports:
sast: gl-sast-report.json
when: always
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
SymptômeCause probableSolution
command not found: bearerBinaire pas dans le PATHVérifier que /usr/local/bin est dans $PATH ou relancer le shell
Scan très lent (>10 min)Projet volumineux ou node_modules scannéAjouter --skip-path node_modules,vendor,.git
Pas de finding sur un projet connu vulnérableLangage non supportéVérifier les langages supportés
failed to scan: context deadline exceededTimeout sur un fichier volumineuxAugmenter le timeout ou exclure le fichier avec --skip-path
Finding faux positifRègle trop large pour le contexteUtiliser bearer ignore add <fingerprint> --false-positive
Format SARIF videAucun finding à la sévérité demandéeVérifier le flag --severity (par défaut : toutes)
  • Bearer est un scanner SAST qui analyse le code source sans l’exécuter pour détecter vulnérabilités et fuites de données
  • Il couvre OWASP Top 10 et CWE Top 25 sur 7 langages : Go, Java, JavaScript, TypeScript, PHP, Python, Ruby
  • Sa force unique : le suivi des flux de données sensibles — il sait si un logger.info(data) expose un e-mail ou un mot de passe
  • Le rapport privacy cartographie les données personnelles pour faciliter la conformité RGPD (PIA, DPIA, RoPA)
  • En CI/CD, utilisez le scan différentiel (--diff) pour ne remonter que les nouvelles vulnérabilités sur les PR/MR
  • Les formats SARIF et gitlab-sast s’intègrent nativement dans les dashboards de sécurité GitHub et GitLab
  • Gérez les faux positifs avec bearer ignore add et documentez chaque exclusion

Tu sais maintenant scanner ton code avec Bearer et interpréter les rapports. Voici comment compléter ta démarche de sécurité applicative :

RessourceDescription
Site officielDocumentation complète
GitHubCode source, issues, releases
Règles disponiblesCatalogue complet des règles de détection
Types de donnéesListe des 120+ types de données sensibles reconnus
GitHub ActionAction officielle pour GitHub Actions

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.