Эксплуатация древнего бага в MIME сниффере IE на примере Drupal x.xx. Уязвимость известная, однако, как показывает практика, мало кто о ней знает. Суть заключается в том, что IE, получая файл с Code: Content-type: text/plain врубает свой MIME сниффер и пытается определить реальный MIME тип файла. Это сделано потому, что раньше многие серверы отдавали все файлы с text/plain. Сейчас с этим уже проблем нет, однако txt файлы сервер всегда отдает как text/plain. MIME сниффер смотрит внутрь файла и, увидев там, к примеру, HTML код, считает, что файл относится в text/html и соответственно рендерит его. Таким образом, если у пользователя есть возможность загружать txt-файлы на сервер, он может загрузить файл с необходимым HTML кодом: от фишинга до Reflected XSS. Что касается Drupal, то в шестой ветке есть стандартный модуль Upload, в списке дефолтных расширений которого есть и txt. В седьмой ветке вроде бы Upload заменен на FileField, который всегда по умолчанию ставит txt. Существует три способа защиты от такой HTML инъекции: 1. Использовать заголовок Code: X-Content-Type-Options: nosniff , пердложенный Microsoft. Главный минус - поможет только для IE8. 2. Использовать заголовок Code: Content-disposition: attachment , заставляющий браузер скачать файл, а не рендерить его. Минус - не всегда есть возможность настраивать сервер. 3. Не разрешать загрузку text/plain файлов. Microsoft чинить баг не будет. Причем, в Chromium тоже есть MIME сниффер, но подобной уязвимсоти нет. Drupal чинить тоже ничего не будет. P.S. На английском уже давно об этом писал в своем блоге.
Баян то древний, только почему-то все про него забывают. А это получается из серии "Как взломать Drupal?". Немного соц. инженерии и все ok.