Cyber Security
May 18, 2020

Уязвимость в ПО промышленного контроллера 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 ?? ()