Виконання JavaScript через редирекцію в Firefox
20:04 04.07.2009В своєму записі Firefox Header Redirection JavaScript Execution, RSnake ще в березні 2007 розповів про знайдену ним можливість виконання JavaScript коду через редирекцію через серверні заголовки. Він використав редирекцію з часовою затримкою (в декілька секунд), для виконання JS через редирекцію через заголовок refresh.
Дана атака спрацювала в нього лише в Firefox (в мене дана атака також спрацювала в Mozilla). А в коментарях до запису, читачі сайту зазначили, що в Safari дана атака також працює.
Нещодавно я писав про Cross-Site Scripting уразливості в Mozilla, Internet Explorer, Opera та Chrome, що я знайшов 28.06.2009. В даному випадку також використовується заголовок refresh.
Але на відміну від Роберта aka RSnake, в моєму дослідженні йдеться не лише про уразливість в Firefox (і в браузерах на движку Мозіла), а взагалі в усіх браузерах (зокрема тих, що є в мене). І серед усіх браузерів дана уразливість була виправлена лише в Firefox 3.0.9.
Іншою визначальною особливістю мого метода є те, що це редирекція без затримки (тобто з нульовою затримкою). Яка і дозволяє даній атаці через заголовок refresh працювати в усіх браузерах (з числа мною перевірених). Тому даний метод є цікавим вектором XSS атак.
Неділя, 10:26 05.07.2009
Не дуже зрозуміло як воно влаштовано - код сторінки з прикладом ніц не показує, але в Seamonkey (так уже давно називається колишня Mozilla, а двигун називається Gecko) працює. Вогнелис у мене вже оновлений, тому не вдалося перевірити.
Неділя, 20:52 05.07.2009
trovich, в Seamonkey дана атака працює, бо Мозіла не виправила в ньому дірку, тільки в Firefox 3.0.9 (що є вибірковий підхід, і це було несерйозно з їх боку в Seamonkey не виправити).
А ось Firefox в тебе оновлений, тому й атака не працює. Зате в усіх інших браузерах в тебе буде працювати моя атака, про яку я писав вище (через редиректори з нульовою затримкою).
Дана атака відбувається через редирекцію через заголовок refresh.
Прочитай мій опис XSS уразливості в Mozilla, Internet Explorer, Opera та Chrome, там я детально пояснив схему атаки.
Так, офіційно двигун називається Gecko. Але для визначення всіх браузерів від Мозіла на даному двигуні я використую визначення “движок Мозіла”. До речі, Мозіла сама нерідко таке визначення використовує
. Це пов’язано з тим, що назва Gecko маловідома, на відміну від бренду Mozilla, тому й більш зручно використовувати саме визначення “движок Мозіла”.
Неділя, 21:56 05.07.2009
>це було несерйозно з їх боку в Seamonkey не виправити
Наскільки я розумію, це різні проєкти з різними командами розробників та різними планами релізів, так що немає нічого дивного.
>я детально пояснив схему атаки
Я просто завжди пробую зрозуміти з точки зору розробника сайту, який може за незнанням (чи ще з якихось причин) створити у себе можливість для описаної атаки, а не сферичну вразливість у вакуумі.
Тому пробую зрозуміти де така техніка передачи даних з URL в Refresh може бути використана. Хіба що для системи редиректорів сайту, коли теґи використовуються для підстраховки header.
>Мозіла сама нерідко таке визначення використовує
В конторі Мозілла багато людей працює, і я підозрюю, цей термін можуть використовувати в основному “не-технічні” особи, себто всілякі сейлзи та менеджери.
Ми ж, люди технічного напрямку мислення та діяльності, маємо бути точними у визначеннях
Четвер, 23:38 09.07.2009
Так, це різні проекти (після того як Мозіла вирішила зосередитися на Firefox і Thunderbird, та відкрила окрему компанію для цього). Але це насправді дивно, тому що Мозіла завжди виправляла дірки в обох Firefox і Seamonkey, якщо знаходили дірки в них обох.
Цього разу дірки були знайдені в них обох. Але як ти можеш прочитати, серед вразливих продуктів вказані “Firefox, SeaMonkey”, а виправлено лише в “Firefox 3.0.9″. А в іншому випадку - Мозіла виправила в усіх заявлених уразливих продуктах. Як це вона завжди і робить. Тому даний випадок, коли вони виправили дірку лише в одному браузері виглядає дивним, мабуть просто полінилися
.
Сергій, дана техніка й атака на неї можуть бути використані саме для редиректорів. Бо існують як location-header редиректори (які більш поширені), так і refresh-header редиректори (які менш поширені, але все рівно є в Мережі).
Як я писав в коментарях до мого опису XSS уразливості в Mozilla, Internet Explorer, Opera та Chrome, я знайшов XSS дірку у популярному веб додатку, яка працює через resfresh-header редиректор (і тому чимало сайтів в Інтернеті є вразливими). В даному випадку мова йде саме про редиректори чере хедери, тому підстраховувати хедери тут не потрібно, через них і йде редирекція (просто можливі два варіанти редиректорів через два різних серверних заголовка).
Аж ніяк, подібні вислови я бачив саме у месаджах від “технічних” людей - в Mozilla Foundation Security Advisory. Зокрема не так давно в одному MFSA (точно не пригадую в якому - якщо хочеш, то можеш зайти на їх сайт і почитати всі MFSA для Firefox 3). Вони використали термін “код Мозіли” (замість вказання Gecko).
Тобто вони в цьому плані зі мною солідарні
, що більш зручно використовувати бренд Mozilla для позначення всіх браузерів на даному двигуні, ніж назву Gecko. Я вже багато років для короткого визначення всіх браузерів на даному двигуні використую визначення “движок Мозіла”. І, як я вже казав, враховуючи, що бренд Мозіли є більш відомим за назву двигуна, то можна використовувати саме такий підхід. До того ж, не будеш ти писати всю історію движка Gecko, згадувати, що не Мозіла його першою створила, а Нетскейп і т.д, коли тобі треба однією фразою сказати, що всі браузери на даному движку вразливі. Тому й такий підхід є оптимальним (а знаючи люди зрозуміють про який саме двигун йдеться).