Apache HTTPd Devs Считается Вредным

Фон
В течение последних 25 лет я был ведущим разработчиком apreq подпроект внутри Сервер Apache HTTPd Родительский проект. Оригинальная идея libapreq, как безопасный/производительный Отправка формы HTML и Печенье Библиотека парсинга вышла из сотрудничества Линкольна Штайна и Дуга MacEachern в конце 90s.
Тогда мое видение было преобразовать библиотеку в общую, не связанную с Перлом C библиотека, которая будет поддерживать языковые привязки из других языков программирования, поэтому я настаивал на том, чтобы проект был домашнее под зонтиком HTTPd вместо Апач-Перл проект.
С приходом httpd-2.Xсовершенно новый I/O Filter архитектура возникла из httpd а также полное разделение APR от самого ядра, как более общее назначение POSIX-подобной переносимости среды выполнения для C проекты как Subversion. Фактически, libapreq2 более тесно связаны с Apache APR проект в этом духе, и его API Perl отражает это как часть его APR::Request наращивание. Он имеет встроенный режим CGI для автономной работы, вне httpd время выполнения, что делает модульное тестирование ветер.
Однако ключевой компонент apreq2 всегда был mod_apreq2 Модуль Apache, который был впервые задуман Bill Wrowe В начале 2000s. То, что он разработал, во время мозгового штурма со мной (лично), было единой библиотекой парсеров, внутренней для httpd, что общий отправленный запрос тело с каждым ключевым модулем заинтересованных сторон во время выполнения. Это означало предоставление разборных данных модулям, подключенным к механизму обработки запросов до, в течение, и после запуска обработчика содержимого. И он должен был работать и для подзапросов, независимо от того, потреблял ли обработчик контента проанализированные данные, или потреблял и повторно анализировал сам исходный текст запроса.
Я объяснял цели дизайна несколько раз за эти годы, даже в 2012 году. dev@httpd. Но это всегда было похоже на беседу с этими парнями, они просто никогда не заботились.
Штормовые облака
Хотя это видение было дико успешным, с языковыми привязками, доступными для нескольких языков, таких как Perl, PHP, TCL, R, и т.д., с тех пор, как около 2010 года это оказалось трагическим для существующее сообщество пользователей состоящих из всехне только членов Perl Сообщество.
Что случилось? Филип ГоллюччиВ то время мой коллега по Perl/FreeBSD начал беспокоиться о том, что мы продвигаем проект, который будет выпущен из самого сервера HTTPd. Что Филипп не очень хорошо знал тогда, как совершенно пивиш, вапид и территориальный Эта команда стала, что означало бы необходимость сотрудничать с ними непосредственно решения для пользователей О кодовой базе.
В 2012 году Филипп получил то, что хотел, и я перестал сопротивляться, поэтому он разветвленный существующего проекта и скопировал C компоненты библиотеки в ядро HTTPd.
Выпадение
В 2018 году Я ушел из фонда в массовом порядке1. Вы можете угадать причины.
В 2020 году или около того, команда безопасности Гугл воспользовалась альфа-выпуском httpd 2.5, разбив свою 8-летнюю копию apreq2. Они нашли несколько горячих точек, которые нуждались в ремонте.
Вместо того, чтобы обратиться к Филиппу, Иссак Голдстенд, Макс Келлерман (@MaxKellermann), я (@joesuf4) или кто-либо другой, участвующий в разработке libapreq2, младший инженер в команде HTTPd пошел о бизнесе “исправление ошибок” Обнаружены уязвимости. С тех пор вы можете увидеть запись о его пробной и ошибочной работе в каждом выпуске.
Конечно, сообщения CVE были написаны любителями:
невозможно вызвать переполнение буфера (по архитектурному проекту), поэтому такие претензии всегда были балони, о чем свидетельствует тот факт, что код эксплойта никогда не публиковался.
Несмотря на все мои усилия, были возможны ссылки на указатель NULL, с которыми младший разработчик провел тщательную очистку много лет назад.
Двадцать лет назад у меня был мозг, основанный на кодировании символов для заголовков MIME, которые всегда 7-битные ASCII чисты, когда хорошо сформированы. Ошибочность этого логика синтаксического анализатора была единственной значимой проблемой безопасности за всю историю кодовой базы. — и, как NPE, все, что мог сделать злоумышленник, это сбой веб-сервера. Конечно, в настройках prefork это стреляет себе в ногу как хакер; но с @joesuf4/mod_perl, запуск его внутри HTTP/2 с mpm_event теперь легко достижим. Таким образом, устранение всех форм сбоев сервера было жизненно важной и необходимой работой. Младший разработчик заслуживает большой заслуги за это возможное достижение в магистрали @apache/apreq. Благодарность.
Но переворот благодати был освобождением 2022 года. 2.17, где новичок разработчик намеренно ввел фатальную ошибку в кодовую базу, разрыв девятнадцатилетний регрессионный тест.
Посмертный
Если вам интересно, как что-то с нарушенным регрессионным тестом / выдающимся CVE включается ЦПУ В качестве постоянного приспособления, вам придется посмотреть, как РЕЛЕНГ выполняется в проекте сервера.
Короткая история, Они прокомментировали тест и отправил его в любом случае, и назвал его выпуском безопасности, который исправлена уязвимость каждый предыдущий релиз был подвержен.

Почему меня волнует сейчас? Потому что я сосок пользователи получают ответы как известный эксперт по предмету.
Это сосет2Но я сожалею вам, что мои дни в мысе Супермена в Апаче закончились около десяти лет назад.
В любом случае, лучшее, что я могу сделать на этом этапе, это показать вам мое дерево производственных источников для libapreq2 — @joesuf4/apreq (и @joesuf4/mod_perl).
Сноски
Один не просто “Уйти из ASF”. Чтобы сделать чистый перерыв, нужно уйти не только от членства в ASF, но и от каждого проекта/комитета, членом которого является. В противном случае один из них утонет в постоянном адском спаме электронной почты Apache.
Бета-самцы подорвали проект @apache/apreq и переходят на @apache/mod_perl, потому что бета-самцы не имеют ничего общего с их временем. Ян Явич, “новичок разработчик” выше, кто фактически работал над apreq, в то время как его товарищи по команде потерпели неудачу, не проголосовали за выход из проекта. Неудивительно, потому что он решает проблему, а не бета-мужчина.
