Securelist.com — XSS и SQL Injection уязвимости

    image image
    Всем привет!
    Securelist.com разрабатывается Лабораторией Касперского. На сайте есть блог, в котором постяться сотрудники ЛК, а простые пользователи, зарегистрировавшись, могут их комментировать. У комментраиев есть рейтинг. Как только рейтинг всех комментариев пользователя становится >=100, то пользователь получает статус блоггера и может постить в блог. И однажды я там зарегистрировался…


    [Disclaimer]
    Все действия, описанные ниже, представлены исключительно для ознакомения. Администрация портала была поставлена в известность обо всех уязвимостях, найденных на сайте. Для снятия некоторых скриншотов сайта я воспользовался сервисом peeep.us хабрапользователя snusmumrik. Отдельное спасибо команде портала R3AL.RU за помощь и поддержку.

    [XSS]
    Зарегистрировавшись, я решил провести стандартный тест на XSS-уязвимость. Я вставил JS-script с alert'ом и он сработал, т.е. в поле Логина не было фильтрации против XSS.
    Не долго думая, я вставил сниффер, прокомментировал несколько блогов и стал ждать. Сниффер висел на сайте около месяца. За это время я смог перехватить 91 аккаунт к сайту. Давайте рассмотрим работу сайта подробнее:
    1) Пользователь вводит логин и пароль
    2) Сайт записывает в cookie (VLUserkaspru) пользователя параметры в виде:
    id:19DEShash
    где id — идентификатор пользователя (можно узнать по ссылке: securelist.com/ru/userinfo/id)
    19DEShash — стандартный php DES-хеш с salt=19
    3) При переходе на любую страницу сайта, скрипт берет cookie пользователя и разбивает на 2 части (по ":"), выбирает из БД пароль пользователя, где id=id, и сравнивает хеш пароля из базы со значением хеша из cookie.
    Это значит, что, перехватив 1 раз cookie, я могу заходить на сайт когда угодно (или я могу сбрутить хеш).
    Я решил узнать, как же хранятся пароли в базе. Проверить это было очень просто — нажимаем ссылку «Забыл пароль» и нам на E-Mail приходит пароль в открытом виде. Это значит, что пароли в базе хранятся открыто, не хешами.
    Зайдя в аккаунт, я обнаружил, что я могу сменить E-Mail для восстановления пароля. Для подтверждения смены E-Mail'а ссылка приходила только на новый E-Mail => я могу в любом аккаунте изменить E-Mail, подтвердить его и вернуть на него пароль в открытом виде.
    Поскольку я перехватил cookie сотрудников ЛК, я мог зайти в панель управления блогом. Она выглядела так:
    image
    Вид профиля пользователя со статусом «Администратор» изнутри:
    image
    Проведя несколько тестов, я обнаружил, что текст блога тоже не фильтруется => я могу вставить туда любой HTML/JS код (например, эксплоит).
    Вот так выглядит страница редактирования блога:
    image
    Поле загловка постинга тоже не фильтруется, а заголовок выводится на главную => мы можем сделать небольшой deface:
    imageimage
    Ну, или так:
    imageimage
    И специально для Хабрахабра.
    Список интересных id, cookie которых я смог перехватить:
    69 — Дмитрий Бестужев, Эксперт «Лаборатории Касперского»
    72 — Сергей Голованов, Эксперт «Лаборатории Касперского»
    81 — Мария Наместникова, Эксперт «Лаборатории Касперского»
    82 — Юрий Наместников, Эксперт «Лаборатории Касперского»
    85 — Татьяна Никитина, Блоггер
    1052 — dr, Администратор
    7053 — Александр Гостев, Эксперт «Лаборатории Касперского»

    [SQL-Injection]
    Прошло немного времени, и я уже хотел сообщить администрации сайта об уязвимости, но решил проверить параметры cookie на фильтрацию. И оказалось, что id не фильтруется!
    Подставляя в куки различные параметры я узнал, что там Blind SQL Injection:
    12345) AND 1=2--:hash
    При таком параметре меня в мой аккаунт не пускало, зато при
    12345) AND 1=1--:hash
    я заходил как залогиненый юзер.
    Пару часов я потратил на то, чтобы добиться нормального Blind-вывода. В итоге получил:
    12345) AND 1=1 AND (SELECT ascii(substring(version(),1,1)))>100--:hash
    Те, кто знают SQL без труда смогут понять, что здесь я сравниваю ascii-код первого символа версии c 100. Если он больше 100, то я становлюсь пользователем (AND TRUE AND TRUE), иначе, я — гость (AND TRUE AND FALSE). Путем подстановки разных значений, я могу узнать ascii-код символа и перевести его в символ.
    На сервере крутится PostgreSQL не самой последней версии.
    Выводим таблички из INFORMATION_SCHEMA.TABLES:
    12345) AND 1=1 AND (SELECT ascii(substring(table_name,1,1)) from INFORMATION_SCHEMA.TABLES LIMIT 1 OFFSET 1)>100--:hash
    И вот я уже начал выводить имена таблиц, но случился облом: вывести я смог только название первой таблицы, и уязвимость перестала работать (скорее всего, администратор спалил логи, однако не исключаю факт, что кто-то шепнул).

    Совсем недавно на securelist.com появилась новая запись под названием «XSS для начинающих». =)
    XSS уязвимость так и не исправили, хотя я направлял письмо в support и сообщение в книгу жалоб и предложений ЛК (ответили, что все необходимые меры были приняты). Может быть, этот пост заставит администрацию наконец-то закрыть уязвимость.

    UPD: Внимание! Это не пиар сайта, фирмы или продукта продукта.
    UPD2: На тему:
    Волшебный триптих или вредные советы от KAV (статья появилась раньше моего исследования, однако, про нее я узнал совершенно недавно).
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

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

      +40
      молодец! =)
      что самое интересное и неожиданное — что пишут о безопасности, и сами не могут себя защитить…
        +2
        Зато, теоретически, могут посадить
          +1
          даже не теоретически, а практически )
          ну в большом счете это будет зависить от администрации сайта, от их совести.
          автор топика же с хорошими намерениями все это делал,
          целью не было сделай дефайс, или удалить все файлы, ..etc, а показать и виправить ошибки в работе сайта.
          плюс он сообщил о своих дейсвиях, и о найденых багах.
          — в «народе» это называется «белый взлом», или «белый хак», когда цель — помочь сайту, а не навредить ему.
            +9
            В доблестной милиции, при случае, с удовольствием послушают про «белый хак»
              +1
              Белый хакер — по натуре не злодей — поэтому тонкости хакерского дела ему нужны, чтобы как раз обеспечивать безопасность. Это специалист, который взламывает систему, чтобы указать владельцу ее слабые места.
              «Черные» же используют эти дыры в программном коде для того, чтобы шантажировать владельца и зарабатывать на этом деньги.
              «Но «белым» хакерам по уровню знаний далеко до «черных» — мотиваций профессионального роста у вторых больше: сколько взломал — столько заработал»
              tutamc.com/node/218
                +2
                Ага, расскажи ментам, что Робин-Гут не разбойник ;)
              0
              За изменение своих куков на своей машине, и за их ошибки с фильтрацией xss статья? Пользователь то ничего толком не делал противозаконного. Он вводил данные туда, куда их было можно вводить.
                0
                Есть такая формулировка в УКРФ, как несанкционированный доступ. Так что вводить можно все что угодно, а вот санкций на вход в админку у товарища явно не было. Так что это все на свой страх и риск.
              0
              С одной стороны — это «статья» и автор явно палится, но с другой, претензии со стороны ЛК вызовут шумиху и при таком раскладе, ощутимо ударят по их репутации).
                +4
                А надо бы предложить работу ;)
                • НЛО прилетело и опубликовало эту надпись здесь
                    0
                    Так статистику раскрываемости надо повышать
                +1
                Когда-то для своего местечкового сообщества роллеров писал много всяких штук без всяких фильтров. Потому что как бы «для своих». А когда таких своих стало слишком много, начались проблемы.
                  +9
                  из серии-" У сапожника всегда свои сапоги дырявые"
                    +7
                    Спасибо.интересно.люблю читать подобное:)
                      +5
                      Ущипнули медведя за яйца.
                        –7
                        Уронили Мишку на пол, оторвали Мишке яйки

                        :D
                        +19
                        после «интернета по паспорту» как-то неприятно теперь касаться продуктов касперского…
                          –12
                          На мой взгляд это грязный пиар securelist.com/ru/. Не верю я что у таких компаний бывают такие дырявые сайты. Если ошибаюсь — автор молодец. Касперский в любом случае отстой.
                            +2
                            Вот хотел я написать, что это не пиар (слишком уж черный), но передумал, видимо, зря. А качество продуктов ЛК я тут не обсуждаю.
                              –1
                              KIS 2010 — молодец
                                0
                                Касперский — мощный антивирь в руках растущих из нужного места. Хотя, многим, у которых с руками и головой все в порядке — достаточно чего-то более простого.
                                  0
                                  Например Linux'а.
                                    0
                                    Да. Использую сам. Однако, если судить об антивирусах — линукс будет оффтопиком.
                                +16
                                > На сайте есть блог, в котором постяться сотрудники ЛК

                                А также молятЬся и слушаютЬ радио «Радонеж».
                                  0
                                  «РадонежЪ»!
                                  –5
                                  Пару часов я потратил на то, чтобы добиться нормального Blind-вывода.

                                  blind-вывод звучит как оксюморон. Пара часов от AND 1=1 до (SELECT ascii(substring(version(),1,1))) стоит сказать очень долго
                                    –3
                                    О ужас… css сломался :(
                                      –2
                                      вы не туда статью написали

                                      вот напишите ее на xakep.ru — вам еще и гонорар могут выплатить

                                      еще в таких статьях нужно делать преамбулу как в сауспарке для защиты от дурака, мол все чисто для ознакомительных целей и любые совпадения случайны )
                                        0
                                        если это правда… сушите сухари
                                          +2
                                          Если автор топика перестанет отвечать на комментарии, то за ним уже приехали
                                          +2
                                          Кстати интересно. Когда сохраняешь на peeep.us какую-то страницу. Теоретически, если она содержит вредоносный javascript, он может стырить куки от peeep.us? Ведь страница по сути грузится с домена peeep.us.
                                            +2
                                            Внизу надо дописать:
                                            «Страшно? =)»
                                              +1
                                              Решил поискать как kis блокирует xss (это было в комментариях на их сайте), но наткнулся на то, что для касперского XSS это не впервые: news.softpedia.com/news/Symantec-and-Kaspersky-Websites-XSSed-109559.shtml
                                                0
                                                А не разьясните смысл фразы «Не долго думая, я вставил сниффер, прокомментировал несколько блогов и стал ждать.» Как это вставил? ))
                                                  +1
                                                  Я вставил скрипт, передающий данные (cookie) на мой php-скрипт.
                                                    0
                                                    а, понял, спасибо )
                                                  +3
                                                  ясен пень, некогда блогом заниматься, все заняты выбиванием бабла из государства на безопасный интернет.
                                                    +1
                                                    да, вот они — развлечения лихой молодости :)
                                                      +2
                                                      Ой, да не говори!
                                                      +4
                                                      Странно. OpenDNS считает этот сайт порнографическим… К чему бы это? :)
                                                        0
                                                        Вот такакя фигня выходит, когда десктопные программисты берутся за сайты. Не подпускайте их к этому делу!
                                                          0
                                                          >> На сайте есть блог, в котором постяться сотрудники ЛК.

                                                          не сочтите стебом, но посмотрите в словаре, что означает слово «поститься».
                                                            0
                                                            Не сочтите издевательством, но даже в значении слова «постится», как «соблюдает правила поста» всё равно отсутствует мягкий знак.

                                                            Спасибо, пожалуйста.
                                                              0
                                                              да ничего. пожалуйста. спасибо.

                                                              что делать? — поститься (соблюдать пост).
                                                                0
                                                                Спасибо, пожалуйста. Действительно, не подумала, что вы имели в виду такую форму. ;)
                                                                  0
                                                                  Но всё равно, в сабже-то «постяться» ни к селу, ни к городу. Сотрудники что делают? — Постятся
                                                                  А вообще все эти хитросплетения легко выкидываются. Люди, пишите проще :)
                                                                  «Блоги, в которых отписываются сотрудники», «блоги, в которых сотрудники ЛК оставляют посты» (а ещё лучше «записи»)… Вариантов можно придумать массу
                                                            0
                                                            Ответ на Вашу тему от ЛК www.securelist.com/ru/weblog/34128/V_odnu_reku_ne_voyti_dvazhdy
                                                              0
                                                              «Молодцы», обвинили автора в неэтичности и толсто намекнули на уголовный кодекс.

                                                              ИМХО, после такого отношения на уважение профессионалов по безопасности рассчитывать не стоит.
                                                                0
                                                                Там в комментариях сильно автора пропесочили ;-) Александр Гостев аж вскипел )))
                                                                  +1
                                                                  Теперь понятно, почему у сайтов касперского feedback лажает. Ответственный вскипает вместо работы: «Написано же все!».
                                                                  О usability видимо представления нет.

                                                                  Помню, тоже хотел как-то баг запостить, потратил час (!) своего времени, чтобы найти куда. И мне еще сказали «а теперь возьмите свой баг репорт и отправьте его примерно туда-то, в общем найдете где». Так я и сменил антивирус.
                                                                0
                                                                © ЗАО «Лаборатория Касперского», 1997-2009
                                                                Ведущий производитель систем защиты от вирусов, спама и хакерских атак
                                                                — в футере «пострадавшего» :))

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

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