Как стать автором
Обновить

Как /etc/hosts поломал редактор сайта

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2K
Автор оригинала: Lee Gaines

Загадочная сетевая ошибка

Когда я работал над техническим постом о ресолвинге DNS, то столкнулся с чем-то неожиданным. Каждый раз, когда я вводил пути к файлу hosts (/etc/h*sts — здесь я намеренно его обфусцировал, чтобы не вызвать ту самую ошибку), редактор Substack показывал «Network Error» и отказывался автоматически сохранять черновик.

Поначалу я решил, что возник сбой на сервере Substack. Однако на странице статуса было видно, что все системы работают. Случилось нечто другое.

Начинаем расследование

Я заметил, что ошибка стабильно возникала, когда я вводил этот конкретный путь к файлу; но когда я вводил разные его вариации наподобие /etc/h0sts или /etchosts, редактор работал без проблем. Заинтересовавшись этим паттерном, я протестировал другие системные пути:

Путь                  Результат
/etc/h*sts            ❌ Ошибка
/etc/h0sts            ✅ Работает
/etchosts             ✅ Работает
/etc/pass*d           ❌ Ошибка
/etc/password         ✅ Работает
/etc/ssh/sshd_conf*g  ❌ Ошибка
/etc/ssh              ✅ Работает
/etc/h*sts.allowed    ❌ Ошибка
/etc/h*sts.foo        ❌ Ошибка

(Примечание: * использована для замены символа в путях, иначе бы возникла ошибка)

Обнаружился некий паттерн: ошибки возникали из-за путей к стандартным файлам конфигурации системы в Linux, а после внесения в них незначительных изменений всё работало без проблем.

Что там происходит внутри?

В браузерных инструментах разработчика обнаружилось нечто любопытное:

Редактор выполнял запросы PUT к Substack API, чтобы сохранить черновик, но если контент содержал определённые системные пути, запрос получал ответ 403 Forbidden.

Судя по заголовкам ответов, это как-то связано с Cloudflare:

Server: cloudflare
Cf-Ray: 935d70ff6864bcf5-ATL

Разбираемся с фильтрами безопасности веб-приложения

Подобное поведение даёт нам понять, что это как-то связано с работой Web Application Firewall (WAF). Но что же такое WAF, и почему он блокирует эти пути?

Краткое объяснение WAF

Можно считать Web Application Firewall системой безопасности веб-сайтов. Он находится между пользователями и веб-приложением, исследует весь трафик и блокирует всё подозрительное.

У WAF есть правила о том, какие типы запросов выглядят опасными. Когда он встречает что-то из «списка подозрительных действий», то отклоняет запрос.

Атаки обходом путей: причина осторожности

Одна из распространённых атак, от которых WAF обеспечивает защиту — это атака обходом путей. Вот простое объяснение:

Представим, что файлы веб-сайта упорядочены по папкам, например:

/images/profile.jpg
/docs/report.pdf

Хакер может попытаться «вырваться наружу» из этих папок, отправив запросы следующего вида:

/images/../../../etc/pass*d

Это попытка подняться вверх по уровням папок, чтобы добраться до конфиденциальных системных файлов, например, до файла с паролями на сервере.

Системные пути наподобие /etc/h*sts и /etc/pass*d — это популярные цели для подобных атак, потому что в них содержится ценная информация о системе. Получивший к ним доступ хакер может найти имена пользователей, хэши паролей или сетевые конфигурации, позволяющие ещё больше скомпрометировать систему.

[Более подробную информацию об атаках обходом путей можно изучить в руководстве OWASP]

Инъецирование команд: ещё одна проблема безопасности

Ещё один вектор атак — это «инъецирование команд», при котором нападающий пытается заставить веб-приложение исполнять системные команды. Указание системных путей вида /etc/h*sts может привести к срабатыванию фильтров, предназначенных для защиты от попыток инъецирования команд.

При атаке инъецированием команд нападающий может ввести что-то типа:

; cat /etc/pass*d

Если веб-приложение не санирует правильно этот ввод перед его использованием в системной команде, то она сможет выполнить код нападающего и раскрыть конфиденциальную информацию.

[Подробнее о инъецировании команд можно прочитать в PortSwigger Web Security Academy]

Загадка становится сложнее: исторические примеры

Заинтересовавшись тем, не сталкивались ли с этой проблемой другие, я поискал посты на Substack, содержащие эти системные пути. Любопытно, что я нашёл пост за 4 марта 2025 года, в котором без проблем сохранилась строка /etc/h*sts.allowed.

В ещё одном посте за 30 марта 2025 года использовалась любопытная формулировка etc -> hosts — возможно, автор так пытался обойти ту же самую проблему?

Можно прийти к выводу, что фильтрация была реализована или модифицирована между этими двумя датами.

Безопасность и удобство пользования: тонкий баланс

Этот случай напоминает нам об интересной проблеме веб-безопасности: балансе между защитой и удобством пользования.

Фильтр Substack включили с вполне благими намерениями — чтобы защитить платформу от потенциальных атак. Но это создало раздражающее препятствие для технических писателей, рассказывающих о системных конфигурациях.

Кроме того, реализация неидеальна:

  1. Обобщённое сообщение «Network Error» неинформативно

  2. Фильтр блокирует допустимый технический контент

  3. У авторов, пишущих на подобные темы, нет понятного обходного решения

Изучим HTTP-ответ

Запрос к https://scalewithlee.substack.com/api/v1/drafts/162118646 завершается сбоем со следующими параметрами:

  • Status Code: 403 Forbidden

  • Request Method: PUT

  • Content-Type: application/json

Всё это чётко говорит нам, что всё происходит на уровне API, а не просто в UI редактора.

Более качественные решения для платформ с техническим контентом

Как Substack может улучшить ситуацию для технических писателей?

  1. Контекстная фильтрация: определение ситуаций, когда системные пути встречаются в блоках кода или в технических обсуждениях

  2. Понятные сообщения об ошибках: нужно заменить «Network Error» на что-то типа «Этот контент содержит паттерны, на которые могут реагировать наши фильтры безопасности»

  3. Задокументированные способы обхода проблемы: инструкции для технических авторов о том, как писать о конфиденциальных путях

Заключение: на пересечении безопасности и технического контента

Эта особенность редактора Substack стала примером сложных проблем, возникающих при создании защищённых платформ, которыми пользуются и технические писатели. То, что фильтр безопасности расценивает, как паттерн атаки, может быть вполне допустимым контентом автора, пишущего о системном администрировании или DevOps.

Я DevOps-инженер, поэтому подобные пограничные случаи восхищают меня; они подчёркивают то, что меры безопасности иногда могут иметь незапланированные последствия в вполне допустимых сценариях использования.

Пока я продолжу пользоваться обходными решениями наподобие "/etc/h*sts" (с кавычками) или альтернативным написанием в своих постах на Substack, посвящённых системным путям. Возможно, моё исследование поможет другим техническим писателям разобраться, что происходит, когда в редакторе возникают подобные загадочные «Network Error».

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+14
Комментарии3

Публикации