Источник: https://github.com/AnaktaCTF/CTF/blob/main — WEB/OS_Injection.md
Суть уязвимости
Эта уязвимость позволяет злоумышленникам выполнять произвольные команды на сервере. Возникает когда, приложение использует входные данные и использует их в системных командах.
Примеры
Пусть приложение будет проверять доступность какого либо хоста. И это будет делать с помощью команды ping:
import os
hostname = input("Enter hostname")
os.system(f"ping {hostname}")
Если в поле hostname передать ; whoami;, то сервер вернет результат выполнения команды whoami
Последствия
- Полный контроль над системой
- Утечка данных
- Атака на другие системы
- DoS (Denial of Service)
Виды
- Basic Command Injection
Простое добавление операторов ' ; ' ' ?? ' или ' || ', для связи нескольких команд - Blind Command Injection
Результат не отображается, но его можно определить косвенно (задержки, ошибки и тп) - Out-of-Band Command Injection
Использование других каналов для отправки команд.
Методы борьбы
- Использование безопасных API
- Вместо выполнения команд через shell используйте API, которые предоставляют безопасные способы выполнения действий. Например, для Python используйте subprocess.run() с параметром shell=False
- Экранирование и валидация данных
- Использование списка разрешённых данных
- Если возможно, используйте белые списки значений, которые можно вводить, и разрешайте только проверенные и допустимые команды.
- Минимизация прав доступа
- Журналирование и мониторинг
- Изоляция и контейнеризация