Apache HTTPd Devs Considered Harmful

背景
過去25年間、私はapreq 内のサブプロジェクトApache HTTPdサーバー 親プロジェクト。オリジナルアイデアlibapreq、安全/性能としてHTMLフォーム提出 およびクッキー 解析ライブラリは、Lincoln SteinとDoug MacEachernの間のコラボレーションにより、後期90sに登場しました。
当時の私のビジョンは、ライブラリを一般的な非Perl関連に変換することでしたC 他のプログラミング言語からの言語バインディングをサポートするライブラリ。そのため、プロジェクトをプッシュしましたホームページ の代わりに HTTPd傘の下Apache-Perl プロジェクト
THEADVENTOF httpd-2.Xまったく新しいI/O Filter アーキテクチャの出現元httpd コア、および完全な分離APR より汎用的なPOSIXのような移植性ランタイムとしてコア自体からC プロジェクトSubversion。実際、libapreq2 より密接に連携しているApache APR その精神のプロジェクトとそのPerl APIは、その一部としてそれを反映していますAPR::Request ビルドアウトスタンドアロン操作用のCGIモードが内蔵されており、httpd ランタイム。ユニット・テストが簡単になります。
しかし、主なコンポーネントapreq2 常にmod_apreq2 Apacheモジュール(最初に考案したモジュール) Bill Wrowe 初期の2000s 彼が設計したのは、私とのブレーンストーミングセッション中(個人的には)は、内部にある単一のパーサーライブラリでしたhttpd発行したリクエストbodyを、実行時にすべての主要な利害関係者モジュールと共有します。つまり、コンテンツ・ハンドラが実行される前に、duringおよびafter*リクエスト処理エンジンに接続されたモジュールに解析済データを提供することでした。また、コンテンツ・ハンドラが解析されたデータを消費したか、RAWリクエスト本文自体を消費して再解析したかに関係なく、サブリクエストに対しても機能する必要がありました。
私は2012年でさえ、何年にもわたってデザイン目標を何度も説明しました開発@httpd。けれども、この人たちと風に話しかけてきたようなもので、彼らは決して気にかけなかった。
嵐雲収集
このビジョンは大成功しましたが、次のような複数の言語で言語バインディングを利用できます。Perl, PHP, TCL, R、等、2010年頃からそれはのための悲劇的な証明しました既存のユーザー・コミュニティ それらすべてから構成されるメンバーだけではなく、Perl コミュニティ
何が起こったのですか。Philip Gollucci当時、Perl/FreeBSDの同僚が、HTTPdサーバー自体の中から解放されるプロジェクトをプロモートすることを積極的に開始しました。内容フィリップは当時あまりよく知りませんでしたが、それがどれほど素晴らしいかでした。ピービッシュ、急速、領土 チームは直接協力する必要があった。ユーザー対応の決定 コードベースについて
2012年、フィリップは彼が望むものを得て、私は抵抗するのをやめた。フォーク 既存のプロジェクトをコピーC HTTPdコアへのライブラリ・コンポーネント。
フォールアウト
2018年 私はFoundation en masseから辞任しました1。理由を推測できます。
2020年以降、Googleのセキュリティチームは、8年前のhttpd 2.5のアルファ版リリースを利用しました。apreq2。修理が必要なホットスポットを見つけました。
フィリップに手を差し伸べる代わりに、Issac Goldstand, Max Kellermann (@MaxKellermann)、自分自身(@joesuf4)、または開発に関与する他のユーザーlibapreq2、 HTTPdチームのジュニアエンジニアは、”バグ修正” グーグルが発見した脆弱性それ以降、すべてのリリースで試行錯誤の記録を確認できます。
もちろん、CVEの報告はアマチュアによって書かれました:
(建築設計によって)バッファのオーバーフローを引き起こすことは不可能であるため、そのような主張は常にバルニーでした。これは、エクスプロイト・コードが公開されていないという事実によって証明されています。
私の最善の努力にもかかわらず、NULLポインタ間接参照が可能でした。ジュニア開発者は数年前に徹底的にクリーンアップしました。
私は20年前、MIMEヘッダーのcharsetエンコーディングの周りに脳が遠かった。これは、整形式の場合、常に7ビットASCIIクリーンです。の誤りである。パーサー論理学 コードベースの歴史の中で唯一意味のあるセキュリティ上の懸念だった— そして、NPEと同様に、攻撃者ができることはすべてWebサーバをクラッシュさせることでした。もちろん、prefork設定では、これはハッカーとして足で自分自身を撃つことですが、@joesuf4/mod_perlでは、mpm_eventを使用してHTTP/2内で実行することはすぐに実現できます。したがって、あらゆる形態のサーバクラッシュの排除は不可欠で必要な作業でした。ジュニア開発者は、@apache/apreqのトランクでその最終的な成果に多くのクレジットが必要です。称賛。
しかし、クーデター・デ・グレースは2022年のリリースでした。2.17ルーキー開発者意図的にコードベースに致命的なバグを導入【Breaking】19歳の回帰テスト.
ポストモーテム
壊れた回帰テスト/優れたCVEで何が起こるか疑問に思っている場合パン 永久的な据え付け品として、あなたはどのように調べる必要があります関連 はサーバープロジェクトで実行されます。
短い長い物語、彼らはテストをコメントしました そして、それをとにかく出荷し、それをセキュリティリリースと呼んだ。以前のリリースごとに脆弱性を修正しました。.

なぜ今気になるのか。I’m the suckerシングルユーザーがアンサーにリーチ 既知の問題の専門家です。
最低2アパチェでスーパーマンの帽子をかぶった私の日々は、十年ほど前に終わったと言って申し訳ありません。
いずれにせよ、この時点でできる最善のことは、libapreq2の本番ソース・ツリーを表示することです— @joesuf4/apreq (および@joesuf4/mod_perl)。
脚注
1つだけではない”ASFからの辞任”。クリーンな休憩をするには、ASFのメンバーシップだけでなく、すべてのプロジェクト/委員会のメンバーから辞任する必要があります。そうでなければ、一人は地獄のApacheメールスパムに溺れてしまう。
ベータの男性は、@apache/apreqプロジェクトを混同し、@apache/mod_perlに進んでいます。これは、ベータの男性は、その時間とは関係がないためです。Yann Ylavic、”ルーキー開発者” チームメイトが失敗した間、実際にapreqで働いていた上では、プロジェクトを辞めるための投票をしなかった。驚いたことに、彼は問題解決者であり、ベータ男性ではないからです。