Volver a la wiki

Incidente: Auditoría Suprema network SA5 — Broken Access Control, XSS, inyección cerrados

Resumen

Quinta y última auditoría del dominio network (SA5: Port connections / Cable report). Se confirmaron 18 hallazgos (3 ALTA, 6 MEDIA, 9 BAJA) en los endpoints y servicios de gestión de conexiones de puertos y generación de informes de cableado.

Hallazgos críticos cerrados:

  1. Broken Access Control sistémico: NINGÚN endpoint usaba require_perm → un usuario readonly podía crear/borrar cableado y descargar el mapa de topología completo. Ahora 11 endpoints gateados.
  2. XSS almacenado en Cable Report HTML: nombres de rack interpolados crudos en diagrama Mermaid con securityLevel:'loose'. Sanado: securityLevel:'strict' + escapado de labels.
  3. Inyección de header y markdown: Content-Disposition malformable desde scope_name; pipes en tablas podían romper/inyectar filas. Sanado con whitelist y escapado.
  4. Duplicación de código (Regla 2): funciones _port_label y _get_ports replicadas en API y service. Extraída a nuevo módulo port_labels.py.

Hallazgos confirmados (18 total)

ALTA (3)

TítuloDimensiónArchivoLíneaPropuestaEffort
Broken Access Control en mutaciones port_connectionsSecuritynetwork/api/port_connections.py324, 468, 540Requerir require_perm(network, edit) en create_connection, create_device_connection, delete_connectionM
Broken Access Control en lecturas de topología y cable reportSecuritynetwork/api/port_connections.py, network/api/cable_report.pymúltiplesRequerir require_perm(network, view) en 6 endpoints de lectura/reportM
XSS almacenado en Cable Report HTMLSecuritynetwork/services/cable_report.py396, 418, 425, 459securityLevel:'strict' en Mermaid + sanitizar nombres de rack/location en labels + escapar bloque mermaid en _md_to_htmlM

MEDIA (6)

TítuloDimensiónArchivoLíneaPropuestaEffort
Header Injection en Content-DispositionSecuritynetwork/api/cable_report.py37Whitelist de chars en scope_name para filenameS
Markdown Injection en tablas del reportSecuritynetwork/services/cable_report.pyformato celdasEscapar | y \n en valores de tablaS
ReDoS en regex de parseo SNMP/SSHPerformancenetwork/services/port_suggestion.py, ssh_reader.pymúltiplesRevisar backtracking en PORT_PATTERNS y regex de parseo Cisco/JuniperM
SSRF en PortConfigReader (defensa en profundidad)Securitynetwork/services/port_config_reader/reader.py30Validar is_private_ip dentro del reader, no confiar ciegamente en callerM
200-con-fallo en read_autoCorrectnessnetwork/services/port_config_reader/reader.py63, 95Distinguir exito real vs. “error al leer” en respuesta (Regla 15)S
datetime.now() naive en cable_reportCorrectnessnetwork/services/cable_report.py238Usar timezone.localtime() (Regla 25)S

BAJA (9)

Rectificaciones implementadas

Security (merged en commit 14e9074):

Code Quality:

Sin migraciones requeridas.

Datos de auditoría

Cierre del dominio network

Con esta auditoría el módulo network queda 100% auditado y rectificado (SA1-SA5):

Véase también

Subir