Orquesta Agentes IA que desarrollan por ti
Verificando...
45-owasp-top10-checklist
Procedimiento: OWASP Top 10 Checklist
Seguridad
1 plugin(s)
Editor
Preview
Tareas
1
Info
Titulo
Verifica el cumplimiento de OWASP Top 10. Revisa cada categoría de vulnerabilidad, documenta estado actual, y prioriza remediaciones.
Descripcion
Contenido Markdown
11771 caracteres
Guardar
# Procedimiento: OWASP Top 10 Checklist ## Metadata - **ID**: PROC-45 - **Frecuencia**: Trimestral o Pre-release mayor - **Duraci├│n estimada**: 60-90 min - **Requiere**: Acceso al c├│digo fuente, entorno de staging - **Dependencias**: PROC-40 (Semgrep), PROC-43 (Secrets) - **Bloquea**: Release mayor (si hay vulnerabilidades cr├¡ticas) - **Agentes**: security-engineer, dotnet-architect --- ## Objetivo Verificar protecciones contra OWASP Top 10 2021: 1. Revisar controles de seguridad implementados 2. Identificar vulnerabilidades potenciales 3. Documentar estado de cumplimiento 4. Priorizar remediaciones --- ## OWASP Top 10 - 2021 | # | Categor├¡a | Descripci├│n | |---|-----------|-------------| | A01 | Broken Access Control | Control de acceso deficiente | | A02 | Cryptographic Failures | Fallos criptogr├íficos | | A03 | Injection | Inyecci├│n (SQL, NoSQL, LDAP, etc.) | | A04 | Insecure Design | Dise├▒o inseguro | | A05 | Security Misconfiguration | Configuraci├│n incorrecta | | A06 | Vulnerable Components | Componentes vulnerables | | A07 | Auth Failures | Fallos de autenticaci├│n | | A08 | Software/Data Integrity | Integridad de software/datos | | A09 | Logging Failures | Fallos de logging | | A10 | SSRF | Server-Side Request Forgery | --- ## Checklist Ejecutable ### A01: Broken Access Control ```bash # Verificar autorizaci├│n en controllers grep -rn "Authorize\|AllowAnonymous" src --include="*.cs" # Endpoints sin autorizaci├│n grep -rn "\[HttpGet\]\|\[HttpPost\]" src --include="*.cs" | \ xargs -I{} grep -L "Authorize" {} # Verificar roles en acciones cr├¡ticas grep -rn "Roles\s*=" src --include="*.cs" ``` **Checklist:** - [ ] Todos los endpoints tienen [Authorize] o justificaci├│n para [AllowAnonymous] - [ ] RBAC implementado para acciones sensibles - [ ] Verificaci├│n de ownership en recursos (user puede ver solo sus datos) - [ ] Rate limiting implementado - [ ] CORS configurado correctamente ```csharp // Ô£à Bueno [Authorize(Roles = "Admin")] public async Task<IActionResult> DeleteUser(int id) // ÔØî Malo - Sin verificaci├│n de ownership public async Task<IActionResult> GetOrder(int orderId) { return _db.Orders.Find(orderId); // ┬┐Es del usuario actual? } ``` - [ ] **Estado A01:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A02: Cryptographic Failures ```bash # Buscar uso de algoritmos d├®biles grep -rn "MD5\|SHA1\|DES\|RC4" src --include="*.cs" # Verificar TLS grep -rn "SslProtocols\|Tls\|Ssl" src --include="*.cs" # Secrets en c├│digo grep -rn "password\s*=\|apikey\s*=\|secret\s*=" src --include="*.cs" -i ``` **Checklist:** - [ ] No usar MD5 o SHA1 para passwords (usar bcrypt, Argon2) - [ ] TLS 1.2+ forzado - [ ] Secrets en variables de entorno, no hardcoded - [ ] Datos sensibles encriptados en reposo - [ ] Certificates v├ílidos y no expirados - [ ] **Estado A02:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A03: Injection ```bash # SQL Injection - concatenaci├│n de strings grep -rn "\"SELECT.*\" \+" src --include="*.cs" grep -rn "FromSqlRaw\|ExecuteSqlRaw" src --include="*.cs" # Command Injection grep -rn "Process.Start\|ProcessStartInfo" src --include="*.cs" # XSS - output sin sanitizar grep -rn "Html.Raw\|@Html.Raw" src --include="*.cshtml" ``` **Checklist:** - [ ] Usar par├ímetros en queries, nunca concatenaci├│n - [ ] Input validation en todos los endpoints - [ ] Output encoding para prevenir XSS - [ ] No ejecutar comandos del sistema con input del usuario ```csharp // ÔØî Malo - SQL Injection var sql = "SELECT * FROM Users WHERE Name = '" + name + "'"; // Ô£à Bueno - Par├ímetros var users = _db.Users.Where(u => u.Name == name); ``` - [ ] **Estado A03:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A04: Insecure Design **Checklist:** - [ ] Threat modeling realizado - [ ] Principio de m├¡nimo privilegio aplicado - [ ] Fail-safe defaults (denegaci├│n por defecto) - [ ] Defense in depth (m├║ltiples capas) - [ ] Input validation en todas las capas ```bash # Verificar validaci├│n de modelos grep -rn "DataAnnotations\|FluentValidation" src --include="*.cs" # Verificar manejo de errores grep -rn "try\s*{" src --include="*.cs" | wc -l ``` - [ ] **Estado A04:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A05: Security Misconfiguration ```bash # Debug mode en producci├│n grep -rn "Debug\s*=\s*true\|EnableDetailedErrors" src --include="*.json" --include="*.cs" # Headers de seguridad grep -rn "X-Frame-Options\|X-Content-Type\|Content-Security-Policy\|Strict-Transport" src --include="*.cs" # Error messages detallados grep -rn "UseDeveloperExceptionPage\|UseExceptionHandler" src --include="*.cs" ``` **Checklist:** - [ ] Debug deshabilitado en producci├│n - [ ] Headers de seguridad configurados (HSTS, CSP, X-Frame-Options) - [ ] Error messages gen├®ricos en producci├│n - [ ] Directory listing deshabilitado - [ ] Versiones de software no expuestas ```csharp // Ô£à Headers de seguridad app.UseHsts(); app.Use(async (context, next) => { context.Response.Headers.Add("X-Frame-Options", "DENY"); context.Response.Headers.Add("X-Content-Type-Options", "nosniff"); await next(); }); ``` - [ ] **Estado A05:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A06: Vulnerable and Outdated Components ```bash # .NET - Vulnerabilidades conocidas dotnet list package --vulnerable # Node.js npm audit # Verificar versiones EOL grep -E "net[0-9]+\.[0-9]+" *.csproj ``` **Checklist:** - [ ] `dotnet list package --vulnerable` sin cr├¡ticos - [ ] `npm audit` sin cr├¡ticos - [ ] Framework no en EOL - [ ] Dependencias actualizadas (< 1 a├▒o para cr├¡ticas) - [ ] **Estado A06:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A07: Identification and Authentication Failures ```bash # Password policies grep -rn "PasswordOptions\|RequiredLength\|RequireDigit" src --include="*.cs" # Session management grep -rn "SessionOptions\|CookieOptions\|Expires" src --include="*.cs" # MFA grep -rn "TwoFactor\|MFA\|Authenticator" src --include="*.cs" ``` **Checklist:** - [ ] Passwords con pol├¡tica fuerte (min 8 chars, complejidad) - [ ] Password hashing con bcrypt/Argon2 (no MD5/SHA1) - [ ] Session timeout configurado - [ ] Brute force protection (lockout) - [ ] MFA disponible para accesos cr├¡ticos - [ ] Tokens JWT con expiraci├│n corta - [ ] **Estado A07:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A08: Software and Data Integrity Failures ```bash # Verificar firma de c├│digo grep -rn "SigningCredentials\|X509" src --include="*.cs" # CI/CD security grep -rn "verify\|checksum\|integrity" .gitlab-ci.yml azure-pipelines.yml 2>/dev/null ``` **Checklist:** - [ ] CI/CD pipeline seguro (no ejecuta c├│digo no revisado) - [ ] Dependencias verificadas (checksums) - [ ] Updates autom├íticos con verificaci├│n - [ ] Serializaci├│n segura (no usar BinaryFormatter) - [ ] JWT firmados correctamente - [ ] **Estado A08:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A09: Security Logging and Monitoring Failures ```bash # Verificar logging grep -rn "ILogger\|_logger\|LogInformation\|LogWarning\|LogError" src --include="*.cs" | wc -l # Logging de eventos de seguridad grep -rn "Login\|Logout\|Failed\|Unauthorized" src --include="*.cs" | grep -i log ``` **Checklist:** - [ ] Login/logout logueados - [ ] Intentos fallidos de autenticaci├│n logueados - [ ] Accesos denegados logueados - [ ] Cambios de datos sensibles logueados - [ ] Logs no contienen datos sensibles (passwords, tokens) - [ ] Alertas configuradas para eventos cr├¡ticos - [ ] **Estado A09:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple ### A10: Server-Side Request Forgery (SSRF) ```bash # URLs din├ímicas grep -rn "HttpClient\|WebClient\|WebRequest" src --include="*.cs" -A 5 | grep -i "url\|uri" # Verificar validaci├│n de URLs grep -rn "Uri.IsWellFormedUriString\|new Uri" src --include="*.cs" ``` **Checklist:** - [ ] URLs externas validadas contra whitelist - [ ] No permitir URLs a rangos internos (127.0.0.1, 10.x, 192.168.x) - [ ] Deshabilitar redirects autom├íticos si no son necesarios - [ ] Validar protocolo (solo https en producci├│n) ```csharp // Ô£à Validar URL antes de hacer request private bool IsAllowedUrl(string url) { var uri = new Uri(url); return AllowedHosts.Contains(uri.Host) && uri.Scheme == "https"; } ``` - [ ] **Estado A10:** Ô£à Cumple / ÔÜá´©Å Parcial / ÔØî No cumple --- ## Output Esperado ``` ====== PROC-45 COMPLETADO [TIMESTAMP] ====== Proyecto: [nombre] Versi├│n OWASP: Top 10 - 2021 RESUMEN: | # | Categor├¡a | Estado | Hallazgos | |---|-----------|--------|-----------| | A01 | Broken Access Control | Ô£à/ÔÜá´©Å/ÔØî | X | | A02 | Cryptographic Failures | Ô£à/ÔÜá´©Å/ÔØî | X | | A03 | Injection | Ô£à/ÔÜá´©Å/ÔØî | X | | A04 | Insecure Design | Ô£à/ÔÜá´©Å/ÔØî | X | | A05 | Security Misconfiguration | Ô£à/ÔÜá´©Å/ÔØî | X | | A06 | Vulnerable Components | Ô£à/ÔÜá´©Å/ÔØî | X | | A07 | Auth Failures | Ô£à/ÔÜá´©Å/ÔØî | X | | A08 | Software Integrity | Ô£à/ÔÜá´©Å/ÔØî | X | | A09 | Logging Failures | Ô£à/ÔÜá´©Å/ÔØî | X | | A10 | SSRF | Ô£à/ÔÜá´©Å/ÔØî | X | CUMPLIMIENTO: X/10 categor├¡as HALLAZGOS CR├ìTICOS: 1. [A03] SQL Injection en OrderController.cs:45 2. [A07] Passwords sin pol├¡tica de complejidad HALLAZGOS WARNING: 1. [A05] Headers de seguridad faltantes 2. [A09] Login exitoso no se loguea RECOMENDACIONES: 1. [P0] Fix SQL Injection - ANTES DE RELEASE 2. [P1] Implementar pol├¡tica de passwords 3. [P2] A├▒adir headers de seguridad ``` --- ## Criterios de ├ëxito - [ ] 0 hallazgos cr├¡ticos sin remediar - [ ] >= 8/10 categor├¡as en Ô£à - [ ] A03 (Injection) y A07 (Auth) siempre Ô£à --- ## Alertas y Escalaci├│n | Severidad | Condici├│n | Acci├│n | |-----------|-----------|--------| | CRITICAL | SQL Injection detectado | Bloquear release, fix inmediato | | CRITICAL | Passwords en plaintext | Bloquear release | | WARNING | Headers faltantes | A├▒adir antes de release | | INFO | Logging incompleto | Planificar mejora | --- --- ## Output Estructurado (Nexus) Al finalizar, el agente DEBE generar un bloque JSON con el siguiente formato para que Nexus pueda procesarlo automaticamente: ```json { "result": "success", "summary": "Ejecucion de PROC-45 completada. [Descripcion breve de resultados]", "metrics": { "issues_found": 0, "issues_resolved": 0, "findings_total": 5, "findings_critical": 0, "custom": { "procedure_specific_metric": "value" } }, "backlog_items": [ { "title": "Titulo del item de seguimiento", "description": "Descripcion detallada si se requiere accion futura", "priority": "medium", "type": "improvement", "tags": ["proc-45"] } ], "next_steps": [ "Accion recomendada 1", "Accion recomendada 2" ], "warnings": [ "Advertencias encontradas durante la ejecucion" ] } ``` **Campos requeridos:** - `result`: `"success"` | `"partial"` | `"failed"` - `summary`: Resumen ejecutivo en 1-3 lineas **Metricas especificas de este procedure:** - vulnerabilities_checked, vulnerabilities_found, severity_distribution **Criterios de resultado:** - `success`: Procedimiento completado sin errores criticos - `partial`: Completado con algunos problemas menores o items pendientes - `failed`: Error critico o no se pudo completar ## Historial de Ejecuciones | Fecha | Proyecto | Cumplimiento | Cr├¡ticos | Resueltos | |-------|----------|--------------|----------|-----------| | | | | | |
H1
H2
H3
Bold
Italic
Code
Lista
Num
Task
Code Block
Link
Nexus Platform
Reconectando
Recuperando la conexion
Se ha interrumpido la conexion con el servidor. Estamos reconectando automaticamente.
Reconectando...
Manten esta pestana abierta, volvemos enseguida.
No hemos podido reconectar
El servidor puede estar reiniciandose o tu conexion a internet es inestable.
Reintentar
La sesion ha expirado
Recarga la pagina para iniciar una nueva sesion.
Recargar
Si no vuelve en 30 segundos, recarga la pagina.