cpp-httplib の脆弱性 CVE-2025-46728 が FIX:メモリ枯渇と DoS 攻撃の可能性

CVE-2025-46728: cpp-httplib Vulnerability Exposes Servers to Denial of Service

2025/05/07 SecurityOnline — C++11 のファイル・ヘッダーのみで構成され、セットアップの容易さで知られている、クロス・プラットフォーム HTTP/HTTPS ライブラリである cpp-httplib が、深刻なセキュリティ脆弱性に直面している。先日に確認された、脆弱性 CVE-2025-46728 を悪用する脅威アクターは、このライブラリを使用するアプリケーションに対して、サービス拒否 (DoS) 攻撃を仕掛ける可能性を手にする。


cpp-httplib のセキュリティ・アドバイザリには、「リモートの攻撃者は、終端のゼロ長チャンクを省略した、チャンク化されたリクエストを送信することで、サーバ上で制御不能なメモリ割り当てを引き起こす機会を得る」と記されている。

この脆弱性のコアは、受信リクエスト・ボディをライブラリが処理する方法にあり、具体的には、Transfer-Encoding: chunked が使用されている場合に、または、Content-Length ヘッダーが存在しない場合に問題が発生する。

cpp-httplib のセキュリティ・アドバイザリには、「Transfer-Encoding: chunked が使用されている場合に、または、Content-Length ヘッダーが指定されていない場合において、このライブラリは、受信リクエスト・ボディに設定されたサイズ制限を適用できない。この見落としを悪用するリモート攻撃者は、必要なゼロ長の終端チャンクを省いたかたちの、チャンク化されたリクエストを送信することで、サーバの悪用を可能にする」と記されている。

このアドバイザリは、「それにより攻撃者は、サーバ上で制御不能なメモリ割り当てを引き起こし、最終的にはシステム・メモリの枯渇を達成し、サーバ・クラッシュや応答不能を引き起こす可能性を手にする。この脆弱性は、累積サイズを制限せずに受信チャンクを継続的に読み取る、read_content_chunked 関数に起因する。接続を維持する攻撃者は、終端チャンクを省いた無制限のチャンク・データを送信することで、無制限のメモリ割り当てを強制できる」と、付け加えている。

この脆弱性の影響は深刻である。つまり、サーバ・プロセスがクラッシュまたは応答不能になるまで、過剰なメモリを消費するという、完全なサービス拒否につながる可能性がある。マルチ・テナント・システムでは、それにより連鎖的な影響が発生し、リソース枯渇を引き起こし、システム・リソースを消費することで、他のアプリケーションに影響が及ぶかもしれない。

この脆弱性の影響が及ぶ範囲は、cpp-httplib のバージョンは 0.20.0 以下である。ユーザーに対して強く推奨されるのは、修正済みバージョン 0.20.1 への速やかなアップデートにより、この脆弱性を軽減することだ。

すぐにアップデートできない場合のために、このアドバイザリでは、一時的な回避策が提案されている:

ライブラリの速やかなアップデートが不可能な場合には、cpp-httplib アプリケーションの前にリバースプロキシ (Nginx/HAProxy など)を配置してほしい。プロキシを設定し、リクエスト・ボディの最大サイズ制限を適用し、過度に大きなリクエストが脆弱なライブラリ・コードに到達することを阻止する。

もちろん、究極的な解決策はコードの修正である。それにより、解析中に制限を適用する。読み取り中に制限を超えた場合には、接続を直ちに終了し、エラーを返して、ストリームを閉じることである。

C++ ヘッダーのみで構成される、HTTP/HTTPS サーバーおよびクライアント・ライブラリである cpp-httplib に、CVSS スコア 7.5 (GitHub 評価) の深刻な脆弱性が発見されました。同ライブラリを利用する開発者の方々は、十分にご注意ください。