Сломайте SafeCurl и получите 0.25 Bitcoin

    Разработчик с ником fin1te пишет безопасную обертку над curl, которая позволяет защититься от SSRF-атак, и в связи с этим проводит контест: если вы сможете скачать файл btc.txt, который расположен на демо-сервере SafeCurl safecurl.fin1te.net и доступен только с source IP 127.0.0.1 и 37.48.90.196 (внешнего IP сервера), то вы получите доступ к кошельку, в котором находится B⃦0.25.

    Уже совершено 3 успешных взлома:
    • @zoczus обошел защиту, зайдя по 0.0.0.0/btc.txt
    • @47696d6569 и ryanc выполнили DNS rebinding, что позволило им загрузить файл с другого IP адреса, уже после прохождения валидации
    • @shDaniell использовал уязвимость в парсинге URI, скачав файл ссылкой вида user:pass@safecurl.fin1te.net?@google.com/


    Если вам удалось скачать btc.txt, автор просит вас описать способ взлома ему на почту.

    Страница контеста.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 16

      +6
      Для тех кто не в курсе что за SSRF и зачем нужен SafeCurl, вот здесь есть краткое описание (6 слайд, например):
      www.slideshare.net/d0znpp/ssrf-attacks-and-sockets-smorgasbord-of-vulnerabilities
        +7
        Оно ipv6 не умеет. Так не интересно (половина вкусного — в разных нотациях записи ipv6).
        +1
        Все три взломщика получили доступ к одному кошельку? Или файл обновляется?
          0
          Обновляется, разумеется.
          0
          Интересно, что на safecurl.fin1te.net/#url=http://0x25.0x30.0x5A.0xC4/btc.txt выдается ошибка о невозможности отрезолвить… а по идеи должна быть ошибка о blacklist…
            0
            зато http://2130706433/btc.txt рапортует о правильной ошибке
              0
              да… это я первым делом проверил :)
            0
            А как в третьем случае атакующий получил содержимое btc.txt? Так можно обойти валидацию по URL, но ведь curl отправит запрос на один из ip Google, а не на внутренний адрес?

            И может мог бы кто объяснить, как во втором случае воспользовались уязвимостью?
              +1
              Судя по описанию этот url некорректно парсится. Функция parse_url в PHP видит там хост google.com, который валиден. В то же время cURL использует домен safecurl.fin1te.net, обходя таким образом проверку.
                0
                В том то и дело, что не понятно, каким образом safecurl.fin1te.net попадает в curl, т.к. он потом вызывает функцию RebuildURL, которая возьмет все тот-же IP гугла
                  0
                  Так может проблема в том, что parse_url парсил по кривым частям, собрав по которым через buildUrl получали то же самое, а curl собранное уже по-взрослому интерпретировал.
                    0
                    Да, действительно. Так оно и есть
              +1
              Кто-то забрал 4 награду, а способ не прислал.
                0
                Там же, вроде, нигде не написано, что не прислали. Может закроют уязвимость и способ выложат.
                  0
                  Вот и 4 способ опубликовали. Marcus T тоже использовал ошибку в парсинге url.

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