ORSYON ← Comunidad
Artículo De la comunidad

SYNAPTIC Sentinel v0.3.22: cuando el veredicto de seguridad cambia de proveedor

Análisis de SYNAPTIC Sentinel v0.3.22, el auditor de seguridad Open Source para código asistido por IA de GoLab: cómo hace visible y auditable la varianza de veredictos entre proveedores de LLM, con datos reales de un scan de 44 hallazgos.

OR
Orsyon — Equipo Orsyon
2026-07-14

SYNAPTIC Sentinel v0.3.22: cuando el veredicto de seguridad cambia de proveedor

Ejecutas un triaje de seguridad con un modelo de IA. Te dice: "falso positivo, confianza 95%". Cambias de proveedor, vuelves a lanzarlo, y ahora el mismo hallazgo aparece como "no concluyente, confianza 40%". ¿A cuál le crees? Peor todavía: si nadie te avisa de que la respuesta cambió, te quedas con la última que viste y sigues adelante.

Esa es exactamente la incomodidad que ataca la versión 0.3.22 de SYNAPTIC Sentinel, la herramienta Open Source (Apache-2.0) de auditoría de seguridad para código asistido por IA que GoLab mantiene en el Marketplace de VS Code. Las capturas de este artículo salen de un workspace real, SYNAPTIC_SAAS, con datos reales sobre un scan de 44 hallazgos. No hay mockups.

El scan: 44 hallazgos y de dónde salen

Un escaneo de Sentinel arranca por la capa determinista: cinco scouts corriendo en paralelo sobre el repositorio. En este caso, OpenGrep encuentra 1 hallazgo, Gitleaks 2, Trivy 45, Checkov 0 y Vibe-Detect 0. Tras la deduplicación y las supresiones conocidas quedan 44 hallazgos para triar, que el sidebar desglosa por estado: 33 true positive, 10 inconclusive, 1 false positive.

La línea que importa en v0.3.22 es la de arriba: Scan diff vs previous triage: 1 new, 9 re-classified (0 class, 9 confidence, 0 provider), 34 unchanged. Sentinel ya no se limita a decirte qué encontró: te dice qué cambió respecto del triaje anterior y por qué. De las 9 reclasificaciones, las 9 fueron por variación de confianza, ninguna por cambio de clase ni de proveedor. Antes, esos 9 hallazgos habrían contado como "sin cambios" pese a que su confianza se había movido. Ahora el resumen refleja lo que realmente pasó.

Panel de SYNAPTIC Sentinel con 44 hallazgos desglosados en 33 true positive, 10 inconclusive y 1 false positive, junto al terminal con el desglose por scout
El scan de SYNAPTIC_SAAS: 44 hallazgos (33 TP / 10 INC / 1 FP), el desglose por scout en el terminal y la línea Scan diff vs previous triage que resume qué se reclasificó y por qué.

Cuando el veredicto cambia entre proveedores

Este es el corazón de la versión. Mira el hallazgo de @grpc/grpc-js 1.14.3, vulnerable a CVE-2026-48068. Está marcado como no concluyente, y sobre la tarjeta aparece un banner naranja: Verdict changed since last scan: inconclusive 0% a inconclusive 40%, con la razón Confidence changed significantly (Δ 0.40).

El banner salta solo cuando el veredicto actual difiere del anterior. La razón sigue una precedencia clara: primero mira si cambió el proveedor, luego la clase (TP/FP/INC), luego la confianza, con un umbral configurable que por defecto es 0.15. Es un aviso barato de calcular y difícil de ignorar. Antes, esa varianza entre proveedores era invisible: cambiabas de modelo, el número se movía por debajo y nadie te lo decía.

Banner naranja 'Verdict changed since last scan' sobre un hallazgo no concluyente, con el historial de veredictos previos
El banner Verdict changed since last scan sobre un hallazgo no concluyente. Debajo, el historial: DeepSeek v4-pro devolvió 0% (respuesta no parseable), v4-flash había dado 90% y antes 60%. La misma vulnerabilidad, cuatro veredictos distintos según el modelo y el momento.

La memoria de la colonia y el historial Previously

