CVE: CVE-2026-55520
Продукт: Ubuntu
Дата публикации: 28.08.2026
Критичность: HIGH
CVSS: 7.1 (4.0)
EPSS: 0,37%; процентиль 29,87%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
Уязвимость в библиотеке Protego позволяет атакующему вызвать отказ в обслуживании веб-скрейпера через специально сформированный файл robots.txt. В Ubuntu затронуты все поддерживаемые версии системы, где установлен пакет python-protego. Статья описывает механизм экспоненциального бэктрекинга, уязвимые версии пакетов и способы проверки и устранения проблемы.
Основные характеристики
Риск представляет собой отказ в обслуживании (DoS) для приложений, использующих библиотеку Protego для парсинга robots.txt. Атакующий может заставить процесс зависнуть на неопределенное время, обработав вредоносный файл.
- Тип ошибки: CWE-400 (Uncontrolled Resource Consumption) и CWE-1333 (Inefficient Regular Expression Complexity).
- CVSS 4.0: 7.1 (HIGH). Вектор:
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N.
- Условия атаки: Требуется, чтобы приложение обработало вредоносный robots.txt. Вектор указывает на необходимость взаимодействия пользователя (UI:P), что в контексте скрейпинга означает загрузку файла с внешнего ресурса.
- Эксплуатация: Подтвержденная эксплуатация в реальных атаках не зафиксирована в доступных источниках.
- EPSS: 0,37% (процентиль 29,87%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
Какие продукты и версии затронуты
Уязвимость затрагивает пакет
python-protego во всех поддерживаемых версиях Ubuntu, где он доступен в репозиториях. Библиотека Protego является чистым Python-парсером, используемым в экосистеме Scrapy.- Ubuntu 20.04 LTS (focal): версия пакета
0.1.16+dfsg-1.
- Ubuntu 22.04 LTS (jammy): версия пакета
0.2.1+dfsg-1.
- Ubuntu 24.04 LTS (noble): версия пакета
0.3.0+dfsg-1.
- Ubuntu 25.10 (questing): версия пакета
0.4.0+dfsg-1.
- Ubuntu 26.04 LTS (resolute): версия пакета
0.6.0+dfsg-1.
Все перечисленные версии содержат уязвимый код в модуле
src/protego/_urlpattern.py. Исправление доступно в версии 0.6.2 библиотеки, что требует обновления пакета в системе.Причина уязвимости
Причина уязвимости кроется в функции
_prepare_pattern_for_regex в классе _URLPattern. При обработке директив Allow или Disallow из файла robots.txt каждый символ * (звездочка) преобразуется в ленивый регулярный шаблон (lazy regular-expression wildcard).Если директива содержит большое количество звездочек, сформированный регулярный выражение становится крайне сложным. При попытке сопоставления такого шаблона с URL, который почти, но не полностью соответствует паттерну (near-miss URL), движок регулярных выражений Python начинает экспоненциальный бэктрекинг. Это приводит к тому, что процесс тратит вычислительные ресурсы на перебор вариантов, что и вызывает отказ в обслуживании.
Как работает атака
Атакующий создает файл robots.txt, содержащий директивы с большим количеством символов
*. Этот файл размещается на веб-сервере, который посещает уязвимый скрейпер.Когда приложение Protego загружает и парсит этот файл через
protego.Protego.parse, уязвимый шаблон сохраняется в памяти. При последующем вызове protego.Protego.can_fetch для проверки URL, которое не соответствует паттерну, но имеет схожую структуру, происходит запуск механизма сопоставления.Из-за экспоненциального бэктрекинга процесс зависает, потребляя CPU и блокируя работу скрейпера. Атакующий контролирует длительность зависания, варьируя сложность паттерна.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо выполнение следующих условий:
- В системе установлен пакет
python-protegoв уязвимой версии (ниже 0.6.2).
- Приложение использует библиотеку Protego для обработки robots.txt.
- Атакующий имеет возможность разместить вредоносный файл robots.txt на веб-сервере, который будет посещен скрейпером.
- Скрейпер должен загрузить и обработать этот вредоносный файл.
Возможный сценарий атаки
Атакующий настраивает веб-сервер, чтобы он отдавал специально сформированный robots.txt с директивой, содержащей множество звездочек. Жертвенный скрейпер, использующий Protego, переходит на этот URL.
Библиотека парсит файл и сохраняет уязвимый регулярный шаблон. При попытке скрейпера проверить доступность следующего URL, который не соответствует паттерну, процесс зависает.
В результате скрейпер перестает обрабатывать новые задачи, что приводит к отказу в обслуживании для всего приложения. Атакующий может повторять эту атаку, чтобы поддерживать скрейпер в заблокированном состоянии.
Есть ли публичный эксплойт
Публичный эксплойт в виде готового кода или PoC в доступных источниках не указан. Однако техническое описание уязвимости и коммит с исправлением доступны в репозитории проекта.
Отсутствие публичного PoC не означает, что эксплойт невозможен. Механизм экспоненциального бэктрекинга хорошо изучен, и создание вредоносного robots.txt для этой уязвимости является простой задачей для атакующего. Рекомендуется считать уязвимость эксплуатируемой.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости не опубликованы. Однако можно использовать общие признаки, которые не являются специфичными для CVE-2026-55520:
- Высокая загрузка CPU на процессах, использующих Python и библиотеку Protego.
- Зависание скрейперов или веб-ботов при обработке определенных URL.
- Аномально длительное время отклика при проверке robots.txt.
Эти признаки могут быть вызваны и другими причинами, поэтому их следует рассматривать в совокупности с другими данными.
Как обнаружить атаку
Для обнаружения атаки можно использовать следующие методы:
- Мониторинг времени отклика функций
protego.Protego.can_fetchиprotego.Protego.parse.
- Анализ логов скрейпера на предмет аномально длительных операций.
- Проверка загруженных файлов robots.txt на наличие директив с большим количеством символов
*.
Рекомендуется настроить алерты на превышение порогового времени выполнения операций парсинга robots.txt.
Как проверить свою версию
Для проверки версии установленного пакета
python-protego в Ubuntu используйте следующие команды:
Bash:
apt-cache policy python-protego
Эта команда покажет установленную версию пакета и доступные версии в репозиториях. Также можно проверить версию библиотеки Python:
Bash:
python3 -c "import protego; print(protego.__version__)"
Если версия ниже 0.6.2, система уязвима.
Исправление
Для устранения уязвимости необходимо обновить пакет
python-protego до версии, содержащей исправление (0.6.2 или выше). В Ubuntu это делается через стандартные средства обновления:
Bash:
sudo apt update
sudo apt upgrade python-protego
После обновления убедитесь, что версия пакета соответствует исправленной. Если пакет не обновляется, проверьте, что репозитории настроены корректно и доступны.
Временные меры защиты
До обновления пакета можно применить следующие временные меры:
- Ограничьте доступ скрейпера к внешним ресурсам, которые могут отдавать вредоносные robots.txt.
- Настройте прокси-сервер для фильтрации и кэширования файлов robots.txt.
- Ограничьте время выполнения операций парсинга robots.txt с помощью таймаутов в приложении.
Эти меры снижают риск, но не устраняют уязвимость полностью.
Как проверить устранение уязвимости
После обновления пакета проверьте, что уязвимость устранена:
Bash:
apt-cache policy python-protego
Убедитесь, что установленная версия не ниже 0.6.2. Также можно протестировать приложение с использованием вредоносного robots.txt, чтобы убедиться, что зависание не происходит. Если тест проходит успешно, уязвимость устранена.
Вывод
CVE-2026-55520 представляет собой уязвимость, позволяющую вызвать отказ в обслуживании скрейперов через вредоносный robots.txt. В Ubuntu затронуты все версии системы с пакетом
python-protego.Рекомендуется срочно обновить пакет до версии 0.6.2 или выше. До обновления можно применить временные меры для снижения риска.
Регулярно проверяйте обновления безопасности и следите за официальными уведомлениями.
Официальные источники
История обновлений статьи
- 30.08.2026 — Опубликована первая версия материала.
- 01.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
- 03.09.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
