Універсальна XSS в PDF

18:40 14.01.2007

Раніше я вже розповідав вам про Cross-Site Scripting (давав лінку на вікіпедію, з часом планую опублікувати мою власну статтю про XSS), а також розповідав про Самодостатній Cross-Site Scripting, один з різновидів XSS, і торкався теми XSS в DOM (про яку також підготую змістовну статтю). А зараз розповім вам про ще один різновид XSS атак - UXSS в PDF.

Універсальний Cross-Site Scripting в форматі PDF (Універсальна XSS в PDF, або скорочено UXSS в PDF) - це новий вид XSS атак, який з’явився (офіційно) на початку цього року, після того, як деякі західні сеюріті спеціалісти публікували інформацію в себе на сайті. Після чого розпочалося жваве обговорення цієї проблеми, і експерти та секюріті спільнота почали давати оцінки цій уразливості та можливим наслідками її поширення та використання уразливості для атак на різні сайти в Мережі. В цілому секюріті есперти оцінили урзливість як серйозну (тут потрібно враховувати ще конкретний сайт, де уразливість проявляється) й в цьому я з ними солідарен, і я теж важаю її небезпечною.

При цьому уразливість дуже поширена, тому від цього вона стає ще більш небезпечною. Уразливість UXSS в PDF базується на помилці в плагіни (для різних браузерів) Adobe Acrobat. І враховуючи, що це один з найпоширених плагінів (популярніше лише флеш плагін), то можна оцінити маштаби поширенності цієї уразливості та її ризик в маштабі всього Інтернета. Бо вразливими стають усі сайти, які мають розміщені в себе pdf файли. А сама уразливість названа “Універсальна XSS” тому, що немає потреби включати шкідливий код в саму pdf-ку, і не потрібно завантажувати файл на сайт, який атакується, лише потрібно використати будь-який готовий pdf файл (або якщо його немає на сайті, але існує можливість закачувати власні файли, то можна закачати будь-яку звичайну pdf-ку, без додаткових включень, тому ативіруси тут не допоможуть).

Використання уразливості

Безпосередньо сама атака з використанням UXSS в PDF проводиться дуже просто. Потрібно мати на сайті pdf-файл і потрібно лише підключити до нього шкідливий код.

http://site/file.pdf#whatever_name=javascript:your_code

Атакуючий код підключається до адреси pdf-файла, після символа # (який використовується для посилання на якорі), після якого йде ідентифікатор якоря (anchor identifier). В якості даного ідентифікатора можна використати будь-яке ім’я (в наступних прикладах використано “xss”), до якого після символу “=” додається шкідливий java-script код.

Код: alert(’XSS’)

http://site/file.pdf#xss=javascript:alert('XSS')

Код: alert(document.cookie)

http://site/file.pdf#xss=javascript:alert(document.cookie)

Як ви бачите нескладно сформувати зловминий код, який потім використати для атаки сайтів, на яких є pdf-файли. Причому враховуючи велику поширеність Акробат плагіна можете оцінити маштаби цієї уразливості - бо в даний час є до 317 000 000 сайтів в Мережі, які мають pdf файли (по інформації від Гугла). І майже всі вони вразливі до цієї атаки (тому всім адмінам цих сайтів прийдеться мати справу з Universal XSS в PDF).

Поширеність загрози

Уразливість дуже поширена, бо плагін існує під різні браузери. На даний час наявність цієї уразливості була підтверджена:

  • IE6 + Acrobat Reader 4 + XP SP2
  • IE6 + Acrobat Reader 6 + XP SP2
  • IE6 + Acrobat Reader 7 + XP SP1
  • Firefox 2.0.0.1
  • Firefox 1.5.0.8
  • Firefox 1.5.0.9
  • Opera 8.5.4 build 770
  • Opera 9.10.8679
  • Mozilla 1.7.7

А також потенційно всі попередні версії Firefox, Mozilla (та браузерів на їх движках), а також IE5 та IE6 на попередніх Windows XP (таких як Gold and SP1). Та можливо IE5 та IE6 на Windows відмінних від XP. Головне щоб був Acrobat плагін (зафіксовані також випадки роботи цієї уразливості на Linux в браузері Firefox).

Ось вам два реальних приклади (один простий та один більш комплексний) UXSS в PDF атаки. В прикладі наводиться уразливість на сайті www.microsoft.com (раніше я вже приводив приклад подібної уразливості на сайті ЦРУ). Причому на сайті Microsoft подібних дір майже 827 штук!