Cada hallazgo guarda su trayectoria completa. La sección Previously es colapsable, y al abrirla ves todos los veredictos anteriores con su timestamp, su proveedor y su racional. Eso vive en la tabla verdict_history de colony.db, la base SQLite local que Sentinel mantiene en el directorio .sentinel/ del propio repo. Es append-only por diseño: el comando de re-triaje no borra el historial. Cambias de proveedor, vuelves una semana después, y la trayectoria completa sigue a un clic de distancia.

Esa misma memoria acelera los escaneos. Cuando un patrón se ha visto antes con evidencia sólida, Sentinel lo preclasifica sin gastar una llamada al LLM. En la captura, el hallazgo de protobufjs (CVE-2026-41242) sale marcado como true positive al 75% porque el patrón SCA:CVE-2026-41242 ya fue true positive en 3 hallazgos previos. Y cuando varios hallazgos comparten la misma raíz, uno actúa de representante (badge GROUPED REP) y hace la llamada real; los demás son miembros (badge GROUPED) que heredan el veredicto con una rebaja de confianza del 0.9x. Así el representante queda al 75% y el miembro al 68%, con el sufijo [group SCA:protobufjs@7.5.4:CVE-2026-41242, member 2 of 2] en el racional para que la propagación sea auditable. Alta confianza en el grupo, media en cada miembro suelto: honestidad epistémica en vez de un número inflado.

Hallazgo representante de grupo preclasificado por la memoria de colonia con la sección Previously expandida mostrando veredictos previos
Un representante de grupo (GROUPED REP) preclasificado por la memoria de colonia, con la sección Previously expandida mostrando cuatro veredictos previos. Debajo, el miembro del grupo hereda el veredicto con la confianza rebajada de 75% a 68%.

Agrupar para no quemar tokens, y un proveedor por agente

La agrupación no es solo higiene visual: ahorra dinero. En esta sesión, Grouping: 12 group(s) covering 24 findings; 20 solitary. LLM calls saved by grouping: 12. Doce llamadas al modelo que no se hicieron porque el veredicto se propagó dentro del grupo.

Sentinel además deja elegir un proveedor distinto por agente. En el agents.yaml de esta sesión: triage=OpenAiCompatible, context=Anthropic, remediation=Anthropic. La idea es mezclar por coste, calidad y privacidad, con las llaves siempre bajo modelo BYOK (Bring Your Own Key), leídas del entorno y nunca escritas en el repo.

Y aquí viene el detalle que más me gusta: cuando algo falla, Sentinel lo enseña. En el terminal se ven los 404 de los agentes de contexto y remediación porque el modelo configurado (deepseek-v4-pro) no existía bajo el proveedor apuntado. En lugar de tragarse el error y devolver un veredicto vacío como si nada, la herramienta lo escupe a la vista. Un fallo de configuración se vuelve visible en vez de silencioso, que es justo lo que quieres en una herramienta de seguridad.

Re-triaje mostrando 12 grupos que cubren 24 hallazgos y ahorran 12 llamadas al LLM, con errores 404 visibles en el terminal
El re-triaje: 12 grupos cubren 24 hallazgos y ahorran 12 llamadas al LLM. En el terminal, la configuración de proveedores por agente y los errores 404 mostrados sin maquillaje cuando un modelo está mal apuntado.

Remediación honesta: cuando el bump no basta

Un aviso de "actualiza la dependencia" es fácil de dar y muchas veces está mal. Sentinel agrupa las remediaciones de SCA y, cuando la cosa no es tan simple, lo dice. En el caso de prismjs, el panel no se limita a "sube a 1.30.0": avisa Top-level bump alone will NOT fix this (npm) y entrega el override exacto que hay que aplicar, con botón de copiar, porque una dependencia transitiva está fijando una versión vulnerable anidada.

Panel de remediación advirtiendo que actualizar la dependencia de nivel superior no resuelve la vulnerabilidad, con el override exacto a aplicar
Cuando actualizar la versión de arriba no arregla el problema, Sentinel entrega el override concreto y avisa que el fix es heterogéneo entre tracks. Nada de recomendaciones que no funcionan en la práctica.

Lo mismo con protobufjs, que arrastra 22 hallazgos vía @google-cloud/firestore: el fix es heterogéneo entre major tracks, y subir a una sola versión puede dejar otros CVE abiertos, así que hay que aplicar los máximos por track. Es el tipo de matiz que un escáner que solo lista CVEs nunca te da.

