最近訪れたサイト
最近訪れたサイト

Apache HTTPd Devs Considered Harmful

[下書き] 最終更新日 によって Joe Schaefer 水, 13 5月 2026    ソース
 

tarredとfeathered

背景

過去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の報告はアマチュアによって書かれました:

  1. (建築設計によって)バッファのオーバーフローを引き起こすことは不可能であるため、そのような主張は常にバルニーでした。これは、エクスプロイト・コードが公開されていないという事実によって証明されています。

  2. 私の最善の努力にもかかわらず、NULLポインタ間接参照が可能でした。ジュニア開発者は数年前に徹底的にクリーンアップしました。

  3. 私は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. 1つだけではない”ASFからの辞任”。クリーンな休憩をするには、ASFのメンバーシップだけでなく、すべてのプロジェクト/委員会のメンバーから辞任する必要があります。そうでなければ、一人は地獄のApacheメールスパムに溺れてしまう。

  2. ベータの男性は、@apache/apreqプロジェクトを混同し、@apache/mod_perlに進んでいます。これは、ベータの男性は、その時間とは関係がないためです。Yann Ylavic、”ルーキー開発者” チームメイトが失敗した間、実際にapreqで働いていた上では、プロジェクトを辞めるための投票をしなかった。驚いたことに、彼は問題解決者であり、ベータ男性ではないからです。