e-SIC Livre (esiclivre) のCAPTCHA生成コンポーネントに、リソース消費の脆弱性が存在します。
影響を受けるエンドポイントは、CAPTCHA画像の寸法、フォントサイズ、描画する文字数を定義するユーザー制御パラメータを受け入れます。これらの値は、適切な境界チェックなしに使用されます。
認証されていないリモート攻撃者は、過度に大きな値を送信することで、画像作成およびテキスト描画中にアプリケーションが大量のメモリとCPUリソースを消費する可能性があります。これにより、アプリケーションのタイムアウト、HTTP 5xx応答、ワーカーの枯渇、またはサービス拒否が発生する可能性があります。
0a72b4c9ab89244ec3bd3d7fa0b765850cc9afd7 までrestrito/inc/captcha.phpこのエンドポイントは、以下のGETパラメータを受け入れます:
l - 画像の幅a - 画像の高さtf - フォントサイズql - CAPTCHA文字数これらのパラメータはユーザー入力から直接取得され、適切な上限なしに画像処理操作で使用されます。
脆弱なコードは、$_GET から直接値を読み取ります:
$largura = $_GET["l"];
$altura = $_GET["a"];
$tamanho_fonte = $_GET["tf"];
$quantidade_letras = $_GET["ql"];
captcha($largura,$altura,$tamanho_fonte,$quantidade_letras);
指定された幅と高さは、その後GD画像作成関数に渡されます:
$imagem = imagecreate($largura,$altura);
ユーザー制御の ql 値は、CAPTCHA文字を描画する際に実行される反復回数も決定します:
for($i = 1; $i <= $quantidade_letras; $i++){
imagettftext(
$imagem,
$tamanho_fonte,
rand(-25,25),
($tamanho_fonte*$i),
($tamanho_fonte + 10),
$branco,
$fonte,
substr($palavra,($i-1),1)
);
}
これらの値は合理的な制限に制約されていないため、特別に細工されたリクエストにより、アプリケーションが過剰な画像割り当ておよびテキスト描画操作を強制される可能性があります。
脆弱なCAPTCHAエンドポイントはリモートからアクセス可能です。
攻撃者は、画像の寸法、フォントサイズ、または文字数に異常に大きな値を含むリクエストを送信できます。サーバーはその後、PHP GD操作を使用してそれらの値の処理を試みます。
これにより、以下が発生する可能性があります:
脆弱な機能に到達するために認証は必要ありません。
悪用に成功すると、リソース消費の制御不能によるサービス拒否 (DoS) が発生する可能性があります。
影響は、PHP設定、利用可能なシステムリソース、Webサーバー設定、および同時リクエスト数によって異なります。
この脆弱性は、リソースを大量に消費するGD画像操作に渡される前に、ユーザー制御パラメータに対する検証が不十分であり、上限がないことが原因です。
アプリケーションは、処理前にすべてのCAPTCHA生成パラメータを厳密に検証する必要があります。
推奨される対策には以下が含まれます:
防御的な制限の例としては、アプリケーションの意図したインターフェースに応じて、幅、高さ、フォントサイズ、およびCAPTCHA長さの合理的な最大値を含めることができます。
CVEが申請および割り当てられた時点では、上流の修正は利用できませんでした。
影響を受けるバージョンを展開しているユーザーは、上流の修正が利用可能になるまで、ローカルの検証とリソース制限を適用する必要があります。
発見および報告者: Bryan Romero https://github.com/brynax
このアドバイザリは、脆弱性、その技術的根本原因、および防御・是正目的のための推奨緩和策を文書化したものです。自動化されたサービス拒否ツール、大量悪用方法、および悪用を容易にする可能性のある運用手順は、意図的に省略されています。