http://www.microsoft.com/windows2000/docs/TCO.pdf#xss=javascript:alert(’XSS’)
http://www.microsoft.com/windows2000/docs/TCO.pdf#xss=javascript:function createXMLHttpRequest(){ try{ return new ActiveXObject(’Msxml2.XMLHTTP’); }catch(e){}   try{ return new ActiveXObject(’Microsoft.XMLHTTP’); }catch(e){}   try{ return new XMLHttpRequest(); }catch(e){} return null;}var xhr = createXMLHttpRequest();xhr.onreadystatechange = function(){ if (xhr.readyState == 4) alert(xhr.responseText);};xhr.open(’GET’, ‘http://www.microsoft.com’, true);xhr.send(null);

В першому прикладі визивається повідомлення (alert) з надписом ‘XSS’, а в другому завантажується головна сторінка сайта Майкрософт і виводиться в тексті повідомлення. Подібні речі можуть використовувати в своєму алгоритмі XSS-віруси, які будуть розповсюджуватися на сайті через UXSS діри.

Протидія уразливості

Для протідії UXSS в PDF атакам можна використовувати різні підходи:

1. Чекати поки користувачі встановлять оновлення для свого Акробат плагіна , або оновлять його до 8 версії (а також потрібно самому не забути це зробити, бо адміни сайтів також повинні бути захищеними). Що затягнеться на довго, тому це не ефективний підхід.

2. Виправити цю уразливість на сервері. Це більш реальний підхід. Можливі наступні варіанти:

  • Взагалі прибрати pdf-ки.
  • Винести їх на інший домен, тоді атаки на кукіси користувачів сайта стануть неможливі (але прямі атаки залишаться).
  • Занести pdf-файли в архіви.
  • Змінити заголовок сервера для даного типа файлів (додати “Content-disposition: attachement filename=file.pdf”, щоб файл не відкривався в плагіні, а щоб одразу відкривалося вікно для збереження файла).

Додаткова інформація:

  • DANGER, DANGER, DANGER (деталі)
  • Universal XSS in PDFs (деталі)
  • Cross-site scripting vulnerability in versions 7.0.8 and earlier of Adobe Reader and Acrobat (деталі)

7 відповідей на “Універсальна XSS в PDF”

  1. trovich каже:

    Терпіти не можу читати PDF у браузері. Всюди стоїть у налаштуваннях одразу пропонувати зберегти файл на диск. Тому для мене проблеми немає.
    Тим не менш, цікаво, як можна якось виконати 4-й пункт для файлів, котрі роздаються напряму, не через скрипт. Засобами Apache, чи що. Бачу такий спосіб: можна в .htaccess “ловити” звернення і завертати на скрипт, котрий вже віддаватиме файл із хедером.

  2. trovich каже:

    “Users with Foxit PDF viewer are not vulnerable to this; at least those without the JavaScript plugin installed (the default). So those who learn’t last time round should be ok.”
    Хех, маю саме його ;)

  3. MustLive каже:

    Бачиш в тебе все добре в цьому відношенн, trovich. Бо використовуєш Foxit PDF (в цьому випадку головне щоб Акробата не було зовсім в системі і як мінімум щоб до жодного браузера він не був підключений).

    Тим не менш, цікаво, як можна якось виконати 4-й пункт для файлів, котрі роздаються напряму, не через скрипт.

    Файли pdf фожна віддавати як через скрипт, так і напряму, через настройки Апача (в .htaccess). На сайтах вказаних в додатковій інформації наводяться приклади. Причому не тільки варіант зі скриптом обробником pdf-ок (це поширений підхід), а можно просто додати потрібні налаштування заголовків в .htaccess, щоб сервер віддавав файли як слід.

    Також настроювання Апача м.б. використані для редирекції та у випадку винесення pdf-ок на інший домен, але в цьому випадку можливі деякі нюанси, які можуть дозволити обійти фільтри. Тому найкращий варіант - це встановлення заголовка сервера.

  4. trovich каже:

    В чому небезпека присутності Акробата в системі взагалі? Я їм інколи роблю PDF-ки, але ніколи не читаю.

  5. MustLive каже:

    trovich, в цій статті про Універсальну XSS в PDF я не все розповів (вже і так вийшла чимала стаття), і я ще окремо розповім про напад через цю диру на локальний ПК користувача.

    Плюс ще варто пам’ятати, про що можна прочитати на сайті Адоба (та деякі секюріті сайти писали про це в новинах), лінку на який я дав в додатковій інформації, що окрім UXSS багу, також є інший баг (ще більш серйозний), який дозволяє захопити контроль над комп’ютером жертви.

    Стосовно наявності самого Акробата, то я мав наувазі, що треба, щоб не було підключених акробат плагінів до браузерів (або їх треба пропатчити, або оновити до 8ї версії). А також я ще додатково розповім про інші загрози від UXSS, окрім вже згаданих в цій статті.

  6. DiGiTAL каже:

    БАЯН

  7. trovich каже:

    DiGiTAL: ти ше звідки вилізло, таке розумне?

Leave a Reply

You must be logged in to post a comment.