11
Total hallazgos
4
Fallos críticos
5
Advertencias
2
Superan control
3
Acciones bloqueadas
1
Alcance Revisado — Qué se ha auditado
Producto / Versión
PredictFlow v2.0.0-rc1
OracleEdge SL — Fintech B2B
OracleEdge SL — Fintech B2B
Flujo revisado
Auth OAuth2 → Lectura cartera → Feeds de precio → Análisis → Auto-ejecución
Venues / Plataformas
Polymarket, Manifold Markets
Chainlink, OEdge-Oracle (privado)
Chainlink, OEdge-Oracle (privado)
Mercado de ejemplo
0xABC123¿FED sube tipos Q3 2026?
Liquidez: 48.200 USDC
Jurisdicción
España (ESMA/MiFID II)
Clientes en EE.UU. y México
Clientes en EE.UU. y México
Capacidad nueva auditada
Auto-ejecución si confianza >85%
Sin confirmación de usuario
Sin confirmación de usuario
2
Hallazgos Pasa / Avisa / Falla — 11 controles revisados
| Estado | Puerta de control | Hallazgo | Evidencia |
|---|---|---|---|
| FALLA | Seguridad de claves |
API key hardcodeada en configuración de producción
ITO_API_KEY aparece en texto plano en el archivo de config y se filtra a los logs de debug junto al saldo completo del usuario (125.000 USDC). Riesgo de exposición total de credenciales y datos financieros.
|
config/prod.env ITO_API_KEY=ito_prod_8f2a... logs: wallet_balance=125000 |
| FALLA | Límite de asesoramiento |
Ejecución automática sin punto de decisión humano
El flujo ejecuta órdenes reales (compra/venta de USDC) al superar el umbral de 85% de confianza sin solicitar confirmación explícita al usuario. Esto viola el límite de asesoramiento informativo y convierte al agente en un ejecutor financiero autónomo no supervisado.
|
step 5: auto_execute if confidence > 0.85: place_order(amount) |
| FALLA | Límite regulatorio |
Clientes en EE.UU. accediendo a Polymarket (venue bloqueado)
Polymarket tiene restricciones geográficas para usuarios de EE.UU. OracleEdge tiene clientes en Miami. El agente no verifica la jurisdicción del usuario antes de conectar. Posible violación de los ToS de Polymarket y exposición regulatoria bajo CFTC para operaciones en EE.UU.
|
Clientes: Miami, CDMX Polymarket: US-blocked Sin geo-check en auth |
| FALLA | Calidad de datos |
Fuentes públicas y privadas mezcladas sin etiquetado
El DataFrame de análisis combina datos de Polymarket (público) con OEdge-Oracle (privado/propietario) sin separar las fuentes ni marcar la procedencia de cada valor. Esto impide auditar la trazabilidad de las señales y puede exponer datos privados en artefactos públicos.
|
df = pd.concat([ public_df, private_df # sin label ]) |
| AVISO | Calidad de datos |
Precio del oráculo OEdge posiblemente obsoleto (4 horas)
La última actualización del oráculo privado fue hace 4 horas. Para un mercado de predicción activo con spread del 7%, operar con un precio stale puede resultar en señales erróneas y pérdidas. Se requiere umbral de antigüedad máxima (<30 min) antes de usar el precio.
|
oracle_ts: -4h 03m threshold: no definido spread: 0.07 USDC |
| AVISO | Calidad de datos |
Liquidez insuficiente para el tamaño de la operación propuesta
La operación propuesta (15.000 USDC) representa el 31% de la liquidez total del mercado (48.200 USDC). Órdenes de este tamaño moverán el precio significativamente (impacto de mercado), generando un resultado peor al previsto por el modelo.
|
market_liq: 48.200 USDC order_size: 15.000 USDC impact: ~31% |
| AVISO | Seguridad de claves |
Scopes de la wallet Metamask sin restringir a solo-lectura
La autenticación OAuth2 con Metamask solicita permisos de escritura por defecto. Para la fase de análisis informativo, solo se necesita lectura del saldo y posiciones. Los permisos de escritura deben requerir autorización adicional explícita del usuario en el momento de ejecutar.
|
scope: wallet_full_access required: wallet_read_only + explicit exec_approval |
| AVISO | Privacidad |
Saldo completo de cartera expuesto en logs de debug
Los logs registran el saldo completo del usuario (125.000 USDC) en claro. Se deben minimizar los datos financieros en logs, conservando solo los campos necesarios para el análisis (ej. porcentaje de posición, no valor absoluto). Riesgo de fuga de datos bajo RGPD.
|
DEBUG wallet_balance= 125000 USDC # PII |
| AVISO | Límite regulatorio |
Ambigüedad MiFID II: ¿señales de predicción = instrumento financiero?
Bajo MiFID II (España/ESMA), la provisión de señales automatizadas sobre derivados o instrumentos con subyacente macroeconómico puede requerir licencia de asesoramiento financiero. La activación de auto-ejecución incrementa significativamente esta exposición. Requiere revisión legal antes de producción.
|
Jurisdicción: ESMA/ES Producto: señales macro + ejecución automática |
| PASA | Calidad de datos |
Reglas de resolución del mercado Polymarket documentadas
El mercado 0xABC123 tiene reglas de resolución claras y verificables en la blockchain. El agente las consulta correctamente antes de generar señales. Control superado.
|
resolution_rules: on-chain verified: ✓ |
| PASA | Límite de asesoramiento |
Output del análisis claramente etiquetado como "informativo" en la UI
La interfaz de usuario muestra el aviso "Este análisis es informativo y no constituye asesoramiento financiero" en el panel de señales. La etiqueta es visible y no puede ser ocultada. Control superado.
|
ui_disclaimer: visible dismissable: false ✓ |
3
Acciones Bloqueadas — No ejecutar hasta mitigar
Auto-ejecución de órdenes en producción
Ningún flujo con capacidad de ejecución puede activarse sin: (a) eliminar la API key del código, (b) implementar confirmación explícita del usuario, y (c) añadir circuit breakers y spend limits. Requiere plan de implementación separado y aprobación explícita del equipo de seguridad.
Acceso de clientes en EE.UU. a venues de Polymarket
Bloquear completamente el acceso de cuentas geolocalizadas en EE.UU. al flujo de Polymarket hasta implementar verificación de jurisdicción. El incumplimiento de los ToS puede resultar en bans de cuenta y exposición regulatoria CFTC.
Publicación de artefactos de análisis con datos privados OEdge
No generar ni exportar informes, dashboards ni exports que mezclen datos de OEdge-Oracle con datos públicos de Polymarket sin etiquetado explícito de fuente y redacción de fuentes privadas en artefactos públicos.
4
Mitigaciones Requeridas — Ordenadas por prioridad
P1
Eliminar API keys del código — Usar variables de entorno + secrets manager
Rotar ITO_API_KEY inmediatamente (asumir comprometida). Mover todas las claves a un secrets manager (HashiCorp Vault, AWS Secrets Manager, o variables de entorno cifradas). Prohibir que las claves aparezcan en logs, variables de entorno de cliente o artefactos exportados.
# INCORRECTO (actual)
ITO_API_KEY = "ito_prod_8f2a..."
# CORRECTO
ITO_API_KEY = os.environ.get("ITO_API_KEY") # inyectado por secrets manager
logger.info("Oracle OK") # sin loggear la key ni datos de cartera
P1
Añadir confirmación explícita + circuit breaker antes de cualquier ejecución
La auto-ejecución debe requerir: (1) confirmación manual del usuario con resumen de la operación, (2) circuit breaker que pause si la pérdida supera el X% en sesión, (3) spend limit diario configurable, (4) dry-run mode activado por defecto en staging.
async def execute_order(signal, user):
await require_explicit_approval(user, signal) # bloquea hasta confirmar
if daily_spend(user) + signal.size > user.spend_limit:
raise SpendLimitExceeded()
if circuit_breaker.triggered:
raise CircuitBreakerOpen()
return await place_order_with_dry_run(signal) # dry_run=True por defecto
P1
Implementar geo-check de jurisdicción en el flujo de autenticación
Verificar la jurisdicción del usuario (IP + declaración en onboarding) antes de conectar a venues con restricciones geográficas. Bloquear acceso a Polymarket para cuentas en EE.UU. Mostrar mensaje claro de la restricción.
P1
Separar fuentes públicas y privadas en el pipeline de datos
Mantener DataFrames separados con columna de metadatos `source` (public/private) durante todo el pipeline. Solo combinar en el paso final de análisis, nunca para exportación. Redactar campos privados en todos los artefactos exportables.
P2
Implementar TTL para precios de oráculos — Umbral máximo de 30 minutos
Rechazar señales generadas con precios de oráculo con más de 30 minutos de antigüedad. Mostrar advertencia de "precio no actualizado" en la UI si el oráculo privado está stale. Para mercados con spread >5%, reducir el TTL a 15 minutos.
P2
Añadir límite de impacto de mercado — Máximo 5% de la liquidez disponible
Limitar el tamaño máximo de una operación al 5% de la liquidez total del mercado para minimizar el impacto de precio. Para el mercado de ejemplo (48.200 USDC), esto limita a ~2.410 USDC por operación, muy por debajo de los 15.000 USDC propuestos.
P3
Revisión legal MiFID II + obtener opinión sobre licencias necesarias
Consultar con abogado especializado en fintech (ESMA/MiFID II) si la provisión de señales automatizadas con capacidad de ejecución requiere licencia de asesoramiento de inversión en España. Documentar la opinión antes de activar la auto-ejecución en clientes finales.
5
Siguiente Paso Seguro — Hoja de ruta de activación
Despliegue seguro de PredictFlow v2 — 7 pasos ordenados
- 1Hoy: Rotar ITO_API_KEY (asumir comprometida por los logs). Limpiar logs históricos que contengan saldos de usuarios.
- 2Sprint 1 (crítico): Mover todas las API keys a secrets manager. Implementar geo-check en auth. Separar DataFrames público/privado.
- 3Sprint 1: Añadir TTL de 30 min para precios de oráculo. Implementar límite del 5% de impacto de mercado.
- 4Sprint 2: Implementar flujo de confirmación explícita de usuario, circuit breaker y spend limits. Activar dry-run mode en staging.
- 5Sprint 2: Reducir scopes de wallet a read-only. Redactar datos de cartera en logs (loggear solo porcentajes, no valores absolutos).
- 6Antes de producción: Obtener opinión legal MiFID II. Documentar plan de implementación de auto-ejecución para aprobación del equipo de seguridad.
- 7Producción: Lanzar PredictFlow v2 con auto-ejecución habilitada solo después de superar todos los controles anteriores y nueva revisión de seguridad.