Remediaciones de SCA agrupadas por paquete, con protobufjs concentrando 22 hallazgos
Las remediaciones de SCA agrupadas por paquete: protobufjs concentra 22 hallazgos que se resuelven juntos, con la advertencia de que el fix es heterogéneo entre tracks.

Falsos positivos que no vuelven

El taint analysis de Sentinel marca, por ejemplo, un sentinel-js-taint-sql-injection en src/api/routes/agent.ts:62: datos controlados por el usuario que fluyen a un sink SQL dentro de un string. Si tras revisarlo es un falso positivo, el quick fix Mark as false positive lo añade a fp_known en colony.db y deja de aparecer en escaneos posteriores. No se pierde del historial, simplemente deja de hacer ruido. Y como el patrón queda en la memoria de colonia, la próxima vez que aparezca uno igual se preclasifica solo, con la nota was false_positive in 3 prior findings.

Menú de acciones rápidas para marcar un hallazgo como falso positivo y caso de taint SAST clasificado por la memoria de colonia
El menú de acciones rápidas para marcar hallazgos como falso positivo, y un caso de taint SAST ya clasificado como FP por la memoria de colonia. Lo que confirmas una vez no te vuelve a interrumpir.

Para CI/CD y con el coste a la vista

Todo esto también corre fuera del editor. El comando synaptic-sentinel diff --json devuelve la reclasificación en JSON estructurado, con la razón y los deltas exactos de cada cambio, listo para alimentar un dashboard o para filtrar con jq en un pipeline. La bandera --fail-on convierte el scan en un gate por severidad. Y al final de cada sesión tienes el coste real: en el ejemplo, el agente de triaje con DeepSeek v4-pro consumió 0,0046 USD en 8 llamadas. Sabes lo que te costó el scan antes de que llegue la factura del proveedor. Los conteos de tokens son estimaciones (chars/4, con un margen del 15-20%) y aparecen marcados como tales, sin vender una precisión que no se tiene.

Por qué esto importa

La promesa de v0.3.22 es sencilla: la confianza en un veredicto de seguridad no debería evaporarse al cambiar de proveedor ni al pasar una semana. El banner de veredicto cambiado, el historial append-only en colony.db y el desglose de reclasificaciones convierten la varianza entre modelos en algo visible y auditable, en vez de un número que se mueve a tus espaldas. Súmale la agrupación que ahorra llamadas, la remediación que admite cuándo un bump no basta y los errores mostrados sin maquillaje, y tienes una herramienta que prefiere decirte la verdad incómoda antes que un resultado bonito.

Todo bajo Apache-2.0, sin tier premium y con BYOK sobre el proveedor que elijas. La v0.3.22 se distribuye como release en GitHub con su .vsix, y el código está abierto para que lo audites tú mismo.

La mirada de Orsyon

En Orsyon lo usamos en las entregas: cada desarrollo pasa por Sentinel antes de llegar al cliente, y el historial append-only de colony.db nos deja una evidencia auditable del triaje, no solo del escaneo. Si un hallazgo cambia de veredicto entre una entrega y la siguiente, el banner lo pone a la vista con su razón y su fecha. Para quien trabaja bajo el doble cumplimiento chileno (Ley 21.663 de ciberseguridad y Ley 21.719 de datos personales), esa trazabilidad es parte de la evidencia de control, no un extra.

Enlaces

Licencia: Apache-2.0. Parte de la familia SYNAPTIC de GoLab.

¿Tu operación necesita evidencia auditable, no solo escaneos?

En Orsyon diseñamos arquitecturas con seguridad y protección de datos por diseño, alineadas con la Ley 21.663 y la Ley 21.719.

Agendar diagnóstico
← Volver al blog
¿Tienes algo que aportar sobre esto?
Publicamos artículos firmados de la comunidad. Orsyon revisa cada envío y, si es atingente, lo publica en el blog con tu autoría.
Enviar mi artículo
Enlace copiado
Este artículo fue enviado por un miembro de la comunidad. Las opiniones y análisis expresados corresponden al autor y no reflejan necesariamente la posición de Orsyon Consulting SpA.
¿Querés escribir? Enviá tu artículo.