CWE-78: Некорректная нейтрализация специальных элементов, используемых в команде OS (‘Инъекция Команды OS’)

Характеристика уязвимости

Распространенность уязвимости Средняя Последствия Выполнение кода
Стоимость восстановления Средняя Простота обнаружения Просто
Частота атаки Часто Осведомлённость атакующего Высокая

 

Ваше программное обеспечение часто может послужить мостом между аутсайдером сети и внутренним содержимым вашей операционной системы. При установке новой программы в операционной системе и разрешении вводить недоверенные входные данные в командную строку, созданную для выполнения этой программы, вы приглашаете злоумышленников пересечь мост в Эльдорадо, выполняя их команды вместо ваших.

ПО строит всю или часть OS-команды, используя входные данные извне от восходящего компонента, но не нейтрализует (или делает это некорректно) специальные элементы, способные изменять заданные OS-команды при их пересылке нисходящему компоненту.

Это дает возможность злоумышленнику выполнять непредсказуемые опасные команды напрямую в операционной системе. Эта может привести к уязвимости в средах, в которых злоумышленник не имеет прямого доступа к операционной системе, например, веб-приложениях. С другой стороны, при возникновении уязвимости в привилегированной программе, у злоумышленника появляется возможность задавать команды, к которым он не смог бы получить доступ, или вызывать альтернативные команды с привилегиями, которых злоумышленник не имеет. Проблема осложняется, если зараженный процесс не организован в соответствии с принципом минимально необходимых привилегий, поскольку контролируемые злоумышленником команды могут выполняться со специальными системными привилегиями, что увеличивает размер ущерба.

Можно выделить как минимум две подгруппы инъекции OS-команд:

  1. Приложение намеревается выполнить отдельную жесткую программу под своим контролем. В качестве аргументов программы используются входные данные, поступающие извне.
  2. Приложение при выборе запускаемой программы или используемой команды полностью опирается на входные данные. Приложение просто перенаправляет всю эту команду к операционной системе.

С точки зрения уязвимостей, эти варианты описывают явные ошибки программистов. В первом варианте программист четко определяет, что входные данные от недоверенной стороны будут являться частью аргументов в выполняемой команде. Во втором варианте программист не задает доступ к команде недоверенной стороной, но возможно не принимает во внимание альтернативные пути, которыми злоумышленник может воспользоваться для ввода данных.

Возможность возникновения ошибки:

  • При проектировании и разработке структуры ПО
  • При внедрении

Используемые платформы:

Языки – все

Вероятность возникновения: высокая

Общие последствия:

выполнениене авторизованного кода или команд; отказ обслуживания: выход из строя / выход из системы / перезагрузка; чтение файлов или директориев; изменение файлов или директориев; чтение данных приложений; изменение данных приложений; скрытие деятельности

Злоумышленники могут выполнять неавторизованные команды, которые могут блокировать ПО или считывать или изменять данные, к которым у злоумышленника нет разрешенного доступа напрямую. Поскольку команды выполняет целевое приложение, злоумышленная деятельность может исходить от приложений или их владельца.

 

Методы обнаружения

Автоматический статический анализ

Эта уязвимость зачастую может обнаруживаться инструментами автоматического статического анализа. Многие из них используют анализ потока данных или методики на основе ограничений для минимизации числа ложных срабатываний

Автоматический статический анализ не всегда может распознать корректную проверку вводимых значений, что приводит к ложным срабатываниям – например, выдаче сообщений тревоги без реальной угрозы безопасности или без необходимости изменения кода.

Автоматический статический анализ также не всегда способен распознать использование пользовательских функций готовых интерфейсовили сторонних библиотек, которые не напрямую вызывают ОS-команды, что приводит к ложным срабатываниям, особенно если код библиотеки или стороннего приложения недоступен для анализа.

Это не идеальное решение, поскольку 100% достоверность и охват на практике недостижимы.

 

Автоматический динамический анализ

Данная уязвимость также может быть обнаружена инструментами автоматического динамического анализа, которые взаимодействуют с ПО через большие пакеты тестовых программ с большим количеством разнообразных входных данных, например, подготовкой входных данных определенного вида, тестированием надежности и вводом ошибок. Это может замедлить выполнение ПО, но не должно привести к его неустойчивости, выходу из строя или генерации неправильных результатов.

Данный метод имеет среднюю эффективность.

 

Ручной анализ

Поскольку данная уязвимость не часто встречается в отдельном комплекте ПО, тестирование вручную методом стеклянного ящика (логики работы программы и корректности её работы) способно обеспечить достаточный охват кода и снижение числа ложных срабатываний, если все потенциально уязвимые операции могут быть оценены в ограниченных временных рамках.

Эффективность способа – высокая.