Уязвимость в ПО промышленного контроллера CODESYS.
Резюме
В функциональности PLC_Task в 3S-Smart Software Solutions GmbH CODESYS Runtime 3.5.14.30 существует уязвимость, связанная с возможным использованием кода. Специально созданный сетевой запрос может вызвать удаленное выполнение кода. Злоумышленник может отправить вредоносный пакет, чтобы активировать эту уязвимость.
Протестированные версии
3S-Smart Software Solutions GmbH CODESYS Время выполнения 3.5.14.30
CVSSv3 оценка
9,9 - CVSS: 3,0 / AV: N / AC: L / PR: L / UI: N / S: C / C: H / I: H / A: H
Тип ошибки
CWE-345 - Недостаточная проверка подлинности данных
Подробности
Система исполнения SoftPLC CODESYS Control преобразует любое встроенное или компьютерное устройство в промышленный контроллер, соответствующий стандарту IEC 61131-3. Кроме того, эта система выполнения включает в себя важные дополнительные функции, чтобы ваш контроллер мог взаимодействовать с другими компонентами в среде автоматизации.
Код приложения для CODESYS компилируется в машинный код при отправке из программного обеспечения. Этот машинный код подвергается проверке CRC-32 только перед его выполнением в контексте двоичного кода codesys3 в отдельном потоке. Создав файл .app с соответствующим шеллкодом архитектуры, злоумышленник может удаленно выполнить код с возможностью загрузки проектов. Эта загрузка может происходить через SSH или порт Codesys 11740 с использованием проприетарного протокола. Чтобы пройти проверку CRC, необходимо создать файл .crc с CRC32 всего файла .app.
Эта уязвимость существует из-за отсутствия принудительной криптографической проверки загруженного двоичного объекта. Поскольку аутентификация может быть отключена для порта 11740, используемого для загрузки приложений PLC на устройство, требуется криптографическая подпись для проверки того, что двоичный файл поступает из доверенного источника. Без криптографической проверки, в случае, если устройство было настроено на блокировку всего прямого доступа к устройству, кроме требуемой логики приложения в соответствии со стандартами IEC 61131, произвольный код мог быть выполнен непосредственно на устройстве с привилегиями, связанными со временем выполнения Codesys.
Информация о сбое
──────────────────────────────────────────────────────────── code:arm:ARM ──── 0xb4387d6c push {r11, lr} 0xb4387d70 mov r11, sp 0xb4387d74 sub sp, sp, #0 → 0xb4387d78 b 0xb4387d78 0xb4387d7c andvs r0, r0, r0 0xb4387d80 mov lr, pc 0xb4387d84 mov pc, r4 0xb4387d88 ldrb r4, [sp, #8] 0xb4387d8c add sp, sp, #16 ───────────────────────────────────────────────────────────────── threads ──── * 26 Thread 21998.22060 "PLC_Task" 0xb4387d78 in ?? ()