Изображения с неизвестным содержанием: опасно для браузера? - PullRequest
3 голосов
/ 11 июня 2010

Допустим, я разрешаю пользователям размещать ссылки на любые изображения, которые им нравятся.Ссылка будет проверена на синтаксическую корректность, экранирование и т. Д., А затем вставлена ​​в тег <img src="..."/>.

Есть ли какие-либо известные уязвимости безопасности, например, кем-то, ссылающимся на "evil.example.com/evil.jpg ", а evil.jpg содержит некоторый код, который будет выполнен из-за ошибки браузера или чего-то подобного?

(Давайте проигнорируем атаки CSRF - должно быть достаточно, чтобы я разрешал только URL с типичнымисуффиксы файлов изображений.)

Ответы [ 5 ]

3 голосов
/ 11 июня 2010

Время от времени возникают угрозы безопасности в файлах изображений.Вот пример: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-22_11-5388621.html?tag=nl.e019. Это старая статья, поэтому очевидно, что эти вещи какое-то время катались.

Хотя невозможно сказать наверняка, что что-то всегда безопасно / никогда не безопасно, поэтомуПока это звучит так, как будто риски были относительно низкими, и производители средств просмотра изображений исправляются довольно быстро.ИМО лучший тест - как часто вы слышите о реальных проблемах.Этот вектор угрозы был известен в течение многих лет, но на самом деле не получил широкого распространения.Учитывая степень, в которой люди связывают изображения на общедоступных форумах, я ожидаю, что это станет большой проблемой довольно быстро, если бы это была реалистичная атака.

1 голос
/ 11 июня 2010

Таким образом, есть потенциальные переполнения буфера при обработке ненадежных данных, однако вы к этому доберетесь.Кроме того, если вы вставляете ненадежные данные в виде URL-адресов на свою страницу, существует риск ошибок XSS.Тем не менее, я думаю, вы хотите знать, почему браузеры помечают это как проблему:

Вне моей головы:

  • Я полагаю, что информация реферера все еще отправляется в этомдело.Даже если вы никогда и никогда не будете использовать переписывание URL-адресов для сеансов, вы все равно будете предоставлять информацию, которая ранее была конфиденциальной. chris_l: Да, я только что провел быстрый тест - браузер (FF 3.5) отправляет заголовок Referer.

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

  • Размер изображения может изменить макет.Загрузка изображения может даже быть отложена для перемещения страницы в критическое время. chris_l: Хороший вопрос!Я всегда должен устанавливать ширину и высоту (может быть определено сервером, когда пользователь публикует изображение - будет работать, пока изображение не изменится ... лучшие идеи?)

  • Изображения могут быть использованы для AJAX-подобных функций. chris_l: Пожалуйста, уточните этот момент - как это работает?

  • Браузеры будут отмечать проблему с вашим сайтом, скрывая другие проблемы и заставляя пользователей соглашаться на слабую безопасность.практики. chris_l: Это определенно важная проблема, когда сайт использует HTTPS.

1 голос
/ 11 июня 2010

Да, это может быть проблемой. Существует довольно много известных эксплойтов, которые работают с использованием уязвимостей в коде рендеринга изображений браузера или ОС. Включая уязвимости удаленного выполнения. Возможно, это не самый простой недостаток в использовании, но это определенно проблема.

Пример такой уязвимости: http://www.securityfocus.com/bid/14282/discuss (но вы можете найти множество других уязвимостей того же типа).

Мне кажется, я помню такую ​​проблему, когда сайт с высокой видимостью использовал именно эту уязвимость. Рекламное изображение отображалось у какого-либо стороннего рекламного поставщика, и изображение не проверялось. Тысячи пользователей скомпрометированы ... Не могу найти историю больше ... извините.

1 голос
/ 11 июня 2010

Некоторое время назад переполнение буфера JPEG .Кроме того, вы должны учитывать изображений, которые на самом деле содержат код , чтобы не выполнять код.

0 голосов
/ 11 июня 2010

ОБНОВЛЕНИЕ: неверное подтверждение!

Вы также должны учитывать, что куки-файлы (что означает sessionID) также отправляются на сервер, где находится изображение. Таким образом, другой сервер получает ваш идентификатор сессии. Если изображение на самом деле содержит PHP-код, оно может украсть sessionID:

Например, вы включаете:

<img src="http://example.com/somepic.jpg alt="" />

На сервере http://example.com имеется .htaccess-файл со следующим текстом:

RewriteRule ^somepic\.jpg$ evilscript.php

тогда картинка на самом деле является php-файлом, генерирующим изображение, но также делает некоторые злые вещи, такие как кража сессии или что-то еще

...