Эта задача во многом похожа на предыдущую, хоть и касается формата PDF. Для начала представим себе классическую атаку. Существует сервер, на который мы можем загрузить картинку. Есть способ изготовить такой файл, который одновременно будет и валидным изображением, и правильным PDF. После загрузки такого файла мы можем заманить жертву к себе на сайт и заставить открыть нашу картинку как PDF. При помощи FormCalc из PDF можно отправлять и принимать запросы с того хоста, откуда загружен файл. Используя это, мы обходим Same Origin Policy и получаем доступ к серверу от имени нашей жертвы.

К сожалению, эту атаку можно провести только через браузер IE, так как он по умолчанию использует официальный плагин Adobe. У других браузеров есть встроенные просмотрщики (вернее, что-то вроде конвертеров), которые не поддерживают FormCalc.

Изначальная атака типа content smuggling была направлена на смешение форматов PNG и PDF. Но в Adobe запатчили плагин, который проверяет по черному списку, не совпадает ли начало файла PDF с одним из типовых заголовков для графических файлов. Например, PNG — для PNG, GIF89a — для GIF, JFIF — для JPEG.

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

Суть формата при этом тоже никак не изменилась: в файле перед самим PDF могут находиться практически любые данные. Так что потенциальная возможность content smuggling тоже осталась.

Ей-то и воспользовались ребята из Minded Security. Они смогли собрать специальный файл: одновременно валидный PDF и SVG (они называют такие файлы словом polyglot). В черном списке Adobe перечислены и заголовки SVG (svg, <?xml), но парсеры SVG гуманнее парсеров XML, а потому и возможностей обойти проверку нашелся целый мешок. Любой из вариантов можно вставить в самое начало:

  • стандартный DOCTYPE для svg (<!DOCTYPE svg …);
  • произвольный тег (<zzzz/>);
  • произвольный тег «инструкций» (<?xxxx ?>);
  • XML-комментарии (<!-- ->).

Следом мы вставляем валидный SVG, после него — валидный PDF. А дальше — в бой!

В общем, это очередное доказательство того, что черные списки крайне ненадежный подход. Но исследователи признают, что реального толка от найденной уязвимости не очень много. Как мы уже знаем, SVG «из коробки» — очень опасный формат, и если мы можем загрузить SVG на сервер, то почти точно сможем выполнять и код на JavaScript. Добавлять сюда возможности PDF не требуется.

В Adobe запатчили и эту уязвимость. Скорее всего, в черный список добавили символ <, так как он необходим для всех методов обхода (кстати, интересно было бы удостовериться в этом). Зато в Minded Security предложили использовать эту атаку для обхода некоторых вариантов настройки CSP, но метод иначе как наркоманским не назовешь.

PDF — очень многофункциональный формат. В нем есть такое понятие, как action, — некоторые действия. Одно из этих действий — GoToE позволяет сделать редирект на какой-то сайт. Для веба это привычная вещь, но в PDF, оказывается, отсутствует защита от редиректа на JavaScript. Если PDF загружается с помощью тега <object> или <embed>, то в нем можно указать редирект на скрипт, и тот будет выполнен в контексте того сайта, в который вставлен документ.

/GoToE /F (javascript:alert(location))

При чем тут SVG? Тут надо вспомнить, что этот формат позволяет подгружать внешние ресурсы и создавать внутри себя HTML. Можно сделать такой файл SVG-PDF, который при открытии будет отрабатывать как SVG, а потом сам себя загружать как PDF. Загруженный PDF, в свою очередь, будет делать редирект на исполнение кода.

Пример такого SVG-PDF можно увидеть на картинке.

SVG-PDF подгружает себя как PDF
SVG-PDF подгружает себя как PDF

Оставить мнение