Как я взломал Хабрахабр

    Не имел я несколько дней назад инвайта, но на Хабре был частым человеком и заходил сюда по своему аккаунту.

    Несколько дней назад я нажал на «Регистрация», вместо «Войти» и увидел перед собой форму регистрации на Хабрахабр. «А вдруг?» — подумал я — и начал вводить тест на XSS-уязвимость в каждое поле регистрации.

    И вот оно! Свершилось! Уязвимость была обнаружена в поле E-Mail. E-mail проверялся на правильность после перехода на следующее поле. В поле ввода E-Mail'а не было фильтрации, поэтому появилось сообщение с единичкой.

    Сначала я решил сделать какое-нибудь черное дело через уязвимость, но потом одумался и отписался в техподдержку.

    Было:
    image

    Стало:
    image

    На данный момент уязвимость закрыта, а я имею инвайт.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 95

      +109
      Пешы еще!
        +5
        Ты серьезно или просто так? А то я тут новенький, еще не понимаю, кто серьезно говорит, а кто в пустую…
          +92
          Здесь всё тлен.
          На самом деле, нет.
            +115
            >на Хабре был частым человеком и заходил сюда по своему аккаунту.
            >я тут новенький
            Шиза какая-то.
              –15
              Частым в плане чтения новостей, но не обсуждения их. Я комментарии даже и не читал, так как и ответить не мог!
                +140
                зря не читал.
                Часто в комментариях больше информации, чем в самом топике.
                Либо альтернативное решение задачи топика.
                  +11
                  А зря, тут в комментах информации порой больше чем в посте
                    +35
                    Особенно в этом? =))
                      +3
                      Ну, в Вашем так точно…
                        0
                        Ну что вы так, я же про пост :)
                    +2
                    В некоторых статьях вся соль именно в комментариях)

                    p.s. впредь всегда буду обновлять страницу перед публикацией комментария
                    +14
                    Я вроде совсем не новенький, но все равно не всегда понимаю кто говорит серьезно, а на что реагировать нужно с иронией ;)
                      +7
                      Они сами этого не понимают, всё в порядке.
                        0
                        Если остановиться и подумать — всё обычно становится ясно. Обычно многие держут «в уме» последний абзац или соседний пост, или местный мем, или правила хабрахабра.
                        В данном случае вполне может иметь место сарказм, рассматривающий основную цель хабрахабра: «делиться знаниями». Вот данный пост мне знаний не прибавил, оттого и у меня тоже первая мысль: «зачем оно мне?».
                          0
                          Более подробнее в нижнем комментарии раскрывается мысль:
                          habrahabr.ru/post/197466/#comment_6847770
                          А если «держать в уме» вывод, который получается, если остановиться и подумать, а именно — в данном случае SelfXSS, то всё станет ещё яснее.
                            +1
                            Это вы сейчас серьезно, или иронизируете?))
                        –11
                        я тут новенький, еще не понимаю
                        LOL..)
                      +17
                      Ну XSS-уязвимость это не так уж и серьезно. Максимум спереть куку
                        +5
                        А на хабре куки http-only, так что и их не сопрешь
                          –5
                          Максимум спереть куку админа, максимум получить доступ в админку, максимум слить базу, максимум залить шёлл… Даже уязвимости класса «раскрытие информации» могут быть полезными.
                            +9
                            Не в этом случае. Тут даже ссылку на стрничку с xss дать невозможно.
                              +5
                              Кажется я что-то не понял, а в чём тогда уязвимость? 0_о
                                +6
                                Ну так вся соль в этом — нет ее в таком виде, чтоб придумать как использовать на других пользователях.
                                  +1
                                  Теперь уже понял, спасибо.
                                    +1
                                    Неверно. Это самая обычная XSS и ее можно спокойно использовать. Довольно распространенное заблуждение полагать, что можно воспользоваться только теми XSS, в которых уязвимый параметр передается через GET.
                                      +1
                                      XSRF, для обхода фильтрации по рефереру и токенам, да.
                                        +1
                                        Здесь SELF XSS, ничего не выйдет.
                                    0
                                    А зачем вам давать ссылку на страницу с XSS? Даете ссылку на свой сайт (http://lolcats.lol/), там показываете картинку какого-нибудь смешного котика, а в скрытом iframe выполняете POST запрос на страницу регистрации, который выполняет необходимый JS. Все, вы имеете полный доступ к сессии пользователя.
                                      +7
                                      Хабр нельзя открыть во фрейме. SAMEORIGIN
                                        +5
                                        Вот это другое дело. А аргументация «Этой XSS нельзя воспользоваться, т.к. даже ссылку на стрничку с xss дать невозможно.» — это смешно и несерьезно, о чем я и писал.
                                          0
                                          зачем фрейм, если можно постить в target=_blank например.
                                            0
                                            фрейм не так заметен)
                                              0
                                              а пофиг заметен или нет, XSS то исполнится )
                                        +1
                                        К сожалению, политика безопасности браузеров такое не позволяет
                                          0
                                          Если не передаются заголовки на запрет открытия сайта во фрейме(X-Frame-Options: SAMEORIGIN(DENY)), то все проворачивается на раз-два.
                                            0
                                            Но POST запрос будет отправляться с другого домена только
                                              0
                                              Ну и какая разница? Делается такая страница:

                                              <iframe src="evilsite/1.html"></iframe>

                                              А в 1.html лежит:
                                              <form action="http://habrahabr.ru/user/register" method="POST"> <input type="hidden" name="email" value="XSS here"/> </form> <script> window.onload = function() {document.forms[0].submit()} </script>

                                              И если X-Frame-Options не установлены в SAMEORIGIN, то все прекрасно сработает.
                                                –1
                                                Разница в том, что это легко фильтруется по реферу
                                                  0
                                                  Фильтровать по рефереру вообще дурной тон, т.к. некоторые прокси его подменяют или вырезают, а пользователи с целью сохранения приватности могут вообще отключать его передачу.

                                                  Для защиты от XSS нужно использовать X-Frame-Options: SAMEORIGIN
                                                  Для защиты от CSRF — специальные токены

                                                  Фильтрация по рефереру ни там, ни там не является необходимой.
                                                    +2
                                                    Для защиты от XSS нужно фильтровать вводимые данные) Если есть на сайте xss, то токены не спасут :(
                                                    Данные можно передавать не только во фрейме, можно грубо автосабмитом формы с последующим перенаправлением и sameorigin не поможет.
                                                      –1
                                                      Само собой, для защиты от XSS в первую очередь фильтровать данные. X-Frame-Options на самом деле предназначены для защиты от Clickjacking'а, но помогают и против XSS иногда.

                                                      Токены я предлагал только от CSRF, от XSS они в большинстве случаев не помогают. Исключение — когда для того, чтобы сгенерировать страницу со сторонним скриптом нужно передать токен (здесь был пример habrahabr.ru/company/dsec/blog/195320/).

                                                      Можно подробнее о том, как сделать «автосабмит формы с последующим перенаправлением»?
                                                        –1
                                                        На своем сайте делаем форму с Post-dat'ой, и по онлоаду передаем форму на чужой скрипт. Не обязательно же делать тоже самое, но во фрейме. Фрейма нет, проверки реферера нет, данные переданы, SAMEORIGIN не помогает.
                                                +2
                                                Не все админы правильно формируют регулярки проверки реферера, если вы об этом, например, на хабре, изловчившись, можно было отправить запрос с похожего домена(сейчас fixed) и такое встречается часто.
                                              0
                                              К счастью*
                                        –4
                                        Не так серьезно, как SQLi, но достаточно серьезно.

                                        XSS это не только «спереть куку». Это получить доступ к выполнению любых действий от имени пользователя, которые не требуют дополнительной авторизации (ввод пароля или двухфакторной аутентификации). Очевидно, что с помощью JS выполняемого в контексте уязвимого сайта можно отправлять запросы и получать ответы. При этом даже HttpOnly Cookie будут отправлены вместе с запросом. Более того, есть инструменты, которые позволяют этот процесс упростить до безобразия: blog.andlabs.org/2010/07/shell-of-future-reverse-web-shell.html

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

                                        Критичность XSS на странице авторизации и регистрации обычно ниже, т.к. на этих страницах пользователь еще не аутентифицирован и, соответственно, не имеет никаких привилегий. Но, во-первых, можно запустить у пользователя выше упомянутый Shell of The Future и подождать, пока он залогинится. А, во-вторых, на хабре страница регистрации отображается даже для уже авторизованных пользователей, так что вполне можно атаковать и их.
                                          –2
                                          В хроме и ие уже стоят фильтры на XSS, осталось дождаться солидарной поддержки со стороны других и забудем о пассивках навсегда :)
                                            0
                                            Мне терминология «активная» и «пассивная» XSS непонятна в принципе. Reflected (отраженная) и Stored (хранимая). От первых защиту в браузеры уже встраивают, хотя она далеко не всегда помогает, т.к. не всегда уязвимость тривиальна. Так что точно не навсегда.
                                              –1
                                              Это называется жаргон. Давно не следил за этой темой, но если я не ошибаюсь, то единственный «обход» — передаваемые данные уже внутри Js, остальные же извращения регулярно фиксят.
                                                –1
                                                Уязвимости могут быть разными. Например, самопальные фильтры вводимых данных, которые вырезают «опасное» содержимое.

                                                Передаем: <scri
                                                  +1
                                                  Fixed:

                                                  Уязвимости могут быть разными. Например, самопальные фильтры вводимых данных, которые вырезают «опасное» содержимое.

                                                  Передаем: <scri<object>pt>
                                                  Получаем: <script>

                                                  А могут быть XSS из-за неправильного преобразования кодировок или небезопасной работы с битыми последовательностями в мультибайтных кодировках.

                                                  Такие вещи автоматическими фильтрами не покрываются.
                                              0
                                              зачем то заминусовали адекватный комент
                                            +3
                                            одумался и отписался в техподдержку

                                            Поевезло, что техподдержка на хабре адекватная.
                                            А то бы вышло как с Фейсбуком )
                                              +1
                                              Мне много не надо, мне инвайта хватит…
                                              +76
                                              Переименуйте в «Как я НЕ взломал Хабр, а написал в техподдержку»
                                                +51
                                                И перенесите в «Я пиарюсь» еще до кучи
                                                +8
                                                  +16
                                                  > Сначала я решил сделать какое-нибудь черное дело через уязвимость

                                                  Я что-то не пойму, что вообще можно сделать через эту уязвимость? Приведите пример, как ее можно эксплуатировать?
                                                    +9
                                                    никак, поэтому и написал
                                                      +1
                                                      Уязвимость нельзя эксплуатировать — поэтому написали в саппорт? Иначе бы реально кого-то взломали? Так нужно трактовать Ваш краткий ответ?
                                                        0
                                                        Вы все верно поняли, только «написал» — «автор написал в саппорт»
                                                      +54
                                                      Вывести себе алерт, например.
                                                        +18
                                                        На мой взгляд, у вас самое замечательное оформления сарказма из возможных. Спасибо за идею :)
                                                          +8
                                                          А по-моему, самое замечательное оформление сарказма — это без тегов, смайликов, спойлеров и всего остального.
                                                          Просто если сарказм хороший, его и так поймут, а если не поймут — значит, плохой.
                                                            –1
                                                            Хороший = народный, понятный всем и каждому?
                                                              +3
                                                              Вообще, да. Юмор, ирония и сарказм должны быть понятны аудитории. Иначе зачем они нужны?
                                                              А клеить тег <sarcasm> — это так же тупо, как объяснять анекдоты. Если сарказм непонятен, и это очевидно даже автору — лучше бы его не было совсем (<joke>сарказма, а не автора</joke>).
                                                                +1
                                                                Лучшая шутка та, которую поняли не все.

                                                                Английская пословица

                                                                Но блеснуть на Хабре тонким английским юмором без последствий вряд ли получится. Непонявшие заминусуют )
                                                                  0
                                                                  По-моему, юмор на этом и строится — на ощущении «Не понял… не понял… А! Понял! Хахаха!».
                                                                  И чем дольше и напряженнее это «Не понял», тем шутка лучше и тоньше. Самое трудное — это найти баланс, чтобы было понятно не сразу, но в итоге, всё-таки, понятно.
                                                      +10
                                                      Первым делом осваивайте habracut
                                                        +19
                                                        Желтизна в заголовке!)
                                                          0
                                                          Пассивная XSS, серьезно? С учетом того, что хром, опера, ие явно фильтруют любую пассивную инъекцию(с некоторыми оговорками).
                                                          Я тоже, кстати, подобным образом инвайт получил, но там было немного интереснее :)
                                                          +20
                                                          image

                                                          Пост, достойный 1337 haxxor'а =).
                                                            +6
                                                            Self-XSS )
                                                              +1
                                                              Отличная программа поощрения поиска багов от Хабра. Нашел баг — отписался в техподдержку — получил инвайт. Объявили бы об этом официально.
                                                                0
                                                                Такой заголовок… Я удивлен как ещё о нём не сказали в новостях.
                                                                +5
                                                                Как мало человеку нужно для счастья.
                                                                  +2
                                                                  Перенесите в блог «Информационная безопасность», пусть держит уровень!
                                                                    +16
                                                                    У меня тоже есть история!

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

                                                                    Несколько дней назад я нажал на «Хабрахабр», вместо «Вконтакте» и увидел перед собой Хабрахабр. «А вдруг?» — подумал я — и начал вводить какие-то буквы в каждое поле.

                                                                    И вот оно! Свершилось! Уязвимость была обнаружена в адресной строке браузера. Буквы проверялись на правильность после перехода на следующее поле. В поле ввода url'а не было фильтрации, по этому сообщение с единичкой появилось.

                                                                    Сначала я решил сделать какое-нибудь черное дело через уязвимость, но потом одумался и отписался в техподдержку.

                                                                    Было

                                                                    Стало
                                                                      +15
                                                                      Жесть какая, куда только эти разработчики смотрят? Такую дырищу оставить на самом видном месте. После этого не пользуюсь браузерами.
                                                                        +5
                                                                        «Зачем мне Chrome и Firefox, я юзаю wget.
                                                                        Я ведь не браузер смотрю, а интернет.»
                                                                        0
                                                                        я думаю стоит доверять только курлу
                                                                          0
                                                                          Спс, посмеялся от души!
                                                                          0
                                                                          Когда то давно получил инвайт за найденный на нестандартном порту бэкэнд, в котором не блокировались запросы к папке .svn, в которой лежали исходники, в т.ч. всякие пароли…
                                                                          Я ни разу не афишировал это, а тут странный XSS, которой очень сложно использовать.
                                                                          Я не знаю есть ли смысл ставить куку в .habrahabr.ru, поддоменов вроде бы уже нет.
                                                                            +1
                                                                            Самое время вспомнить про Эффект Даннинга — Крюгера
                                                                              0
                                                                              Принципы не позволяют выкладывать какие — то умные способы обхода в публичный доступ, есть другая работа, кроме как отлавливать юных хакеров из логов. Скорее хочется наоборот продвигать безопасность систем, а не способы компрометации.
                                                                              0
                                                                              «Я ни разу не афишировал это» = false
                                                                              +2
                                                                              пост написан в 13:37 :) совпадение или автор старался попасть именно в этом время? )
                                                                                +5
                                                                                Are you ***** kidding me? :D

                                                                                «Взломал Хабр», «постовый script alert» = инвайт на хабр?)) требую себе второй! :D
                                                                                  +1
                                                                                  Сначала я решил сделать какое-нибудь черное дело через уязвимость, но потом одумался и отписался в техподдержку.


                                                                                  Какое-такое черное дело? Попросить админа ввести код вредноносного скрипта в поле email?

                                                                                  Кстати, на руках есть активка на ICQ.com, стоит рассказать Хабру о ней? В техподдержку майлру писал, меня попросили прислать скрины ошибки, и ничего не пофиксили.
                                                                                    +1
                                                                                    Есть bugscollector.com x)
                                                                                      +2
                                                                                      Вы молодец, хороший сайт, хоть и требует доработки.
                                                                                      Вот мой каммит в виде актуального контента.

                                                                                      bugscollector.com/db/icq.com/57/
                                                                                      (активная xss на icq.com)
                                                                                        0
                                                                                        Нет, это не активная XSS, это пассивная.
                                                                                          +3
                                                                                          «Активная» и «пассивная» — очень плохой выбор для классификации XSS (даже в качестве жаргона). Во-первых, непонятно «активная» она потому, что срабатывает сама (активизируется) или требует активности от пользователя. Во-вторых, грань между ними не очень четкая. Например, stored XSS в имени пользователя, которая срабатывает на любой странице, где отображается это имя — активная по вашей классификации. А теперь представим, что по умолчанию отображается только логин пользователя, а имя отображается только по наведению на аватарку и, соответственно, XSS срабатывает только при наведении на аватарку. Вроде бы та же самая уязвимость, в том же самом месте, но уже требует действий от пользователя — пассивная? А теперь берем reflected XSS в названии поста (GET параметр). Вроде бы пассивная XSS — для использования мы рассылаем ссылку на какую-то страницу и хотим, чтобы пользователь туда перешел. Теперь вспоминаем первую, stored XSS в имени пользователя, и представляем, что она срабатывает только в профиле пользователя, адрес которого по умолчанию никому неизвестен. Для использования приходится рассылать ссылку на эту страницу и ждать действий пользователя. Она теперь пассивной стала? А если на одной странице она срабатывает по умолчанию, а на другой — по какому-то действию пользователя?

                                                                                          А как насчет DOM-based XSS? Они все пассивные? Или активные?

                                                                                          Фактически получается, что активная-пассивная характеризует не уязвимость, а конкретный способ ее использования, при этом еще и довольно плохо характеризует, без какой-либо четкой классификации.
                                                                                            0
                                                                                            На самом деле у меня их две: активная и пассивная, и я случайно запостил пассивную под именем активной. Настоящую активку запостю позже, но вы дело говорите!
                                                                                    0
                                                                                    habrahabr.ru/users/InCode
                                                                                    Аффтар(tm) в Read-only.

                                                                                    К успеху так пришёл. (-:

                                                                                    Only users with full accounts can post comments. Log in, please.