🛡 Защищаем свои ресурсы. Часть 4: Command Injection

Всем привет 🤗 Продолжаем образовательную рубрику и сегодня поговорим об уязвимости Command Injection.

Если совсем просто - это ситуация, когда пользователь может заставить сервер выполнить команду операционной системы.

И самое интересное в том, что сервер берет и делает😂.

Что такое Command Injection

Command Injection - это ошибка, при которой приложение передаёт данные пользователя напрямую в системную команду.

То есть: приложение хотело выполнить «безопасную» операцию, а в итоге выполняет то, что подставил пользователь. Как это выглядит в реальной жизни

Допустим, есть функция проверки остатков товара:

/stockStatus?productID=381&storeID=29

Под капотом сервер вызывает системную команду, чтобы получить отчёт.

Если данные из запроса никак не проверяются, злоумышленник может дописать к параметру свою команду.

И сервер выполнит её так же честно, как и «нормальный» запрос.

Что может сделать злоумышленник

Через Command Injection можно:

• узнать, под каким пользователем работает сервер • читать и записывать файлы • отправлять запросы во внешний интернет • получать данные из системы • в ряде случаев - полностью захватить сервер

Причём иногда без «явных» признаков атаки.

Blind Command Injection - когда всё происходит «вслепую»

Иногда сервер не показывает результат выполнения команды.

Но это не значит, что уязвимости нет.

Примеры того, как её всё равно находят: • команда выполняется дольше обычного → сервер «задумался» • вывод команды записывается в файл, который потом можно открыть • сервер делает внешний запрос - и мы его видим

То есть: ответа нет, а эффект - есть.

Где чаще всего возникает Command Injection

Любое место, где приложение:

• вызывает системные утилиты • обрабатывает файлы через shell • работает с почтой, архивами, изображениями • передаёт параметры в системные скрипты

Если данные пользователя попадают в системную команду - это зона повышенного риска.

Почему это всё ещё встречается

• «быстрое» решение через системную команду • доверие входным данным • отсутствие строгой валидации • устаревший или унаследованный код • логика «у нас этим никто не воспользуется»

Как защищаются от Command Injection

Самый надёжный способ:

❌ вообще не вызывать команды операционной системы из пользовательского кода

Если без этого никак, обязательно:

• использовать белый список допустимых значений • проверять, что данные - это число, а не строка • разрешать только буквенно-цифровые символы • исключать спецсимволы и пробелы • никогда не передавать ввод пользователя напрямую в shell

❗️Важно: никакая фильтрация «по символам» не заменит правильную архитектуру.

Вывод

Command Injection - одна из самых опасных уязвимостей.

Не потому, что она сложная, а потому, что она даёт прямой доступ к серверу.

Если приложение выполняет системные команды и доверяет вводу пользователя - это всегда риск полного компромисса.

Такие ошибки редко выглядят критично на первый взгляд, но именно они часто приводят к самым серьёзным инцидентам.

Продолжение следует 👉 Часть 5: Уязвимости в бизнес логике

🛡 Защищаем свои ресурсы. Часть 4: Command Injection
Всем привет 🤗
Продолжаем образовательную рубрику и сегодня поговорим об уязвимости Command Injection | Сетка — социальная сеть от hh.ru