
Un chien qui aide à rechercher des problèmes de sécurité dans vos dépôts.
Layne est une GitHub App auto-hébergée qui centralise l'analyse de sécurité sur l'ensemble de nos dépôts. Comme nous n'utilisons pas d'outils commerciaux de SAST/détection de secrets, et que nous n'avons pas accès à GitHub Enterprise, il peut devenir difficile de maintenir différents fichiers de workflow GitHub Actions à travers différents dépôts - surtout à mesure que le nombre de ces dépôts augmente. À la place, nous installons Layne une seule fois et il écoute les événements de pull request, exécute nos outils de sécurité côté serveur, publie les résultats sous forme d'annotations natives de GitHub Check Run, et notifie le canal de notifications de sécurité de notre équipe sécurité.
Cet outil est basé sur l'implémentation de Reddit.
┌─────────────────────────────────┐
│ GITHUB PULL REQUEST │◀────────────────────────┐
│ (OPEN, SYNC, REOPEN) │ │
└─────────────────────────────────┘ │
│ Check run │
HTTP Post /webhook │
│ │
┌──────────────────────────────────────────────────────────────────────────────────────────┐
│ EC2 Instance (Docker) │ │ │
│ ┌───────▼────────┐ │ │
│ │ NGINX + TLS │ │ │
│ └───────┬────────┘ │ │
│ │ │ │
│ ┌─────────────────────┘ │ │
│ │ │ │
│┌─────────────┐ │ Schedules job ┌────────────────┐ ┌────────────┐ │ │
││ LAYNE │◀─┘ ─────────────────▶│ REDIS │───▶│ TRUFFLEHOG │──┐ │ │
││ SERVER │ │ (BULLMQ) │ │ └────────────┘ │ │ │
│└─────────────┘ └────────────────┘ │ ┌────────────┐ │ │ │
│ │─▶│ SEMGREP │──┤ │ │
│ │ └────────────┘ │ │ │
│ │ ┌────────────┐ │ ┌──────────┐│
│ ├─▶│ CLAUDE │──┼─▶│ REPORTER ││
│ │ └────────────┘ │ └──────────┘│
│ │ ┌────────────┐ │ │
│ ├─▶│ SPECTRE │──┤ │
│ │ └────────────┘ │ │
│ │ ┌────────────┐ │ │
│ └─▶│ DEP DOCTOR │──┘ │
│ └────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────┘
Lorsqu'une PR est ouverte ou mise à jour - ou après l'exécution d'un workflow/job, selon le déclencheur configuré -, GitHub envoie un webhook à Layne. Le serveur met immédiatement en file d'attente une tâche d'analyse et renvoie 200 OK à GitHub. Un worker récupère la tâche, clone exactement le commit qui a déclenché l'événement, transmet les fichiers modifiés à chaque scanner configuré (Semgrep, Trufflehog, Claude, Spectre, Dep Doctor), collecte leurs résultats et publie les résultats sous forme d'annotations en ligne sur le Check Run.
Seuls les fichiers modifiés dans la PR sont transmis à chaque scanner. Les résultats dans les fichiers que vous n'avez pas touchés ne sont jamais signalés.
Layne est livré avec cinq scanners intégrés. Vous pouvez activer, désactiver ou configurer chacun d'eux par dépôt dans config/layne.json.
| Scanner | Ce qu'il détecte | Notes |
|---|---|---|
| Semgrep | SAST - bugs, vulnérabilités, motifs non sécurisés | Exécute semgrep scan --config auto par défaut ; entièrement configurable via extraArgs |
| Trufflehog | Secrets, clés API et identifiants | Exécute trufflehog filesystem ; utilisez --only-verified pour réduire le bruit |
| Claude | Intention malveillante, portes dérobées, charges utiles obfusquées, attaques de la chaîne d'approvisionnement | Désactivé par défaut ; activation par dépôt ; nécessite ANTHROPIC_API_KEY |
| Spectre | Intention malveillante à partir de diffs de PR typés et bornés | Désactivé par défaut ; analyse de la PR entière lorsqu'elle est petite, sinon analyse par blocs ; prend en charge Anthropic, OpenAI, Google, Mistral, Bedrock |
| Dep Doctor | CVE, dépendances abandonnées et obsolètes | Désactivé par défaut ; activation par dépôt ; nécessite osv-scanner dans le PATH |
Vous pouvez également ajouter vos propres scanners. Voir Étendre Layne.
Une fois tout correctement configuré, Layne ajoutera un run à la pull request et exécutera les outils d'analyse configurés. Lorsqu'une analyse échoue, cela ressemble à ceci.

Les résultats de Layne seront écrits dans la PR sous forme d'annotations en ligne, indiquant les lignes exactes où les problèmes de sécurité ont été trouvés.

Vous pouvez également consulter les résultats de Layne et leur résumé en cliquant sur le check lui-même.

Et vous pouvez configurer Layne pour envoyer une notification via webhook vers un canal Rocket.Chat - vous pouvez aussi configurer Slack, et il est facile d'ajouter de nouveaux notificateurs si vous utilisez une autre plateforme de chat.

Lancez le site de documentation en local :
npm run docs:dev
Puis ouvrez http://localhost:3000.
La documentation complète couvre le déploiement, la configuration, les scanners, les notificateurs, les commentaires de PR, la suppression de résultats, les métriques, l'architecture de sécurité, et plus encore.
Layne est sous licence Apache License 2.0 (Apache-2.0). Voir LICENSE pour le texte complet.