CVE-2014-0130
Rails Ruby on Rails
2022-03-25
Directory traversal vulnerability in actionpack/lib/abstract_controller/base.rb in the implicit-render implementation in Ruby on Rails allows remote attackers to read arbitrary files via a crafted request.
Технический анализ и план устранения
Суть уязвимости
Уязвимость в механизме неявного рендеринга (implicit render) в компоненте Action Pack. Злоумышленник может отправить специально сформированный HTTP-запрос, который заставит приложение выйти за пределы ожидаемой директории шаблонов и прочитать содержимое произвольных файлов на сервере (например, файлов конфигурации, логов, включая файлы с секретами).
Как исправить
Основной способ — обновить Ruby on Rails до исправленной версии.
Для Rails 4.x: Обновитесь до версии 4.0.5, 4.1.1 или выше.
# Если используете Bundler, обновите версию в Gemfile:
# gem 'rails', '~> 4.1.1'
# Затем выполните:
bundle update rails
Для Rails 3.x: Обновитесь до версии 3.2.18.
# В Gemfile укажите:
# gem 'rails', '~> 3.2.18'
bundle update rails
Для системных пакетов (например, в Debian/Ubuntu): Установите обновленный пакет из репозитория.
# Пример для Debian/Ubuntu (имя пакета может отличаться, например, ruby-rails)
sudo apt update
sudo apt install --only-upgrade ruby-rails
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Настройка WAF (Web Application Firewall):
- Добавьте правило для блокировки запросов, содержащих последовательности для обхода директорий (
../,..\,%2e%2e%2f). - Пример правила для ModSecurity (CRS):
SecRule ARGS "@contains ../" "id:10001,phase:2,deny,msg:'Path Traversal Attack'"
- Добавьте правило для блокировки запросов, содержащих последовательности для обхода директорий (
-
Мониторинг и фильтрация на уровне приложения:
- В контроллерах Rails добавьте фильтр для проверки параметров
actionиcontrollerна наличие недопустимых символов перед рендерингом.
- В контроллерах Rails добавьте фильтр для проверки параметров
-
Ограничение прав доступа:
- Убедитесь, что процесс веб-сервера (например,
www-data,nginx,puma) запущен от непривилегированного пользователя и имеет минимально необходимые права на чтение файлов в директории приложения.
- Убедитесь, что процесс веб-сервера (например,