Qué es Semgrep
Semgrep es una herramienta de análisis estático: lee tu código sin ejecutarlo y lo compara contra reglas que describen errores de seguridad conocidos. Funciona como alguien que revisa tu proyecto línea por línea. No es una IA: trabaja con reglas.
Su motor, Semgrep Community Edition, es gratis y de código abierto, con licencia LGPL-2.1. Analiza más de 30 lenguajes, entre ellos JavaScript, TypeScript, Python, Java, Go y PHP.
Sirve para encontrar cosas que no ves probando la app, aunque funcione bien:
| Problema | Qué significa |
|---|---|
| Clave a la vista | Una clave secreta, por ejemplo de pagos, escrita directamente en el código |
| Inyección SQL | Una consulta a la base armada con lo que escribe el usuario: cualquiera puede manipular la base |
| Inyección de comandos | Un comando del servidor armado con datos del usuario: cualquiera podría ejecutar lo que quiera |
Es una primera revisión, no una garantía: el propio README avisa que la versión gratis se pierde muchos problemas reales, porque analiza dentro de una función o de un archivo.
Cómo usarlo
- Instalalo. En Linux o macOS,
pipx install semgreplo deja aislado del resto del sistema; también sirvepython3 -m pip install semgrepo, en macOS,brew install semgrep. En Windows el soporte está en beta: instalá Python marcando la opción de agregarpython.exeal PATH, y en PowerShell corré[System.Environment]::SetEnvironmentVariable('PYTHONUTF8', '1', 'User')y despuéspipx install semgrep. - Entrá a la carpeta de tu proyecto. Abrí una terminal dentro de la carpeta que querés revisar.
- Corré el escaneo.
semgrep scan --config p/default .No necesitás crear ninguna cuenta. Si además querés que no envíe métricas de uso, sumá--metrics off:semgrep scan --config p/default --metrics off . - Leé los hallazgos. Arriba aparece la cantidad total («Code Findings»). Cada hallazgo trae el archivo, la línea, una explicación en inglés de cómo arreglarlo y un enlace
sg.run/…a la regla que lo detectó. - Corregí y volvé a correrlo. Arreglá cada línea marcada y repetí el comando hasta que no queden hallazgos que te importen.
Qué encontró en una app de prueba
Una app Flask de 20 líneas con cuatro fallas puestas a propósito. El escaneo, sin login, terminó en 3 segundos con 8 hallazgos en app.py:
| Línea | Falla | Reglas que la marcaron |
|---|---|---|
| 6 | Clave de Stripe (sk_live_…) escrita en el código |
detected-stripe-api-key |
| 12 | Consulta SQL armada con request.args |
sqlalchemy-execute-raw-query, django…tainted-sql-string, flask…tainted-sql-string |
| 17 | subprocess.check_output(..., shell=True) con un parámetro del usuario |
subprocess-injection, dangerous-subprocess-use, subprocess-shell-true |
| 20 | app.run(debug=True) |
debug-enabled |
Una misma falla puede aparecer marcada por varias reglas: por eso cuatro fallas dan ocho hallazgos.
Qué sale gratis y qué no
| Opción | Cuenta | Costo |
|---|---|---|
semgrep scan --config p/default . en tu compu |
No | Gratis |
semgrep ci (integración continua) |
Sí, con semgrep login |
Según plan |
| Plataforma, Free Edition | Sí | Gratis hasta 10 colaboradores |
| Plataforma, Teams: Code o Supply Chain | Sí | USD 30 por mes por colaborador, cada uno |
| Plataforma, Teams: Secrets | Sí | USD 15 por mes por colaborador |
Para revisar tu proyecto como en el video no hace falta ningún plan.
Qué tenés que saber
- Tu código se revisa en tu compu, pero Semgrep baja las reglas de su registro y, salvo que uses
--metrics off, envía métricas de uso. --config autotambién existe, pero usa la URL de tu proyecto para pedir reglas al registro.--config p/defaultno lo necesita.- Las explicaciones salen en inglés.
Si algo falla
- Si el comando termina sin error pero ves hallazgos, es normal:
semgrep scanpor defecto no devuelve código de error aunque encuentre problemas. - Si te pide iniciar sesión, fijate que estés usando
semgrep scany nosemgrep ci, que es el que pide cuenta. - Si no te marca nada, no quiere decir que tu app sea segura: la versión gratis se pierde problemas que cruzan funciones o archivos.
- Si no querés que se envíen métricas de uso, agregá
--metrics offal comando. - Si no entendés una explicación, abrí el enlace
sg.run/…del hallazgo para ver la regla completa.