Защита Learnify от локального включения файлов//Опубликовано 2026-04-25//CVE-2025-60085

КОМАНДА БЕЗОПАСНОСТИ WP-FIREWALL

Learnify LFI Vulnerability

Имя плагина Learnify
Тип уязвимости Включение локального файла
Номер CVE CVE-2025-60085
Срочность Высокий
Дата публикации CVE 2026-04-25
Исходный URL-адрес CVE-2025-60085

Критическая уязвимость локального включения файлов в теме Learnify (≤ 1.15.0) — Немедленные действия для владельцев сайтов на WordPress

2026-04-25 | Команда безопасности WP‑Firewall

Краткое содержание

В теме WordPress Learnify была раскрыта критическая уязвимость локального включения файлов (LFI), затрагивающая версии ≤ 1.15.0 (CVE-2025-60085). Проблема позволяет неаутентифицированным злоумышленникам включать и отображать локальные файлы с веб-сервера. Сообщенная уязвимость имеет высокую степень серьезности (CVSS 8.1) и может быть использована в масштабах — позволяя злоумышленникам утекать конфиденциальные файлы, такие как wp-config.php, файлы окружения или любой читаемый файл на стороне сервера. Это может привести к раскрытию учетных данных, компрометации базы данных и полному захвату сайта в зависимости от окружения.

Если вы используете Learnify или сайты, которые его используют, внимательно прочитайте этот пост. Мы объясняем, что означает уязвимость, как злоумышленники ее используют, как обнаружить признаки эксплуатации и рекомендуем пошаговый процесс смягчения и реагирования на инциденты. Мы также показываем практические правила WAF и рекомендации по укреплению сервера, чтобы немедленно уменьшить поверхность атаки.


Что такое локальное включение файлов (LFI)?

Локальное включение файлов (LFI) — это класс уязвимостей в веб-приложениях, который возникает, когда ввод, контролируемый пользователем, используется для выбора и включения файлов на сервере без надлежащей проверки. Например, на сайте на основе PHP это может выглядеть так:

  • include($_GET['template']);
  • require_once($_REQUEST['page']);

