Як захистити сервер від уразливості 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

Причиною уразливості є конфлікт імен між змінної середовища 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 піддає ризику величезну кількість додатків і бібліотек. На щастя, виправити її не так вже й складно.