Як захистити сервер від уразливості httpoxy

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

Пропозиція від 8host.com

Як захистити сервер від уразливості httpoxy

Причиною уразливості є конфлікт імен між змінної середовища HTTP_PROXY, за допомогою якої визначається проксі-сервер на бекенд, і клієнтським HTTP-заголовком Proxy. Специфікація CGI відправляє всі клієнтські хедери з префіксом HTTP_, в зв'язку з чим і виникає конфлікт. Якщо додаток або бібліотека CGI Новомосковскют цю змінну без додаткової обробки, вони можуть використовувати надані клієнтом значення при спробі підключення до проксі-сервера.

Дана уразливість міститься у великій кількості CGI-подібних реалізацій, тому для неї розроблений ряд ідентифікаторів:

Уразливі сервери і додатки

HTTPoxy є спільною вразливістю CGI і присутній майже в кожному додатку CGI.

Вразливими є сервери і додатки, які:

  • Використовують змінну середовища HTTP_PROXY для настройки з'єднань з проксі-сервером. Це стандартний метод настройки проксі-серверів, який присутній або в самому коді програми, або в бібліотеках.
  • Відправляють запити бекенд за допомогою HTTP. Оскільки причиною конфлікту імен є префікс HTTP_, вразливість зачіпає тільки додатки, які використовують протокол HTTP. Програми, що використовують HTTPS або інші протоколи, не містять цього бага.
  • Працюють в CGI або CGI-подібному оточенні. Уразливість присутня у всіх додатках, які переводять клієнтські хедери в змінні середовища з префіксом HTTP_. Вразлива будь CGI-сумісна реалізація або пов'язаний з CGI протокол (наприклад, FastCGI).

Уразливість в мовах програмування

Обов'язковій перевірці на вразливість підлягають додатки, написані в PHP, оскільки CGI набагато частіше використовується в екосистемі PHP, ніж в інших мовах програмування. Крім того, тут проблему посилюють популярні бібліотеки, які широко використовують метод getenv. Зокрема, на даний момент уразливі Guzzle (версія 4.0.0rc2 і вище), Artax і клас програми Composer під назвою StreamContextBuilder.

Також баг присутній в мовах Python і Go. Як правило, при розгортанні додатків Python і Go використовується не HTTP, тому більшість додатків, написаних на цих мовах, не схильне до вразливості. Однак якщо додаток розгорнуто за допомогою CGI, то всі бібліотеки, які за замовчуванням використовують змінну HTTP_PROXY, будуть уразливі.

Як усунути баг HTTPoxy

На щастя, помилку HTTPoxy досить просто усунути. Це робиться на рівні веб-сервера, додатки або бібліотеки.

  • Додатки або бібліотеки можуть ігнорувати змінну HTTP_PROXY, перебуваючи в середовищі CGI.
  • Додатки або бібліотеки можуть використовувати інші змінні середовища для настройки з'єднання з проксі-сервером.
  • Веб-сервери або проксі-сервери можуть скидати клієнтський заголовок Proxy.

При використанні вразливою бібліотеки необхідно пом'якшити загрозу на стороні сервера, поки бібліотека не надасть патчі. Якщо ви самі розробляли бібліотеку або додаток і ваш проект використовує змінну HTTP_PROXY, розгляньте можливість використання альтернативної змінної, яка не конфліктує при роботі в середовищі CGI. Ruby і деякі інші проекти використовують для цього CGI_HTTP_PROXY.

Хедер Proxy не є стандартним хедером HTTP, тому в більшості випадків його можна просто ігнорувати. Для цього потрібно налаштувати веб-сервер або балансувальник навантаження для скидання цього хедера. Скидати зазначені заголовки може будь-який простий веб-сервер, балансувальник або проксі-сервер.

Видалення HTTP-хедера Proxy в Apache

Веб-сервер Apache скидає хедери за допомогою модуля mod_headers.

Сервери Ubuntu і Debian

Щоб включити mod_headers, введіть:

sudo a2enmod headers

Відкрийте глобальний файл конфігурації:

sudo nano /etc/apache2/apache2.conf

В кінець файлу додайте рядки:


RequestHeader unset Proxy early

Збережіть і закрийте файл.

Перевірте синтаксис на помилки:

sudo apache2ctl configtest