Если злоумышленник может контролировать ввод, который определяет, какой файл включается, он может указать приложению произвольные локальные файлы и заставить сервер читать и выводить их содержимое. Общие последствия:

  • Раскрытие секретов (учетные данные базы данных, ключи API).
  • Сбор информации для подготовки дальнейших атак.
  • В окружениях, которые позволяют опасные обертки (php://input, php://filter) или где включение удаленных файлов разрешено, может быть возможно удаленное выполнение кода (RCE).

LFI может быть использован с помощью простых строк обхода (../../../../) и техник обертки (php://filter), чтобы безопасно читать файлы в контекстах, где прямое включение не выведет содержимое файла.


Почему эта уязвимость LFI в Learnify опасна

Ключевые факты об этом инциденте:

  • Затрагивает версии темы Learnify ≤ 1.15.0.
  • CVE: CVE-2025-60085.
  • Необходимые привилегии: отсутствуют (неаутентифицированные).
  • CVSS: 8.1 (Высокий).
  • В данный момент нет официального патча от вендора (владельцы сайтов должны применить меры по смягчению).

Почему этот конкретный LFI является проблемой высокого приоритета:

  1. Неаутентифицированный: злоумышленнику не нужны учетные данные для попытки эксплуатации.
  2. Легко автоматизировать: проверки LFI могут выполняться автоматизированными сканерами на тысячах сайтов.
  3. Чувствительные целевые файлы: WordPress хранит учетные данные базы данных и соли в wp-config.php, что делает этот файл основной целью.
  4. Цепляемость: LFI может быть связан с другими неправильными конфигурациями (слабые разрешения на файлы, записываемые директории плагинов/тем, опасные обертки PHP) для эскалации до RCE или установки постоянной задней двери.

Из-за этих факторов сайты, работающие на уязвимых версиях Learnify, должны действовать немедленно.


Технические детали (как злоумышленники обычно эксплуатируют LFI)

Хотя точное имя уязвимого параметра может варьироваться между версиями тем, схема эксплуатации LFI следует общим шагам. Ниже мы объясняем общий метод, который использует злоумышленник — чтобы вы могли распознать и защититься от него.

  1. Поиск точки входа
    – Злоумышленник ищет файлы темы, которые вызывают включать, требовать, file_get_contents, или аналогичные функции с переменными, на которые влияют значения GET/POST/куки.
    – Пример рискованного шаблона: include( $theme_dir . '/' . $_GET['tpl'] );
  2. Путешествие по пути
    – Злоумышленник отправляет полезные нагрузки, содержащие последовательности перехода по пути:
        – ../../../../etc/passwd
        – ../../../../wp-config.php
    – Многие серверы предотвращают чтение файлов, возвращая ошибки при включении бинарных файлов. Злоумышленники затем используют обертки.
  3. Использование оберток для чтения файлов (распространенная техника)
    php://filter/convert.base64-encode/resource=path/to/file — применяет фильтр для кодирования файла в base64 при включении, что делает его печатаемым в ответах.
    – Пример полезной нагрузки:
        – ?tpl=php://filter/convert.base64-encode/resource=../../../../wp-config.php
  4. Нулевой байт и трюки кодирования
    – На старых версиях PHP и настройках серверов злоумышленники могут использовать обрезку нулевым байтом (%00) для обхода проверок суффиксов. Многие современные версии смягчают это, но это все еще распространенная полезная нагрузка в автоматизированных сканированиях:
        – ?tpl=../../../../wp-config.php
  5. Шаги после эксплуатации
    – Если найдены учетные данные wp-config, злоумышленник использует их для доступа к базе данных или для создания администратора, загрузки задних дверей или эксфильтрации дополнительных секретов.
    – Если загрузка файлов доступна и не очищена, злоумышленник может загрузить PHP-оболочки и получить RCE.

Ответственное раскрытие отметило, что логика включения темы Learnify не смогла должным образом очистить предоставленные пользователем пути, что позволило использовать вышеуказанные техники.


Примеры индикаторов и шаблонов вредоносных запросов, на которые стоит обратить внимание

Проверьте журналы вашего веб-сервера и журналы WAF на наличие запросов, содержащих эти шаблоны:

  • php://filter/convert.base64-encode/resource=
  • .... или ../ повторяющиеся (путевые обходы)
  • %00 или попытки, закодированные нулевым байтом
  • Запросы к PHP-файлам темы с необычными строками запроса, такими как ?tpl=... или ?page=... (проверьте любой параметр, который выглядит так, будто он выбирает шаблон)
  • Длинные строки base64 в ответах (указывает на то, что содержимое файла закодировано и возвращено)

Пример подозрительной строки запроса:

GET /wp-content/themes/learnify/somefile.php?template=php://filter/convert.base64-encode/resource=../../../../wp-config.php HTTP/1.1

Если вы видите этот шаблон, относитесь к нему как к высокоприоритетному — немедленно изолируйте и расследуйте.


Контрольный список немедленных действий (что делать в первые часы)

Если вы управляете сайтом с использованием Learnify ≤1.15.0, выполните следующие действия немедленно:

  1. Переведите сайт в режим обслуживания (если это возможно) или примените временные контрольные меры доступа (IP-белые списки), чтобы уменьшить уязвимость.
  2. Переключитесь на чистую тему (по умолчанию WordPress) или удалите уязвимую тему из общедоступных каталогов. Не оставляйте уязвимую тему активной.
  3. Если опубликована исправленная версия темы, немедленно примените обновление. Если официального патча еще нет, продолжайте с мерами снижения риска ниже.
  4. Установите правило WAF (виртуальное патчирование), чтобы блокировать запросы, содержащие последовательности обхода или использование оберток (см. пример правил в разделе “Правила WAF”).
  5. Измените пароль базы данных WordPress и любые учетные данные служб, которые могут быть сохранены в wp-config.php и других конфигурационных файлах — но только после того, как вы убедитесь в наличии резервных копий и проверках целостности, так как компрометация может сохраняться.
  6. Поменяйте секретные ключи и соли в wp-config.php после устранения проблемы.
  7. Просканируйте сайт на наличие веб-оболочек, подозрительных файлов и измененных временных меток.
  8. Восстановите из проверенной чистой резервной копии, если вы обнаружите компрометацию.
  9. Увеличьте мониторинг: включите мониторинг целостности файлов, журналы аудита и оповещения.

Если у вас нет технической возможности выполнить все шаги, свяжитесь с вашим хостинг-провайдером или командой безопасности и предоставьте им индикаторы, которые вы нашли.


Как определить, был ли ваш сайт скомпрометирован

Даже если вы закроете уязвимость, вы должны проверить, была ли она использована ранее.

Проверьте на:

  • Новые или измененные файлы в wp-контент/загрузки, wp-контент/темы, wp-content/плагины, или в других неожиданных местах.
  • Новые администраторы в WordPress (проверьте wp_users таблицу).
  • Подозрительные запланированные задачи (cron jobs) или несанкционированные записи cron в базе данных.
  • Исходящие соединения с сервера на неизвестные IP-адреса (проверьте журналы брандмауэра/хоста).
  • Неожиданно высокая загрузка CPU/IO или всплески трафика.
  • Необычные запросы к базе данных в журналах медленных запросов или запросы с использованием ранее невидимых учетных записей.
  • Неизвестные PHP-файлы или закодированные скрипты, содержащие оценка, base64_decode, или gzinflate.

Рекомендуемые инструменты:

  • Проверка целостности файлов на уровне сервера (в стиле tripwire).
  • Сканеры безопасности WordPress (предпочитайте те, которые предоставляют сканирование на уровне кода и эвристики).
  • Полное сканирование на наличие вредоносных программ файлов и содержимого базы данных.
  • Ручной обзор критически важных файлов (wp-config, .htaccess, index.php в папках плагинов/тем).

Если вы найдете доказательства компрометации, следуйте шагам реагирования на инциденты в следующем разделе.


Реакция на инциденты: пошаговая инструкция

Если вы подтвердите эксплуатацию, действуйте следующим образом:

  1. Содержать
    – Отключите сайт или заблокируйте трафик, чтобы предотвратить дальнейший ущерб.
    – Аннулируйте скомпрометированные учетные данные и ключи API.
    – Изолируйте сервер от сети, если это возможно.
  2. Сохраните доказательства
    – Создайте резервные копии журналов (журналы веб-сервера, базы данных, приложения) и образов дисков.
    – Не перезаписывайте журналы — сохраните временные метки для судебного анализа.
  3. Искоренить
    – Удалите все обнаруженные задние двери, оболочки и вредоносные скрипты.
    – Переустановите ядро WordPress, плагины и темы из чистых источников.
    – Восстановите серверы из образов, если подозревается постоянство на уровне сервера.
  4. Восстанавливаться
    – Восстановить из чистой резервной копии (сделанной до компрометации).
    – Применить все доступные патчи безопасности и меры по усилению защиты.
    – Изменить все пароли и обновить ключи и соли.
  5. Поствосстановление
    – Укрепить мониторинг и ведение журналов.
    – Провести анализ после инцидента: как произошла компрометация? Какие меры контроля не сработали?
    – Обучить команду и обновить план реагирования на инциденты.
  6. Уведомить
    – Уведомить заинтересованные стороны, хостинг-провайдера и, если это требуется в вашей юрисдикции, клиентов или регуляторов.

Рекомендации по усилению защиты для снижения риска LFI

Даже после немедленного смягчения, примите эти долгосрочные меры защиты:

  1. Принцип наименьших привилегий
    – Убедитесь, что права доступа к файлам и каталогам минимальны. Большинство файлов WordPress должны быть доступны для чтения веб-сервером, но не для записи, за исключением wp-контент/загрузки которые нуждаются в доступе на запись только для загрузок.
    – Учетные записи базы данных, используемые WordPress, должны иметь только необходимые привилегии.
  2. Конфигурация PHP
    – Отключить allow_url_include.
    – Отключить неиспользуемые обертки, если это возможно.
    – Используйте open_basedir чтобы ограничить доступ PHP к каталогам.
    – Отключить исполнительный, shell_exec, проходной, система если это не требуется.
  3. Отключить встроенный редактор плагинов и тем
    – Добавить в wp-config.php:
    define('DISALLOW_FILE_EDIT', true);
    define('DISALLOW_FILE_MODS', true); // ограничивает установки/обновления плагинов/тем из админки WP
  4. Безопасные загрузки
    – Предотвратить прямое выполнение PHP файлов в wp-контент/загрузки добавив серверные правила (см. пример блока .htaccess/nginx ниже).
  5. Используйте сильные, уникальные соли и ключи (меняйте при устранении проблем)
    – Изменение ключей сделает недействительными активные аутентификационные куки — полезно после инцидента.
  6. Регулярные резервные копии и тестирование восстановления
    – Храните частые резервные копии вне сайта и регулярно тестируйте восстановление.
  7. Используйте поэтапные обновления и проверку кода
    – Для тем/плагинов в активной разработке проверяйте сторонний код или ограничьте использование до подтверждения безопасности.

Практические правила WAF и меры смягчения на уровне сервера

Виртуальное патчирование (WAF) может выиграть время, когда официальный патч еще не доступен. Ниже приведены примерные правила, которые вы можете использовать в общих системах WAF или в качестве контроля на уровне веб-сервера. Адаптируйте и тестируйте внимательно — неправильные правила могут блокировать законный трафик.

Важное обнаружение шаблонов для блокировки:

  • Любое значение параметра, содержащее php://filter
  • Любой параметр, содержащий несколько ../ последовательности
  • Попыток нулевого байта %00
  • Попыток включения файлов с чувствительными именами (wp-config.php, .env, /etc/passwd)

Пример правила в стиле ModSecurity/Core Rule Language (CRS):

# Блокировать общие подписи атак LFI"

Правило на основе местоположения Nginx для запрета php://filter или попыток обхода:

if ($request_uri ~* "(php://filter||\.\./){1,}") {

Apache .htaccess Эффективный фрагмент для блокировки выполнения PHP в загрузках:

# Защита загрузок - предотвращение выполнения PHP

Более тонкий подход: блокировать только подозрительные запросы, разрешать безопасные. Тестируйте правила на тестовом сервере перед применением в производственной среде.


Как мы в WP‑Firewall помогаем (управляемый файрвол + смягчение)

В WP‑Firewall мы исходим из предположения: уязвимости будут обнаружены в темах/плагинах. Самая быстрая и наименее разрушительная защита — это виртуальное патчирование через управляемый WAF, который блокирует попытки эксплуатации в реальном времени, пока вы планируете и применяете постоянные исправления.

Основные меры защиты, которые мы предоставляем и рекомендуем:

  • Правила управляемого WAF обновляются автоматически в ответ на новые раскрытия — блокируют полезные нагрузки эксплуатации (php://filter, последовательности обхода, попытки получить wp-config.php) до того, как они достигнут PHP.
  • Сканирование на наличие вредоносного ПО и обнаружение сигнатур для выявления веб-оболочек и подозрительных модификаций вскоре после попытки эксплуатации.
  • Мониторинг целостности файлов и ежедневные сканирования для обнаружения неожиданных изменений файлов.
  • Уведомления о инцидентах и поддержка для помощи в оценке находок и реализации смягчений.
  • Возможность виртуального патчирования, чтобы даже если у темы нет официального патча, вы могли продолжать работу, пока риск снижен.

Мы рекомендуем сочетать немедленное виртуальное патчирование с шагами по укреплению сервера, описанными выше, ротацией учетных данных и внедрением непрерывного мониторинга.


Примеры регулярных выражений для обнаружения и советы по анализу логов

Следите за логами веб-сервера и внедряйте уведомления по этим шаблонам:

Регулярное выражение (без учета регистра) для обнаружения вероятных LFI-проб:

(?i)(phpfilter|php://filter|(\.\./){2,}|(\.\.\\){2,}||wp-config\.php|/etc/passwd)

Записи в логах, вызывающие уведомления:

  • GET /wp-content/themes/learnify/… ?…=php://filter/convert.base64-encode/resource=../../../../wp-config.php
  • Любые запросы, использующие php:// обертки
  • Запросы, которые возвращают 200 с закодированными в base64 строками — base64 на HTML-страницах часто является индикатором чтения содержимого файлов.

Настройте автоматическую задачу для ежедневного сканирования логов на наличие этих шаблонов и уведомления администраторов.


Пример безопасного теста для проверки уязвимости (только для владельцев сайта)

Если вы владелец сайта и хотите проверить, уязвима ли ваша установка Learnify, следуйте этой безопасной процедуре проверки только для чтения. Не пытайтесь эксплуатировать чужие сайты.

  1. Используйте неразрушающий php://filter запрос, который просто пытается закодировать в base64 распознанный файл (например, readme.html в директории темы).
  2. Составьте запрос, аналогичный:
GET /wp-content/themes/learnify/index.php?tpl=php://filter/convert.base64-encode/resource=inc/readme.html
  1. Если ответ содержит строку base64, которая декодируется в содержимое файла, функция в этой теме уязвима для неправильного использования шаблона включения. Прекратите тестирование и перейдите к смягчению.

Важный: Тестируйте только на сайтах, которые вы владеете или управляете. Не проводите тесты на сторонних сайтах.


Дерево решений по устранению: Обновление против Временное смягчение против Удаление

  • Если доступна официальная исправленная тема: обновите немедленно, затем следуйте контрольному списку проверки (сканирование целостности файлов, ротация паролей).
  • Если официального патча не существует:
    • Удалите тему из активного использования (переключитесь на стандартную тему).
    • Примените правила WAF и ограничения сервера, чтобы заблокировать попытки эксплуатации.
    • Работайте с поставщиком темы по срокам или рассмотрите возможность замены темы на поддерживаемую альтернативу.
  • Если вы не можете удалить тему по бизнес-причинам:
    • Поместите сайт за строгими контролями доступа (белый список IP) для доступа администратора.
    • Примените строгие правила WAF и разрешите только минимальную функциональность.
    • Запланируйте специализированный мониторинг и частые сканирования целостности.

После устранения: проверьте и мониторьте

После применения исправлений проверьте свою среду:

  1. Повторно запустите автоматизированные сканеры.
  2. Убедитесь, что нет неожиданных учетных записей администраторов или запланированных задач.
  3. Проверьте наличие неожиданных сетевых подключений или изменений DNS.
  4. Просмотрите резервные копии на наличие ранних признаков компрометации (убедитесь, что резервные копии чистые).
  5. Продолжайте повышенный мониторинг в течение как минимум 30 дней после устранения.

Часто задаваемые вопросы (FAQ)

В: Может ли LFI привести к удаленному выполнению кода?
О: LFI сам по себе является уязвимостью включения/чтения файлов. RCE может быть возможным, если злоумышленник может включить файл, который он может контролировать (например, загруженный PHP файл) или связать LFI с другими неправильными конфигурациями (записываемые директории, опасные обертки или вредоносные плагины).
В: Мой сайт использует дочернюю тему Learnify — я подвержен риску?
О: Возможно. Дочерние темы наследуют основной код от родительских тем. Если уязвимая логика существует в коде родительской темы, и родительская тема — Learnify ≤1.15.0, вы, вероятно, подвержены риску. Проверьте версию родительской темы и примените меры по смягчению.
В: Я исправил тему — нужно ли мне все еще менять учетные данные?
О: Да. Если есть хоть малейшая вероятность, что сайт был скомпрометирован, измените ключи, пароли базы данных и токены API, используемые на сайте. Исправление предотвращает будущую эксплуатацию, но не устраняет компрометации, произошедшие ранее.
В: Как я могу быть уведомлен о подобных уязвимостях в будущем?
О: Подпишитесь на надежный источник безопасности и поддерживайте актуальность ваших подписей WAF и сканеров вредоносного ПО. Реализуйте автоматизированный мониторинг уязвимостей для установленных тем и плагинов.

Начните защищать свой сайт сегодня — доступен бесплатный план

Если вы хотите простую, немедленную защиту, пока выполняете технические шаги по устранению выше, наш управляемый бесплатный уровень предоставляет основные защиты для сайтов WordPress. Бесплатный план включает управляемый брандмауэр с виртуальным патчингом, веб-приложенческий брандмауэр (WAF), сканирование на наличие вредоносного ПО, защиту от неограниченной пропускной способности и смягчение рисков OWASP Top 10. Регистрация проста и быстра — вы можете начать блокировать попытки эксплуатации в течение нескольких минут.

Узнайте больше или зарегистрируйтесь на бесплатный план здесь

Варианты обновления: мы также предлагаем доступные платные планы, которые добавляют автоматическое удаление вредоносного ПО, черные/белые списки IP, ежемесячные отчеты по безопасности и расширенные управляемые услуги для бизнеса и агентств. Если вы управляете несколькими сайтами или нуждаетесь в активной поддержке по устранению, наши планы более высокого уровня предоставляют полный управляемый подход к безопасности.


Заключительные мысли от экспертов по безопасности WP‑Firewall

Это раскрытие LFI Learnify напоминает о том, что любая тема или плагин могут вводить критические уязвимости. Самые важные аспекты реагирования на такие инциденты — это скорость и полнота:

  • Скорость применения мер по смягчению (виртуальный патчинг и временное удаление).
  • Полнота расследования (получил ли злоумышленник что-либо? что было доступно?).
  • Долгосрочные улучшения (усиление безопасности, мониторинг, минимальные привилегии).

Если вам нужен партнер, который может управлять виртуальным патчингом и обеспечивать непрерывное обнаружение и реагирование для вашего парка WordPress, управляемые услуги WP‑Firewall разработаны именно для этого — защищать трафик в реальном времени, сканировать на наличие индикаторов после эксплуатации и помогать вам восстанавливаться с минимальными перебоями в бизнесе.

Если вы управляете несколькими сайтами WordPress, сейчас самое время пересмотреть свой инвентарь тем, подтвердить версии и применить вышеуказанные шаги. Если вам нужна помощь в приоритизации конкретных индикаторов, мы публикуем подробные руководства по устранению и предоставляем поддержку клиентам, которым требуется ускоренная помощь. Будьте бдительны и рассматривайте любые попытки LFI как потенциально серьезные — злоумышленники автоматизируют эти проверки, и подверженный эксплуатации сайт находится под реальным риском.


Приложение A: Быстрый контрольный список (копировать/вставить)

  • Определите, установлен ли Learnify ≤ 1.15.0.
  • Переключитесь на другую тему или деактивируйте Learnify.
  • Примените правило(а) WAF для блокировки попыток php://filter и обхода путей.
  • Сканируйте на наличие веб-оболочек и несанкционированных изменений файлов.
  • Смените учетные данные БД и соли WP.
  • Восстановите из чистой резервной копии, если обнаружено компрометирование.
  • Реализуйте усиление прав доступа к файлам.
  • Включите мониторинг целостности файлов и оповещения.
  • Мониторьте журналы в течение 30 дней после устранения.

Приложение B: Дополнительные ресурсы и ссылки

(Если вам нужна помощь в реализации конкретных правил WAF или проведении безопасного сканирования уязвимостей в вашей среде, наша команда безопасности в WP‑Firewall может помочь. Мы предлагаем как варианты самообслуживания, так и управляемые решения, адаптированные для сайтов любого размера.)


Спасибо, что относитесь к безопасности серьезно. Если у вас есть вопросы по вышеуказанным шагам или вам нужно руководство, специфичное для вашего сайта, свяжитесь с поддержкой WP‑Firewall или зарегистрируйтесь на бесплатный план, чтобы получить немедленную управляемую защиту: https://my.wp-firewall.com/buy/wp-firewall-free-plan/


wordpress security update banner

Получайте WP Security Weekly бесплатно 👋
Зарегистрируйтесь сейчас
!!

Подпишитесь, чтобы каждую неделю получать обновления безопасности WordPress на свой почтовый ящик.

Мы не спамим! Читайте наши политика конфиденциальности для получения более подробной информации.