
There is a path injection vulnerability in OpenPLC-v3, which arises from the program not performing any validity checks on the file path parameters passed in from the command line. Attackers can read any readable file by constructing malicious paths, posing a risk of information leakage.
Existe uma vulnerabilidade de injeção de caminho no OpenPLC-v3, que surge do programa não realizar nenhuma verificação de validade nos parâmetros de caminho de arquivo passados pela linha de comando. Atacantes podem ler qualquer arquivo legível construindo caminhos maliciosos, representando um risco de vazamento de informações.
Validação de Entrada Incorreta (Injeção de Caminho)
Divulgação de Informações (Leitura Arbitrária de Arquivos)
O programa binário compilado a partir de glue_generator.cpp contém uma vulnerabilidade de leitura arbitrária de arquivos causada por validação insuficiente dos caminhos de arquivo fornecidos pelo usuário.
Um atacante pode especificar um arquivo arbitrário como argumento de entrada (por exemplo, /etc/passwd) ao executar o programa. O aplicativo subsequentemente lê o arquivo linha por linha, analisa o conteúdo e imprime diretamente os dados analisados no console usando cout sem realizar nenhuma validação em:
Como resultado, atacantes podem ler qualquer arquivo acessível ao contexto de privilégio do processo em execução, levando à divulgação de informações sensíveis.
O atacante é capaz de executar o binário vulnerável.
A conta de usuário em execução tem permissão de leitura para o arquivo alvo.
A exploração bem-sucedida pode divulgar informações sensíveis do sistema, incluindo, mas não se limitando a:
Essas informações podem facilitar uma escalada de privilégios adicional ou movimento lateral.
Em glue_generator.cpp, o programa usa dois arrays de string, varName e varType, para processar e imprimir o conteúdo analisado do arquivo na linha de comando.
Durante a análise, o programa espera um formato de linha específico:
(<varType>,<varName>,
Especificamente:
( e a primeira , é atribuído a varType;, é atribuído a varName.Nenhuma validação é realizada no caminho do arquivo de origem ou na legitimidade dos dados analisados.
Passo 1: Criar um Arquivo de Teste
Crie um arquivo chamado test.txt com o seguinte conteúdo:
(aaaaaaaa,123,
Passo 2: Executar o Programa Vulnerável
Execute o seguinte comando:
./glue_generator ./test.txt whatever.cpp
O programa analisará o conteúdo e imprimirá os valores extraídos no console.
Passo 3: Leitura Arbitrária de Arquivos
Se um atacante puder modificar ou controlar um arquivo sensível (por exemplo /etc/passwd) para incluir dados que correspondam ao formato necessário:
(aaaaaaaa,123,
o programa vulnerável analisará e imprimirá o conteúdo correspondente do arquivo.
Para arquivos sensíveis, qualquer linha que corresponda ao seguinte padrão pode ser divulgada:
(<content1>,<content2>,
A quantidade de informações vazadas depende de:
A vulnerabilidade é causada por:
Falta de validação para caminhos de arquivo controlados pelo usuário.
Lógica de análise insegura aplicada a arquivos arbitrários.
Saída direta no console do conteúdo analisado sem verificações de autorização.
Ausência de restrições sobre locais de arquivo acessíveis.
Para mitigar a vulnerabilidade: