
Prova de conceito de exploit para CVE-2023-1177, uma vulnerabilidade de path traversal no MLflow, demonstrando acesso não autorizado a arquivos por meio de nomes de modelos manipulados.
O MLflow é uma plataforma de código aberto para gerenciar o ciclo de vida completo do aprendizado de máquina.
Funções principais:
O MLflow aborda quatro funções principais:
Rastrear experimentos para registrar e comparar parâmetros e resultados (MLflow Tracking).
Empacotar código de ML em uma forma reutilizável e reproduzível, a fim de compartilhar com outros cientistas de dados ou transferir para produção (MLflow Projects).
Gerenciar e implantar modelos de uma variedade de bibliotecas de ML em uma variedade de plataformas de serviço e inferência de modelos (MLflow Models).
Fornecer um repositório central de modelos para gerenciar colaborativamente o ciclo de vida completo de um Modelo MLflow, incluindo versionamento de modelos, transições de estágio e anotações (MLflow Model Registry).
Independente de biblioteca: O MLflow é independente de biblioteca, o que significa que pode ser usado com qualquer biblioteca de aprendizado de máquina e em qualquer linguagem de programação, pois todas as funções são acessíveis por meio de uma API REST e CLI.
API: O projeto inclui uma API Python, API R e API Java para conveniência.
Fonte: https://mlflow.org/docs/latest/index.html
Uma vulnerabilidade de path traversal foi encontrada no MLflow. Path traversal é um tipo de vulnerabilidade web que permite a um atacante acessar arquivos e diretórios armazenados fora do diretório pretendido. Os atacantes usam várias técnicas para explorar essa vulnerabilidade e obter acesso não autorizado a dados sensíveis ou executar código arbitrário. Ataques de path traversal podem ser prevenidos por validação de entrada e medidas de controle de acesso.
A vulnerabilidade foi descoberta por Dan McInerney.
[CVE-2023-1177]
Path Traversal: '..\filename' no repositório GitHub mlflow/mlflow anterior à versão 2.2.1.
Criei um pequeno script em Python que pode ser usado para testar e explorar a vulnerabilidade.
Ele criará um ID único para o nome do modelo e depois acessará todas as URLs em ordem consecutiva.
