Внедрение команд
Что такое Внедрение команд?
Внедрение командАтака, при которой пользовательский ввод без фильтрации передаётся в системный шелл, и приложение выполняет команды, заданные злоумышленником.
Внедрение команд (OS command injection) возникает, когда приложение собирает системную команду путём конкатенации недоверенного ввода и передаёт результат в шелл. Метасимволы ;, &, |, $() или обратные кавычки позволяют злоумышленнику добавлять дополнительные команды, которые исполняются с привилегиями процесса приложения. Последствия включают произвольное чтение и запись файлов, перемещение по сети, обратные шеллы и полный захват сервера. Уязвимость входит в OWASP Top 10 в категории «Инъекции» (A03:2021) и каталогизирована как CWE-78.
Первопричина — интерпретатор метасимволов шелла, а не сам ввод, поэтому решающее различие проходит между вызовом шелла (system(), os.system, Runtime.exec("sh -c ..."), обратные кавычки) и прямым вызовом целевого бинарного файла с вектором аргументов (execve, subprocess.run([...], shell=False), ProcessBuilder). API, принимающие массив аргументов, передают каждый токен как литерал, поэтому метасимволы никогда не попадают в парсер. Родственный вариант — инъекция аргументов — злоупотребляет собственными флагами программы (например, подсовывая --output или -o ProxyCommand в git, curl или ssh), даже когда шелл вообще не вызывается.
На сетевых пограничных устройствах реальные последствия крайне серьёзны. CVE-2024-3400 (CVSS 10.0) — неаутентифицированное внедрение OS-команд в компоненте GlobalProtect в PAN-OS от Palo Alto Networks, эксплуатировавшееся как zero-day с апреля 2024 года актором, которого Volexity отслеживает как UTA0218, для установки обратных шеллов и кражи конфигураций межсетевого экрана. CVE-2024-21887 в Ivanti Connect Secure в связке с обходом аутентификации CVE-2023-46805 давала неаутентифицированное выполнение команд и подверглась массовой эксплуатации в начале 2024 года. Ошибка Shellshock 2014 года (CVE-2014-6271) позволяла злоумышленникам внедрять команды через подготовленные переменные окружения, разбираемые Bash, и была достижима через CGI, DHCP и SSH.
Меры защиты: полностью отказаться от шелла с помощью API, принимающих массив аргументов; применять строгие белые списки ожидаемых значений; отбрасывать опасные флаги и метасимволы; запускать сервисы под учётными записями с минимальными привилегиями внутри песочниц/контейнеров; и применять фильтрацию исходящего трафика, чтобы закрепившийся злоумышленник не мог связаться с внешним узлом.
flowchart TD
A[Ввод пользователя: hostname] --> B{Встроен в команду}
B -->|"os.system('ping ' + host)"| C[Шелл интерпретирует метасимволы]
C --> D["host = 127.0.0.1; cat /etc/shadow"]
D --> E[Команда злоумышленника исполняется от имени пользователя приложения]
E --> F[Обратный шелл / кража данных / захват]
B -->|"subprocess.run(['ping', host], shell=False)"| G[Аргумент передан как литеральный токен]
G --> H[Нет разбора шеллом - инъекция нейтрализована]
style F fill:#c0392b,color:#fff
style H fill:#27ae60,color:#fff● Примеры
- 01
Утилита ping, конкатенирующая параметр хоста, позволяет через 127.0.0.1; cat /etc/shadow раскрыть хеши паролей.
- 02
Эндпоинт обработки изображений, вызывающий ImageMagick, выполняет команду злоумышленника из подготовленного имени файла.
● Частые вопросы
Что такое Внедрение команд?
Атака, при которой пользовательский ввод без фильтрации передаётся в системный шелл, и приложение выполняет команды, заданные злоумышленником. Относится к категории Атаки и угрозы в кибербезопасности.
Что означает Внедрение команд?
Атака, при которой пользовательский ввод без фильтрации передаётся в системный шелл, и приложение выполняет команды, заданные злоумышленником.
Как защититься от Внедрение команд?
Защита от Внедрение команд обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Внедрение команд?
Распространённые альтернативные названия: Инъекция OS-команд, Shell injection.