CVE-2019-5418
Rails Ruby on Rails
2025-07-07
Rails Ruby on Rails contains a path traversal vulnerability in Action View. Specially crafted accept headers in combination with calls to `render file:` can cause arbitrary files on the target server to be rendered, disclosing the file contents.
Технический анализ и план устранения
Суть уязвимости
CVE-2019-5418 — это критическая уязвимость типа Path Traversal (обход путей) в компоненте Action View фреймворка Ruby on Rails. Проблема возникает из-за некорректной обработки HTTP-заголовка Accept.
Когда контроллер использует метод render file:, Rails пытается найти подходящий шаблон, основываясь на типе контента, указанном в заголовке Accept. Злоумышленник может передать специально сформированную строку (например, ../../../../etc/passwd{{), что заставит приложение выйти за пределы директории шаблонов и прочитать произвольный файл в системе, к которому у процесса Ruby есть доступ.
Как исправить
Основным способом устранения является обновление версии Ruby on Rails до безопасного релиза.
- Откройте
Gemfileи обновите версиюrailsдо одной из следующих (или выше): - 5.2.2.1
- 5.1.6.2
- 5.0.7.2
-
4.2.11.1
-
Выполните обновление зависимостей:
bundle update rails
- После обновления убедитесь, что в
Gemfile.lockзафиксирована корректная версия, и перезапустите сервер приложения.
Временные меры
Если немедленное обновление фреймворка невозможно, примените один из следующих методов защиты:
1. Исправление на уровне контроллера (Monkey Patch)
Добавьте проверку или принудительно укажите формат рендеринга, чтобы заголовок Accept не влиял на поиск пути:
render file: "path/to/file", formats: [:html]
2. Фильтрация на уровне Reverse Proxy (Nginx)
Если вы используете Nginx, можно блокировать подозрительные заголовки Accept, содержащие попытки выхода из директории:
if ($http_accept ~* "\.\./") {
return 400;
}
3. Ограничение прав процесса Убедитесь, что пользователь, от имени которого запущен Rails, имеет минимально необходимые права в ОС (принцип Least Privilege), чтобы минимизировать ущерб в случае чтения файлов.