...

воскресенье, 9 февраля 2014 г.

Уязвимость в Paperclip (XSS/RCE)

Paperclip это самый популярный джем для загрузки файлов/аватарок в рельсах. В нем был найден довольно простой логический баг, ведущий к загрузке произвольного файла на сервер, то есть с произвольным etension: file.html, file.php, file.cgi и так далее.

Paperclip имеет «магическую» (как и все в рельсах) систему адаптеров. Если на входе объект типа File, то берется файловый адаптер, если строчка то сверяется по разным паттернам. Если строчка типа URL http://* то делается запрос по этому URL чтобы выкачать файл.



io_adapters/uri_adapter.rb содержал следующий код:



@original_filename = @target.path.split("/").last
@original_filename ||= "inde.html"
self.original_filename = @original_filename.strip

@content_type = @content.content_type if @content.respond_to?(:content_type)
@content_type ||= "tet/html"




Заметьте, контент тайп берется из хедера ответа сервера, которому доверять нет никакого смысла. Вот я создал URL возвращающий картинку http://ift.tt/1bbmerX но имеющий .htm в расширении.

Paperclip думает что мы дали ему картинку, так как Content-Type вернулся image/jpg и сохраняет файл как file.jpg.htm. Но если веб сервер (apache/ngin) сервит этот файл то смотрит уже на .htm в конце и отвечает внутренностями нашего файла и Content-Type=tet/html. Браузеры парсят ответ как обычную HTML страницу.


Ах да, нашу нагрузку мы спрячем в EXIF хедеры, так что файл все еще будет валидным JPG (на случай если на сервере есть какие то resize операции).


ÛßÙ4Ù¬ıPıfiˆmˆ˚˜ä¯ ¯®˘8˘«˙W˙Á˚w¸ ¸ò˝)˝∫˛K˛‹ˇmˇˇˇ· ‚EifII*

Ü å ¢ ™( 1 ≤2 «£ €iá ¯CanonCanon DIGITAL IXUS 70¥ ¥ f-spot version 0.3.52008:09:08 11:29:26<img src= onerror=alert(0)> öÇ Z ùÇ b 'à Pê 0220


image

Для RCE (выполнения кода) нужно чтобы сервер выполнял .php/.pl/.cgi файлы, что впринципе редкость для Rails приложений, но я могу ошибаться.


Чтобы проверить уязвимы ли вы, удалите type=file у тэга и пошлите URL.

image


Баг был зарепорчен 11 декабря и исправлен лишь 2 февраля. Выпущена новая мажорная версия Paperclip 4, также делающая вайтлистинг content-type-ов обязательным (ранее многие разработчики забывали вообще ограничивать типы файлов для загрузки). Ну и вообще, это может быть интересным вектором для проверки download-by-URL функциональности.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий