Una herramienta multiplataforma de detección de vulnerabilidades y automatización de ataques en CI/CD para identificar debilidades de seguridad en configuraciones de pipeline.
Trajan escanea pipelines de CI/CD en busca de vulnerabilidades de seguridad que los atacantes utilizan para comprometer las cadenas de suministro de software. Es compatible con GitHub Actions, GitLab CI, Azure DevOps, Jenkins y JFrog.
Trajan analiza archivos YAML de workflows, construye gráficos de dependencias, ejecuta plugins de detección y valida la explotabilidad mediante capacidades de ataque integradas.
[!NOTE] Trajan está en desarrollo activo. Algunas funciones pueden estar incompletas y se esperan asperezas. Si encuentras problemas, por favor abre uno.
Los binarios precompilados están disponibles en la página de versiones.
go install github.com/praetorian-inc/trajan/cmd/trajan@latest
O compilar desde el código fuente:
git clone https://github.com/praetorian-inc/trajan.git
cd trajan && make build
repo (para repositorios privados) o public_repo (solo para repositorios públicos)pkg/lib)Trajan se puede incrustar como una biblioteca Go para escaneo programático de seguridad CI/CD. El paquete pkg/lib proporciona un SDK público que envuelve el registro interno de plataformas, el motor de detección y el escáner de Trajan en una API única de alto nivel.
import "github.com/praetorian-inc/trajan/pkg/lib"
result, err := lib.Scan(ctx, lib.ScanConfig{
Platform: "github",
Token: os.Getenv("GH_TOKEN"),
Org: "myorg",
Repo: "myrepo",
Concurrency: 10,
Timeout: 5 * time.Minute,
})
if err != nil {
log.Fatal(err)
}
for _, f := range result.Findings {
fmt.Printf("[%s] %s in %s: %s\n", f.Severity, f.Type, f.WorkflowFile, f.Evidence)
}
| Función | Descripción |
|---|---|
lib.Scan(ctx, cfg) | Escaneo completo: inicialización de plataforma → descubrimiento de workflows → ejecución de detección |
lib.GetPlatform(name) | Obtener un adaptador de plataforma por nombre (github, gitlab, azuredevops, bitbucket, jenkins, jfrog) |
lib.ListPlatforms() | Listar todos los nombres de plataformas registradas |
lib.GetDetections(platform) | Obtener plugins de detección para una plataforma específica |
lib.GetDetectionsForPlatform(platform) | Obtener detecciones específicas de plataforma + multiplataforma |
lib.ListDetectionPlatforms() | Listar plataformas con detecciones registradas |
type ScanConfig struct {
Platform string // Plataforma CI/CD (obligatorio)
Token string // Token de autenticación API
BaseURL string // URL base personalizada para instancias autoalojadas
Org string // Nombre de la organización/propietario
Repo string // Nombre del repositorio (vacío = escanear todos los repositorios de la org)
Concurrency int // Trabajadores de detección en paralelo (predeterminado: 10)
Timeout time.Duration // Duración máxima del escaneo (predeterminado: 5m)
LocalPath string // Ruta del sistema de archivos local (archivo o directorio) para escaneo sin conexión
}
type ScanResult struct {
Findings []detections.Finding // Vulnerabilidades de seguridad detectadas
Workflows []platforms.Workflow // Archivos de workflow CI/CD descubiertos
Errors []error // Errores no fatales durante el escaneo
SkippedDetections []string // Nombres de detecciones omitidas en modo LocalPath (solo API); siempre vacío en escaneos en modo API
}
El SDK es utilizado por la plataforma de gestión de superficie de ataque Chariot para ejecutar escaneos de seguridad CI/CD como una capacidad:
import trajanlib "github.com/praetorian-inc/trajan/pkg/lib"
result, err := trajanlib.Scan(ctx, trajanlib.ScanConfig{
Platform: platformName,
Token: token,
Org: repo.Org,
Repo: repo.Name,
})
// Convertir result.Findings → emisiones capmodel.Risk
# Escanear un repositorio de GitHub
export GH_TOKEN=ghp_your_token
trajan github scan --repo owner/repo
# Escanear una organización de GitHub
trajan github scan --org myorg --concurrency 20
# Escanear proyectos de GitLab
export GITLAB_TOKEN=glpat_your_token
trajan gitlab scan --group mygroup
# Escanear Azure DevOps
export AZURE_DEVOPS_PAT=your_pat
trajan ado scan --org myorg --repo myproject/myrepo
# Escaneo sin conexión: escanear archivos de workflow locales sin acceso API
trajan github scan --path ./my-repo
trajan github scan --path ./.github/workflows/ci.yml
# Salida JSON
trajan github scan --repo owner/repo -o json > results.json
Para uso detallado, explicaciones de detección y recorridos de ataque, consulta la Wiki.
| Plataforma | Detecciones | Ataques | Enumerar |
|---|---|---|---|
| GitHub Actions | 11 | 9 | token, repos, secrets |
| GitLab CI | 8 | 3 | token, projects, groups, secrets, runners, branch-protections |
| Azure DevOps | 6 | 9 | token, projects, repos, pipelines, connections, agent-pools, users, groups, y más |
| Jenkins | 7 | 3 | access, jobs, nodes, plugins |
| JFrog | solo-escáner | - | - |
Trajan también se compila en un binario WebAssembly que se ejecuta completamente en el navegador como un único archivo HTML. Utiliza el mismo motor de detección, plugins de ataque y lógica de enumeración que la CLI, simplemente compilado a WASM. La versión web de Trajan permite una entrega de baja fricción en entornos objetivo como parte de una evaluación.
make wasm # compilar browser/trajan.wasm
make wasm-dist # compilar trajan-standalone.html autocontenido
graph TD
subgraph CLI
CMD[Cobra Commands]
end
subgraph Platforms
GH[GitHub]
GL[GitLab]
ADO[Azure DevOps]
JK[Jenkins]
JF[JFrog]
end
CMD --> GH & GL & ADO & JK & JF
subgraph SF[Scan Flow]
API[Platform API] --> |fetch workflows| YAML[Workflow YAML]
YAML --> P
subgraph P[Parser]
direction LR
GHP[GitHub] ~~~ GLP[GitLab] ~~~ ADP[Azure] ~~~ JKP[Jenkins]
end
P --> NW[Normalized Workflow]
NW --> GB[Graph Builder]
GB --> Graph[Workflow → Job → Step Graph]
end
subgraph AE[Analysis Engine]
direction LR
TT[Taint Tracker] --> Tagged[Tagged Graph]
Tagged --> DP[Detection Plugins]
DP --> GA[Gate Analysis]
GA --> Findings
end
subgraph AF[Attack Flow]
direction LR
AP[Attack Plugins] --> |artifacts| Session[Session Tracker]
Session --> Cleanup
end
Graph --> AE
AE --> AFEl soporte para plataformas CI/CD adicionales está en desarrollo activo:
Consulta CONTRIBUTING.md para pautas de desarrollo, creación de plugins y estructura del proyecto.
Construido sobre investigación de Gato, Glato, Gato-X por Adnan Khan, y el GitHub Security Lab.
Apache 2.0. Consulta LICENSE.