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