
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)
}
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.
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 --> AF
El 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.
| 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 |
| 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 | - | - |