### 漏洞概述 **标题:** MikroTik RouterOS 6.49.8 越界读取 (nova/lib/www/scep.p) #4 **类型:** 越界读取 (Out-of-Bounds Read) (CWE-125),长度参数不一致处理不当 (CWE-130) **描述:** 在 MikroTik RouterOS 固件的 `nova/lib/www/scep.p` 组件中存在越界读取漏洞。SCEP 服务器在解析攻击者控制的 PKCS#7 签名属性(如 `transactionID` 和 `messageType`)时,通过返回原始 ASN1_STRING_data 指针并随后使用 NUL 终止的 C 字符串语义消耗这些值,导致攻击者可以发送包含非 NUL 终止 ASN1 PrintableString 的 PKIOperation 请求。这会导致解析器读取超出原始 ASN1 属性边界,从而在 `certRep` 响应中引发预认证信息泄露。 ### 影响范围 * **厂商:** MikroTik * **产品:** MikroTik RouterOS 固件 * **受影响版本:** 6.49.8 (ARM) * **受影响组件:** `nova/lib/www/scep.p` * **攻击面:** `/scep/operation=PKIOperation` ### 修复方案 * 在 `scep.p` 中为所有签名属性消费者保留显式的 ASN.1 长度。 * 使用 `asn1()` 和原始字符串 `::assign(char *)` 风格处理进行长度感知解析,替换 `atoi()`。 * 将显式的受信任长度传递给 `ASN1_STRING_set`,而不是依赖 `-1` / `strlen`。 * 拒绝格式错误或非规范的 PrintableString 值,在回复构造之前。 * 如果可能,在签名验证之后延迟消耗安全相关的签名属性。 * 审计相同的长度混淆模式的兄弟 SCEP 解析路径。 ### POC 代码或利用代码 **Step 1: 生成有效的基线 SCEP 请求** ```bash /certificate add-scep-template=scep-clean-1 scep-url=http://127.0.0.1/scep/ ``` **Step 3: 重放请求** ```bash curl -sS -X POST "http://127.0.0.1/scep/operation=PKIOperation" \ -H "Content-Type: application/x-pki-message" \ --data-binary @mutated-request.der ```