The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Новый метод атаки на обратный прокси Apache

25.11.2011 15:19

В начале октября в http-сервере Apache была обнаружена уязвимость, позволяющая при работе mod_proxy в режиме обратного прокси отправить запрос из внешней сети к внутренним серверам в демилитаризованной зоне (DMZ), при наличии определенных rewrite-правил в конфигурации сервера. Разработчики проекта выпустили патч для устранения проблемы, но как оказалось он бесполезен при использовании обходных путей для совершения атаки.

Если в конфигурации сервера, есть примерно такое правило (вместо RewriteRule может быть ProxyPassMatch):


   RewriteRule ^(.*) http://www.example.com$1 [P]

Атакующий может отправить запросы (символ "@" будет воспринят как разделитель для параметров аутентификации):


   GET @localhost::8880 HTTP/1.0\r\n\r\n
   GET qualys:@qqq.qq.example.com HTTP/1.0\r\n\r\n

В первом случае запрос будет транслирован в "http://localhost::8880", т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat). Во втором случае запрос будет транслирован в "http://[email protected]", и, соответственно, обращение будет к серверу qqq.qq.example.com.

В настоящее время официальных исправлений не выпущено, но один из работников компании Red Hat опубликовал неофициальный патч. Как и в случае прошлой уязвимости проблему решает явное добавление слеша-разделителя в правило ("http://www.example.com/$1" вместо "http://www.example.com$1").

  1. Главная ссылка к новости (https://community.qualys.com/b...)
  2. OpenNews: Уязвимости в Chrome, Adobe Flash, Apache, vtiger CRM, Squid, FFmpeg, Wireshark, GnuTLS и OpenPAM/FreeBSD
  3. OpenNews: Уязвимость в Apache открывает двери к внутренним ресурсам на другой стороне обратного прокси
  4. OpenNews: Найден способ обхода методов защиты от DoS-уязвимости в HTTP-сервере Apache
  5. OpenNews: Легко эксплуатируемая DoS-уязвимость в HTTP-сервере Apache (дополнено)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/32392-apache
Ключевые слова: apache, security
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (12) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Pro (??), 15:26, 25/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Всегда говорил что писать рерайты это тебе не сиськи мять.
     
     
  • 2.2, Аноним (-), 15:30, 25/11/2011 [^] [^^] [^^^] [ответить]  
  • +22 +/
    Их кроме автора mod_rewrite никто писать толком и не умеет.
     
     
  • 3.12, Xasd (ok), 21:07, 26/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    ну регулярные выражения -- они и в африке регулярные выражения:

        http://xkcd.ru/208/

    :-)

    # p.s.: когда их пишешь -- то почти всегда потом оказывается что "а <вот-про-это> я подзабыл" :-)

     

  • 1.3, антоним (?), 16:17, 25/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    GET qualys:@qqq.qq.example.com HTTP/1.0\r\n\r\n

    ... запрос будет транслирован ... в "http://www.example.com@qqq.qq.example.com", т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat) и к серверу qqq.qq.example.com.

    объясните каким образом тут появилось 8880???

     
     
  • 2.5, pavlinux (ok), 16:23, 25/11/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Прочитать 20 раз: символ "@" будет воспринят как разделитель для параметров

    Original:



    Access to internal web server can be possible by using a crafted request like:
    GET @localhost::8880 HTTP/1.0\r\n\r\n

    The screenshot below shows that a basic query with the crafted request
    to the target results in access to the page at 8880.

    https://dum21w3618van.cloudfront.net/images/apache/fig2b.png

    Upon receiving the request, Apache translates the URL by applying the rewrite rules.

    The "uri" extracted is ":8880" which gets appended, resulting in the URL

    http://10.40.2.159:8880

    The "uri" extracted in this case is everything following the first
    occurrence of the colon (:) in the request. Since the crafted request
    has 2 colons (::), the second colon is treated as being part of the URI.  



     
     
  • 3.8, антоним (?), 18:41, 25/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Атакующий может отправить запросы (символ "@" будет воспринят как разделитель для параметров аутентификации):

       GET @localhost::8880 HTTP/1.0\r\n\r\n
       GET qualys:@qqq.qq.example.com HTTP/1.0\r\n\r\n

    В первом случае запрос будет транслирован в "http://localhost::8880", а во втором в "http://www.example.com@qqq.qq.example.com", т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat) и к серверу qqq.qq.example.com.

    Вопрос откуда во _втором_ случае появилось 8880, откуда оно в первом и так очевидно.
    Хотя, пока писал, дошло что это предложение в новости составлено так коряво. Потому что "т.е."  относится к обоим случаям сразу, а не именно ко второму (...., (а ....., т.е.)). Сравните с тем что в действительности имелось в виду:


    В первом случае запрос будет транслирован в "http://localhost::8880", т.е. вместо сервера www.example.com будет осуществлено обращение по сетевому порту 8880 (Tomcat), а во втором в "http://www.example.com@qqq.qq.example.com", т.е. вместо сервера www.example.com будет осуществлено обращение к серверу qqq.qq.example.com.

     
  • 2.6, Аноним (-), 17:08, 25/11/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/

    > объясните каким образом тут появилось 8880???

    Там два отдельных примера, с портом относится к запросу
    GET @localhost::8880 HTTP/1.0\r\n\r\n

    который будет преобразован в http://www.example.com@localhost::8880
    часть www.example.com будет воспринята как параметры аутентификации.

     

  • 1.4, pavlinux (ok), 16:22, 25/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    В нормальных языках конкатенацию надо явно указывать.


     
     
  • 2.7, Аноним (-), 18:30, 25/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > В нормальных языках конкатенацию надо явно указывать.

    Вот скажи: "блаблабла$1" - это явное указание конкатенации или нет?

     
     
  • 3.9, pavlinux (ok), 19:01, 25/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> В нормальных языках конкатенацию надо явно указывать.
    > Вот скажи: "блаблабла$1" - это явное указание конкатенации или нет?

    Давай от обратного, как мне вывести URI содержащий знака $  

     
     
  • 4.10, Аноним (-), 11:36, 26/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    куда вывести, зачем вывести и какие проблемы есть в ури со знаком: '$'?
     

  • 1.11, Xasd (ok), 20:38, 26/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    почему запросы начинают именно с

       RewriteRule ^(.*) ...

    а не с

       RewriteRule ^\/(.*) ...

    ???

    малоли какаи там первые символы в начале строки... и поидее мы должны *хотеть* *только* те строки которые начинаются на "/"

     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру