
Existe una vulnerabilidad de inyección de rutas en OpenPLC-v3, que surge del hecho de que el programa no realiza comprobaciones de validez sobre los parámetros de ruta de archivo pasados desde la línea de comandos. Los atacantes pueden leer cualquier archivo legible mediante la construcción de rutas maliciosas, lo que supone un riesgo de fuga de información.
Existe una vulnerabilidad de inyección de rutas en OpenPLC-v3, que surge de que el programa no realiza ninguna comprobación de validez sobre los parámetros de ruta de archivo pasados desde la línea de comandos. Los atacantes pueden leer cualquier archivo legible mediante la construcción de rutas maliciosas, lo que supone un riesgo de fuga de información.
Validación Incorrecta de Entrada (Inyección de Ruta)
Divulgación de Información (Lectura Arbitraria de Archivos)
El programa binario compilado a partir de glue_generator.cpp contiene una vulnerabilidad de lectura arbitraria de archivos causada por una validación insuficiente de las rutas de archivo proporcionadas por el usuario.
Un atacante puede especificar un archivo arbitrario como argumento de entrada (por ejemplo, /etc/passwd) al ejecutar el programa. La aplicación posteriormente lee el archivo línea por línea, analiza el contenido e imprime directamente los datos analizados en la consola usando cout sin realizar ninguna validación sobre:
Como resultado, los atacantes pueden leer cualquier archivo accesible en el contexto de privilegios del proceso en ejecución, lo que conduce a la divulgación de información sensible.
1.El atacante puede ejecutar el binario vulnerable.
2.La cuenta de usuario en ejecución tiene permiso de lectura sobre el archivo objetivo.
Una explotación exitosa puede divulgar información sensible del sistema, incluyendo, entre otros:
Esta información puede facilitar una mayor escalada de privilegios o movimiento lateral.
En glue_generator.cpp, el programa utiliza dos arreglos de cadenas, varName y varType, para procesar e imprimir el contenido de los archivos analizados en la línea de comandos.
Durante el análisis, el programa espera un formato de línea específico:
(<varType>,<varName>,
Específicamente:
( y la primera , se asigna a varType;, se asigna a varName.No se realiza ninguna validación sobre la ruta del archivo de origen ni sobre la legitimidad de los datos analizados.
Paso 1: Crear un Archivo de Prueba
Cree un archivo llamado test.txt con el siguiente contenido:
(aaaaaaaa,123,
Paso 2: Ejecutar el Programa Vulnerable
Ejecute el siguiente comando:
./glue_generator ./test.txt whatever.cpp
El programa analizará el contenido e imprimirá los valores extraídos en la consola.
Paso 3: Lectura Arbitraria de Archivos
Si un atacante puede modificar o controlar un archivo sensible (por ejemplo, /etc/passwd) para que incluya datos que coincidan con el formato requerido:
(aaaaaaaa,123,
el programa vulnerable analizará e imprimirá el contenido correspondiente del archivo.
Para archivos sensibles, cualquier línea que coincida con el siguiente patrón puede ser divulgada:
(<content1>,<content2>,
La cantidad de información filtrada depende de:
La vulnerabilidad es causada por:
1.Falta de validación de las rutas de archivo controladas por el usuario.
2.Lógica de análisis insegura aplicada a archivos arbitrarios.
3.Salida directa a consola del contenido analizado sin comprobaciones de autorización.
4.Ausencia de restricciones sobre las ubicaciones de archivos accesibles.
Para mitigar la vulnerabilidad: