CodeFest 2010. Родионов А. — Старые «фишки» IE или о двух уязвимостях на грани клиент-сервера
1. Старые «фишки» IE
или о двух уязвимостях
на грани клиент-
сервера.
Алексей Родионов
Development Mill
2. – Веб-безопасность и QA –
Тестирование на проникновение
Аудит
Тестирование защищённости
3. – Internet Explorer feature #1 –
Встроенная опция “Автоопределение кодировки”:
● пытается определить кодировку страницы,
последовательно проходя DOM
● встретив элемент с текстом внутри и
проанализировав его, определяет кодировку
● уязвимость присутствует только в версиях <=7
4. – Internet Explorer feature #1 –
Пример:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
...
<title>Текст в кодировке UTF-7</title>
</head>
...
</html>
Результат: UTF-8
5. – Internet Explorer feature #1 –
Пример:
<html>
<head>
<title>Текст в кодировке UTF-7</title>
...
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
</head>
...
</html>
Результат: UTF-7
6. – Internet Explorer feature #1 –
Всегда объявляйте кодировку страницы в
элементе <meta> до элемента <title>
7. – Internet Explorer feature #2 –
Встроенный MIME сниффер:
● при получении файла с заголовком Content-type:
text/plain, пытается по его содержимому
определить настоящий MIME тип
● после определения MIME типа, в соотетствии с
ним обрабатывает файл
● уязвимость присутствует во всех версиях
8. – Internet Explorer feature #2 –
Пример:
содержимое файла test.txt
В данном текстовом файле присутствует
исключительно текст...
Результат:
Content-type: text/plain
9. – Internet Explorer feature #2 –
Пример:
содержимое файла test.txt
В данном текстовом файле присутствуют и обычный
текст, и HTML элемент <script>evil()</script>...
Результат:
Content-type: text/html
10. – Internet Explorer feature #2 –
Способы решения:
● отдавать HTTP заголовок X-Content-Type-Options:
nosniff (сработает только в IE8)
● не разрешать загрузку txt-файлов
● если txt-файлы жизненно необходмы, отдавать
HTTP заголовок Content-dispostion: attachment