e-SIC Livre (esiclivre) 的 CAPTCHA 生成组件中存在资源消耗漏洞。
该易受攻击的端点接受用户可控的参数,这些参数定义了 CAPTCHA 图像的尺寸、字体大小以及要渲染的字符数量。这些值在使用时没有进行适当的边界检查。
未经身份验证的远程攻击者可以提供过大的值,导致应用程序在图像创建和文本渲染过程中消耗大量内存和 CPU 资源。这可能导致应用程序超时、HTTP 5xx 响应、工作进程耗尽或拒绝服务。
0a72b4c9ab89244ec3bd3d7fa0b765850cc9afd7restrito/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
本公告记录了该漏洞、其技术根本原因以及建议的缓解措施,用于防御和修复目的。公告有意省略了自动化拒绝服务工具、大规模利用方法以及可能助长滥用的操作说明。