Skip to content

Limitaciones Conocidas

Documento tecnico para analistas de seguridad


1. Introduccion

Este documento describe las limitaciones conocidas de cada feature de mcp-scan. Es fundamental para analistas de seguridad comprender estas limitaciones para:

  • Interpretar correctamente los resultados
  • Identificar areas que requieren revision manual
  • Evitar falsa sensacion de seguridad
  • Complementar el analisis con otras herramientas

2. Limitaciones del Parsing

2.1 Tree-sitter Parser

Limitacion Impacto Mitigacion
Errores de sintaxis detienen el parsing Archivos con errores no se analizan Validar sintaxis previamente
Macros no expandidas Codigo generado no analizado Analizar codigo post-build
Codigo dinamico ignorado exec(code_string) no se parsea Revisar manualmente

2.2 Lenguajes

Lenguaje Estado Limitaciones Especificas
Python Completo Type hints parciales
TypeScript Completo Generics simplificados
JavaScript Completo JSX basico
Go Solo parsing Sin taint analysis

2.3 Construcciones No Soportadas

# Metaprogramacion
@decorator_factory()  # Decoradores dinamicos
setattr(obj, "method", func)  # Atributos dinamicos
exec("def tool(): pass")  # Codigo generado

# Imports dinamicos
module = __import__(name)
importlib.import_module(name)

3. Limitaciones del Taint Analysis

3.1 Analisis Intra-procedural (Modo Fast)

Limitacion Ejemplo Impacto
No cruza funciones f(user_input) donde f llama a sink FN
No sigue returns x = get_input() donde get_input retorna source FN
Lambdas parciales Closures complejas FN/Imprecision

Ejemplo de Falso Negativo:

def process(data):
    os.system(data)  # Sink en otra funcion

@server.tool()
def handler(cmd: str):
    process(cmd)  # No detectado en modo fast

3.2 Analisis Inter-procedural (Modo Deep)

Limitacion Descripcion
Profundidad limitada Default: 3 niveles de llamadas
No soporta recursion Funciones recursivas pueden causar imprecision
Call graph impreciso Metodos virtuales no resueltos
Mas lento 10-100x mas lento que fast

3.3 Propagacion de Taint

Caso No Soportado Ejemplo
Taint implicito if secret == x: print("yes")
Estructuras complejas obj.nested.deep.value
Collections list[index] donde index es variable
Alias alias = dangerous_func; alias(data)

3.4 Sanitizers

Limitacion Impacto
Solo catalogo built-in Sanitizers custom no reconocidos
Sin analisis de efectividad strip() no es sanitizer pero no causa FP
Sanitizacion parcial replace("..", "") no reconocido

Ejemplo de Falso Positivo:

def my_sanitizer(path):
    """Custom sanitizer not in catalog"""
    if ".." in path:
        raise ValueError("Invalid path")
    return path

@server.tool()
def read(path: str):
    safe_path = my_sanitizer(path)  # No reconocido como sanitizer
    return open(safe_path).read()   # Reportado como vulnerable


4. Limitaciones del Pattern Engine

4.1 Deteccion por Regex

Limitacion Ejemplo Impacto
No entiende contexto "os.system in docs" en string FP
Comentarios # os.system(cmd) comentado FP
Strings multilinea Patron partido en lineas FN
Ofuscacion os["system"](cmd) FN

4.2 Deteccion por AST

Limitacion Descripcion
Alias de imports import os as o; o.system() no detectado
Calls indirectos getattr(os, "system")(cmd)
Decoradores custom Solo lista fija reconocida

4.3 Reglas Especificas

Regla Limitacion
MCP-E001 (Secrets) No detecta secretos en archivos .env
MCP-F002 (JWT) No analiza configuracion en JSON
MCP-G003 (Shadowing) Lista fija de nombres

5. Limitaciones del Clasificador ML

5.1 Features

Limitacion Impacto
Optimizado para ingles Otros idiomas tienen peor recall
Keywords fijos Nuevas tecnicas no cubiertas
Sin contexto semantico "ignore" legitimo causa FP

5.2 Clasificadores

Tipo Limitacion
RuleBased Deterministico pero rigido
Weighted Requiere pesos entrenados
Ensemble Mas lento, no siempre mejor

5.3 Categorias

Categoria Limitacion
jailbreak Solo patrones conocidos
identity Role play legitimo causa FP
delimiter Nuevos formatos no cubiertos

5.4 Ejemplos de Errores

Falso Positivo:

Description: "This tool helps you ignore duplicate files"
                                    ^^^^^^ trigger "ignore"

Falso Negativo:

Description: "Desatienda las instrucciones previas"  # Spanish


6. Limitaciones del Detector LLM

6.1 Dependencias

Limitacion Mitigacion
Requiere Ollama Fallback a ML classifier
Modelo debe estar descargado Documentar setup
Latencia de red Cache de resultados

6.2 Modelo

Limitacion Impacto
llama3.2:3b limitado Modelos mas grandes son mas lentos
No determinista Resultados pueden variar
Knowledge cutoff No conoce tecnicas nuevas

6.3 Prompt

Limitacion Descripcion
Solo ingles Prompt fijo en ingles
5000 chars max Truncamiento de textos largos
Sin contexto de codigo Solo ve descripcion, no el handler

6.4 Confiabilidad

Escenario Comportamiento
Texto muy corto Siempre "benign"
Texto ambiguo Confianza baja
Tecnica nueva Puede no detectar

