Skip to main content

CLI tool that analyzes Pull Requests combining SAST, CVE scanning, and LLM reasoning to filter false positives before reporting.

Project description

Security PR Guardian

Herramienta CLI y GitHub Action que analiza Pull Requests combinando SAST (análisis estático con regex sobre 7 CWEs), escaneo de CVEs vía OSV.dev, RAG sobre una base de conocimiento OWASP/CWE, y razonamiento LLM vía Amazon Bedrock para filtrar falsos positivos antes de publicar un comentario estructurado en el PR.

Requisitos previos

  • Python 3.11+
  • Cuenta AWS con acceso a Amazon Bedrock y el modelo habilitado en tu región
  • Token de GitHub con permisos repo (lectura) y pull-requests (escritura)

Instalación

pip install security-pr-guardian

Configuración

Variables de entorno obligatorias

export GITHUB_TOKEN=ghp_...              # Token GitHub
export BEDROCK_REGION=us-east-1          # Región AWS de Bedrock
export BEDROCK_MODEL_ID=anthropic.claude-sonnet-4-20250514-v1:0

Copia .env.example como .env y rellena los valores:

cp .env.example .env

Configuración opcional (config.yaml)

# config.yaml — opcional, en la raíz del proyecto
llm_backend: bedrock       # "bedrock" (default) | "anthropic"
osv_timeout_seconds: 10    # Timeout para OSV.dev (1-300)
max_diff_lines: 10000      # Máximo de líneas del diff a analizar
max_dependencies: 50       # Máximo de dependencias a escanear

Uso

Analizar un PR

security-guardian check --repo owner/repo --pr 42

Con opciones adicionales:

# Modo dry-run — no publica comentario en el PR
security-guardian check --repo owner/repo --pr 42 --no-comment

# Salida en JSON (útil para integración con otras herramientas)
security-guardian check --repo owner/repo --pr 42 --output json

Códigos de salida

Código Significado
0 Análisis completado, sin vulnerabilidades explotables
1 Análisis completado, al menos una vulnerabilidad explotable encontrada
2 Error de configuración o argumentos inválidos

Inicializar configuración

# Genera .env.example y valida las credenciales configuradas
security-guardian init

# Genera .security-guardian.yml con el perfil de convenciones del equipo
security-guardian init --profile

# Auto-detecta frameworks y librerías desde los manifiestos del proyecto
security-guardian init --profile --auto-detect

Perfil de equipo (.security-guardian.yml)

Archivo opcional que personaliza el razonamiento del LLM para tu equipo:

team_profile:
  frameworks:
    - django
    - react
  auth_libraries:
    - bcrypt
  allowed_patterns:
    - cwe_id: CWE-502
      razon: pickle usado solo en cache interno, nunca con input de usuario
    - cwe_id: CWE-327
      razon: md5 solo para ETags HTTP, no para datos sensibles
  min_severity: medium
  custom_exceptions:
    - Los logs internos pueden contener IDs de usuario por diseño

Integración como GitHub Action

Agrega este step a tu workflow:

- name: Security PR Guardian
  uses: Juanescuaran2041/security-sentinel@v0.1.0
  with:
    repo: ${{ github.repository }}
    pr-number: ${{ github.event.pull_request.number }}
    github-token: ${{ secrets.GITHUB_TOKEN }}
    bedrock-region: ${{ secrets.BEDROCK_REGION }}
    bedrock-model-id: ${{ secrets.BEDROCK_MODEL_ID }}

Configura los secrets en tu repositorio:

  • AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY — credenciales AWS IAM
  • BEDROCK_REGION — región de Bedrock (ej. us-east-1)
  • BEDROCK_MODEL_ID — ID del modelo (ej. anthropic.claude-3-5-haiku-20241022-v1:0)

Ver el workflow de ejemplo completo en .github/workflows/security-guardian.yml.

Vulnerabilidades detectadas

CWE Tipo
CWE-89 Inyección SQL
CWE-78 Inyección de comandos OS
CWE-79 Cross-Site Scripting (XSS)
CWE-502 Deserialización insegura
CWE-798 Credenciales hardcodeadas
CWE-327 Algoritmos criptográficos débiles (MD5, SHA1, DES)
CWE-552 Referencias a rutas sensibles

Además de CVEs conocidos en dependencias via OSV.dev.

Licencia

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

security_pr_guardian-0.1.0.tar.gz (129.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

security_pr_guardian-0.1.0-py3-none-any.whl (66.4 kB view details)

Uploaded Python 3

File details

Details for the file security_pr_guardian-0.1.0.tar.gz.

File metadata

  • Download URL: security_pr_guardian-0.1.0.tar.gz
  • Upload date:
  • Size: 129.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.2

File hashes

Hashes for security_pr_guardian-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9750782ff0a9fe929d445d7907ffbc561f0b1c2c59ca5b4545022d1f6621316d
MD5 67fb6df33ee88a3bd6a8e3a36fd160b6
BLAKE2b-256 43bd681a2c9c3d1abaa8226f0e245e1fa07475ff13188cdee149b7d28a07b25d

See more details on using hashes here.

File details

Details for the file security_pr_guardian-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for security_pr_guardian-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 652bbe705ae15eff14c3571179de28667bfceefe740a19a46d79f0f2cda5c7c6
MD5 559581fd9d48e06a3a427ad4a980c03d
BLAKE2b-256 5f0deae91bc023116f687ba269fb259ffde77f9371f452546f2ab9db2977fdd5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page