«IPv6-зоны в URL — это ошибка». В треде показали, как через них прилетает инъекция команд в шелл

Заметка о том, почему zone-id в IPv6-адресах (тот самый %eth0) ломает URL, вызвала коллективную паническую атаку у инженеров. И конкретный разворот: символ % в zone-id — валидный, а значит через ipaddress-проверку можно протащить инъекцию команд в шелл.

Контекст

Заметка Xe Iaso «IPv6 zones in URLs are a mistake» набрала 109 очков и 84 комментария. Тред — терапевтическая группа для всех, кто хоть раз парсил [fe80::4%eth0]:80.

Что произошло

В IPv6 link-local адреса требуют указания зоны (интерфейса) — %eth0. Загнать это в URL — отдельный ад: квадратные скобки, процент-кодирование символа %, и расхождения между стандартами. Автор аргументирует, что сама идея зон в URL была ошибкой.

Что говорит тред

Самый важный разворот — про безопасность, а не эстетику:

«Всё хуже. Python-библиотека ipaddress парсит строку и говорит, валиден ли адрес. Я видел код, который так проверяет пользовательский ввод перед передачей в командную строку. На первый взгляд нормально — но некоторые shell-метасимволы валидны внутри zone-id: fe80::1%a;whoami>... Так через "проверку адреса" прилетает инъекция команд» — Sohcahtoa82

Дальше — практическая боль: браузеры то добавляли, то убирали поддержку:

«И становится ещё веселее, когда браузеры вроде Firefox это реализовали, а потом решили — нет, уберём. Теперь нет способа зайти в веб-интерфейс роутера по link-local адресу» — evgpbfhnr

Часть треда возражает: проблема не в IPv6, а в том, что зоны вообще встроили в адрес:

«IPv6 обещал 128-битное адресное пространство, а получили мы 128 бит плюс строку произвольной длины. Это навешивает кучу усложнений на разработчиков приложений» — j16sdiz

И прагматичный выход, который повторили несколько человек:

«А разве все не перешли уже на ULA? Каждый v6-роутер должен раздавать ULA-префикс клиентам. Хочешь в веб-интерфейс роутера — используй его universal local address, а не link-local, и обходишь все эти проблемы. Именно поэтому зоны и сочли ошибкой» — dcow

Что это значит

История кажется нишевой эстетикой парсинга, но тред вытащил из неё настоящую угрозу: «валидный IP-адрес» по версии стандартной библиотеки может содержать активную shell-инъекцию. Практический вывод конкретный: если вы валидируете адрес через ipaddress и потом суёте его в шелл — у вас дыра, и % в zone-id её открывает. А лечится исходная боль не URL-магией, а переходом на ULA — о чём в треде договорились те, кто это реально эксплуатирует в проде.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 11 из 26 Читать дальше
🚀Tech

EU-альтернатива Kagi набрала фичи — и тут же поймала вопрос: «а это вообще свой индекс или метапоиск?»

Show HN про Uruky — европейскую приватную альтернативу Kagi — собрал почти 200 комментариев. Но между похвалами «наконец-то EU» всплыл неудобный вопрос: если поисковые провайдеры внешние (Marginalia, Mojeek), то это метапоиск, и сравнение с Kagi вводит в заблуждение.

★ 220 · 💬 198 · uruky.com · 2 мин