Якщо помилок немає, запустіть сервіс:

sudo service apache2 restart

Сервери CentOS і Fedora

Зазвичай модуль mod_headers включений за замовчуванням. Щоб налаштувати ігнорування хедера Proxy, відкрийте глобальний файл конфігурації:

sudo nano /etc/httpd/conf/httpd.conf

В кінці вставте:


RequestHeader unset Proxy early

Перевірте синтаксис на помилки:

sudo apachectl configtest

Якщо помилок немає, запустіть сервіс:

sudo service httpd restart

Видалення HTTP-хедера Proxy в Nginx

Сервери Ubuntu і Debian

На серверах Ubuntu і Debian параметри FastCGI зазвичай зберігаються в файлах fastcgi_params or fastcgi.conf і витягуються з них під час налаштування проксі-сервера FastCGI. Відключити хедер HTTP_PROXY можна в будь-якому з цих файлів.

echo 'fastcgi_param HTTP_PROXY "";' | sudo tee -a /etc/nginx/fastcgi.conf
echo 'fastcgi_param HTTP_PROXY "";' | sudo tee -a / etc / nginx / fastcgi_params

Якщо в налаштуваннях проксі ви не посилаєтеся ні на один з цих файлів, додайте в location проксі-сервера наступний рядок (файл /etc/nginx/sites-enabled/your_site.conf).

Якщо ви використовуєте Nginx як звичайний HTTP проксі-сервер, вам потрібно видалити хедер Proxy. HTTP-хедери проксінг встановлюються файлі / etc / nginx / proxy_params. Щоб скинути заголовок Proxy, потрібно додати правило:

echo 'proxy_set_header Proxy "";' | sudo tee -a / etc / nginx / proxy_params

Якщо ви не посилаєтеся на цей файл в налаштуваннях сайту (в блоці server), додайте в блок location проксі-сервера наступний рядок:

Перевірте синтаксис на помилки:

Якщо помилок немає, запустіть сервіс:

sudo service nginx restart

Сервери CentOS і Fedora

На серверах CentOS і Fedora для настройки проксінг FastCGI веб-сервер Nginx використовує ті ж файл и fastcgi_params і fastcgi.conf. відключіть хедер HTTP_PROXY в обох файлах:

echo 'fastcgi_param HTTP_PROXY "";' | sudo tee -a /etc/nginx/fastcgi.conf
echo 'fastcgi_param HTTP_PROXY "";' | sudo tee -a / etc / nginx / fastcgi_params

Якщо в блоці server сайту ви не посилаєтеся ні на один з цих файлів, додайте в location проксі-сервера наступний рядок (файл /etc/nginx/sites-enabled/your_site.conf).

Якщо ви використовуєте Nginx як звичайний HTTP проксі-сервер, вам потрібно видалити хедер Proxy. Щоб скинути заголовок Proxy, потрібно додати наступне правило в кожен location, де виконується proxy_pass. Якщо ви не знаєте, де саме використовується proxy_pass, виконайте пошук по каталогу конфігурацій:

Перевірте помилки в синтаксисі:

Перезавантажте сервер, якщо помилок немає:

sudo service nginx restart

Видалення HTTP-хедера Proxy в HAProxy

Якщо ви використовуєте HAProxy для перенаправлення трафіку на сервери додатків, ви можете скинути хедер Proxy перед передачею трафіку.

Відкрийте файл /etc/haproxy/haproxy.cfg:

sudo nano /etc/haproxy/haproxy.cfg

Встановіть директиву http-request в розділі frontend, backend або listen.

frontend www
http-request del-header Proxy
.
backend web-backend
http-request del-header Proxy
.
listen appname 0.0.0.0:80
http-request del-header Proxy
.

Додавати директиву в кожен розділ не потрібно, достатньо додати її в один. Але якщо ви випадково додасте директиву в кожен розділ, це ніяк не зашкодить налаштування.

Збережіть і закрийте файл.

Перевірте файл на наявність помилок:

sudo haproxy -c -f /etc/haproxy/haproxy.cfg

sudo service haproxy restart

висновок

Присутня в софті дуже довгий час і отримавши широке розповсюдження, вразливість HTTPoxy піддає ризику величезну кількість додатків і бібліотек. На щастя, виправити її не так вже й складно.