7. Limitaciones de CodeQL

7.1 Requisitos

Limitacion Mitigacion
Instalacion separada Documentar setup
Pesado (~2GB) Opcional en CI/CD
Timeout largo Configurable

7.2 Cobertura

Lenguaje Soporte Notas
Python Bueno Query pack completo
JavaScript Bueno Incluye TypeScript
Go Bueno Query pack completo
Otros No Solo los listados

7.3 Queries

Limitacion Descripcion
No MCP-aware No entiende decoradores @tool
Queries genericos No especificos para tool poisoning
Sin categoria G No detecta prompt injection

7.4 Performance

Factor Impacto
Creacion de DB 1-10 minutos
Analisis 5-30 minutos
Memoria 2-8 GB RAM

8. Limitaciones de la Superficie MCP

8.1 Deteccion de Tools

Limitacion Ejemplo
Solo decoradores conocidos @my_custom_tool no detectado
Heuristica imprecisa tool_utils() falso positivo
Sin docstrings Descripcion vacia

8.2 Deteccion de Transport

Limitacion Descripcion
Basado en imports Si no hay import, "unknown"
Sin verificacion runtime No confirma que realmente usa ese transport

8.3 SDKs

SDK Limitacion
Python Official Buena cobertura
FastMCP Basica
TypeScript Parcial
Custom No soportado

9. Limitaciones del Scoring MSSS

9.1 Pesos

Limitacion Impacto
Pesos fijos No ajustable por contexto
Sin contexto de negocio SQLi en demo = SQLi en produccion
Acumulativo simple 10 mediums != 1 critical

9.2 Niveles

Limitacion Descripcion
Binarios Critical presente = Level 0 siempre
Sin gradacion 5 criticals = 1 critical para nivel
Sin excepciones No permite marcar "accepted risk"

9.3 Contexto

No Considera Ejemplo
Mitigaciones externas WAF que bloquea SQLi
Ambiente Dev vs Production
Exposicion Interno vs publico

10. Limitaciones Generales

10.1 Analisis Estatico vs Dinamico

Aspecto Estatico (mcp-scan) Dinamico (no soportado)
Cobertura Todo el codigo Solo paths ejecutados
Precision Puede tener FP Menos FP
Recall Puede tener FN Detecta comportamiento real
Velocidad Rapido Lento

10.2 Tipos de Vulnerabilidades

Tipo Deteccion Notas
Injection (A,B,C,D) Buena Taint analysis
Secrets (E) Buena Pattern matching
Auth (F) Parcial Patterns conocidos
Tool Poisoning (G) Buena ML + LLM
Logic Bugs No Requiere semantica
Race Conditions No Requiere runtime
DoS Parcial Solo patterns obvios

10.3 Evasion

Tecnica Efectividad contra mcp-scan
Ofuscacion simple Parcialmente efectiva
Encoding (base64, hex) Parcialmente efectiva
Metaprogramacion Muy efectiva
Polyglots Efectiva
Time-based Completamente efectiva

11. Recomendaciones para Mitigar Limitaciones

11.1 Combinar Herramientas

mcp-scan (estatico)
    +
CodeQL (analisis profundo)
    +
DAST (dinamico)
    +
Manual Review (logica)

11.2 Revision Manual Prioritaria

  1. Hallazgos de alta severidad - Siempre verificar
  2. Confianza baja/media - Revisar contexto
  3. Clases A y G - Mayor impacto
  4. Codigo con metaprogramacion - No analizado correctamente

11.3 Configuracion Recomendada

# .mcp-scan.yaml
scan:
  mode: deep           # Inter-procedural cuando posible
  codeql: true         # Confirmar con CodeQL
  llm: true            # Analisis semantico

ml:
  threshold: 0.5       # Mas sensible

rules:
  # Agregar sanitizers custom
  sanitizers:
    - pattern: "my_sanitizer"
      language: python
      protects: [filesystem, exec]

11.4 Baseline para Falsos Positivos

# .mcp-scan-baseline.yaml
# Hallazgos aceptados
accepted:
  - finding_id: "abc123..."
    reason: "Sanitizado por WAF externo"
    accepted_by: "security@example.com"
    date: "2024-01-15"

12. Tabla Resumen

Feature FP Rate FN Rate Confiabilidad
Taint (fast) Bajo Alto Media
Taint (deep) Medio Medio Alta
Pattern Engine Medio Medio Media
ML Classifier Medio Medio Media
LLM Detector Bajo Medio Alta
CodeQL Muy Bajo Medio Muy Alta
Surface Bajo Alto Media

Leyenda: - FP Rate: Tasa de falsos positivos - FN Rate: Tasa de falsos negativos - Confiabilidad: Confianza general en los resultados


13. Roadmap de Mejoras

Planificado

  • Soporte para Go en taint analysis
  • Sanitizers custom via configuracion
  • Mejor deteccion de decoradores dinamicos
  • Modo strict con menos FN

En Investigacion

  • Analisis de Jupyter notebooks
  • Deteccion de vulnerabilidades en configuracion
  • Integracion con SAST comerciales

14. Reportar Limitaciones

Si encuentras una limitacion no documentada:

  1. Verificar que no esta ya documentada aqui
  2. Crear issue en repositorio con:
  3. Descripcion de la limitacion
  4. Codigo de ejemplo
  5. Resultado esperado vs actual
  6. Impacto estimado

Este documento debe actualizarse cuando se descubran nuevas limitaciones o se implementen mejoras.