
В OpenPLC-v3 существует уязвимость внедрения пути, которая возникает из-за того, что программа не выполняет никаких проверок допустимости параметров пути к файлу, передаваемых из командной строки. Злоумышленники могут читать любые доступные для чтения файлы, создавая вредоносные пути, что создаёт риск утечки информации.
В OpenPLC-v3 существует уязвимость внедрения пути, которая возникает из-за того, что программа не выполняет никаких проверок допустимости параметров пути к файлу, передаваемых из командной строки. Злоумышленники могут читать любые доступные для чтения файлы, конструируя вредоносные пути, что создает риск утечки информации.
Некорректная проверка вводимых данных (внедрение пути)
Раскрытие информации (произвольное чтение файлов)
Двоичная программа, скомпилированная из glue_generator.cpp, содержит уязвимость произвольного чтения файлов, вызванную недостаточной проверкой путей к файлам, предоставленных пользователем.
Злоумышленник может указать произвольный файл в качестве входного аргумента (например, /etc/passwd) при выполнении программы. Приложение затем читает файл построчно, разбирает содержимое и напрямую выводит разобранные данные на консоль с помощью cout, не выполняя никаких проверок на:
В результате злоумышленники могут читать любые файлы, доступные в контексте привилегий запущенного процесса, что приводит к раскрытию конфиденциальной информации.
Злоумышленник имеет возможность выполнить уязвимый бинарный файл.
Учетная запись пользователя, от которой запускается процесс, имеет право на чтение целевого файла.
Успешная эксплуатация может привести к раскрытию конфиденциальной системной информации, включая, но не ограничиваясь:
Эта информация может способствовать дальнейшему повышению привилегий или горизонтальному перемещению по сети.
В glue_generator.cpp программа использует два строковых массива, varName и varType, для обработки и вывода разобранного содержимого файла в командную строку.
При разборе программа ожидает определенный формат строки:
(<varType>,<varName>,
А именно:
содержимое между ( и первой , присваивается varType;
содержимое между первой и второй , присваивается varName.
Никакой проверки исходного пути к файлу или допустимости разобранных данных не выполняется.
Шаг 1. Создание тестового файла
Создайте файл с именем test.txt со следующим содержимым:
(aaaaaaaa,123,
Шаг 2. Выполнение уязвимой программы
Выполните следующую команду:
./glue_generator ./test.txt whatever.cpp
Программа разберет содержимое и выведет извлеченные значения на консоль.
Шаг 3. Произвольное чтение файла
Если злоумышленник может изменить или контролировать критически важный файл (например, /etc/passwd), чтобы включить в него данные, соответствующие требуемому формату:
(aaaaaaaa,123,
уязвимая программа разберет и выведет соответствующее содержимое из файла.
Для критически важных файлов любая строка, соответствующая следующему шаблону, может быть раскрыта:
(<content1>,<content2>,
Объем утечки информации зависит от:
Уязвимость вызвана:
Отсутствием проверки путей к файлам, контролируемых пользователем.
Небезопасной логикой разбора, применяемой к произвольным файлам.
Прямым выводом разобранного содержимого на консоль без проверок авторизации.
Отсутствием ограничений на доступные расположения файлов.
Для смягчения уязвимости: