【问题标题】:Fix for Unicode Transformation Issue/Vulnerability in ColdFusion修复 ColdFusion 中的 Unicode 转换问题/漏洞
【发布时间】:2013-06-13 23:26:15
【问题描述】:

我们最近升级了安全扫描器,它报告了一个新问题。

推荐的修复方法是什么? (我们恰好在 ACF9 上。)

(另外,如果你有一个针对 CF 的漏洞利用示例,我将不胜感激。)


Unicode 转换问题

严重性

类型

配置

按模块报告

脚本(XSS.script)

描述

此页面易受各种 Unicode 转换问题的影响 例如 Best-Fit Mappings、Overlong 字节序列、Ill-formed 序列。

最佳拟合映射发生在字符 X 转换为 一个完全不同的字符 Y。一般来说,最适合的映射 当字符在 Unicode 和另一个字符之间进行转码时发生 编码。

超长字节序列(非最短形式) - UTF-8 允许 也有更短的字符的不同表示 形式。出于安全原因,UTF-8 解码器不得接受 长度超过对字符进行编码所需的 UTF-8 序列。例如,字符 U+000A(行 feed) 必须从 UTF-8 流中接受,格式为 0x0A,但不在以下五种可能的超长中 表格:

  • 0xC0 0x8A

  • 0xE0 0x80 0x8A

  • 0xF0 0x80 0x80 0x8A

  • 0xF8 0x80 0x80 0x80 0x8A

  • 0xFC 0x80 0x80 0x80 0x80 0x8A

UNICODE 3.0 要求的格式错误的子序列,并在 Unicode 技术报告 #36,如果前导字节后跟一个 无效的后继字节,那么它不应该消耗它。

影响

出现最佳匹配映射时会出现软件漏洞。为了 例如,可以操纵字符以绕过字符串处理 过滤器,例如跨站点脚本 (XSS) 或 SQL 注入过滤器, WAF 和 IDS 设备。过长的 UTF-8 序列可能被滥用于 绕过只寻找最短可能的 UTF-8 子字符串测试 编码。

推荐

确定这些 Unicode 转换问题的根源并修复它们。 有关详细信息,请参阅下面的网络参考。

参考

Unicode Security

UTF-8 and Unicode FAQ for Unix/Linux

A couple of unicode issues on PHP and Firefox

Unicode Security Considerations

影响项目

/mysite-portal/

详情

URL 编码的 POST 输入 linkServID 设置为 acu5955%EF%BC%9Cs1%EF%B9%A5s2%CA%BAs3%CA%B9uca5955

问题列表:

  • Unicode 字符 U+02B9 MODIFIER LETTER PRIME(编码为 %CA%B9) 被转化为 U+0027 APOSTROPHE (')

  • Unicode 字符 U+02B9 MODIFIER LETTER PRIME(编码为 %CA%B9) 被transf ...(行被截断)

请求标头

获取

/mysite-portal/?display=login&status=failed&rememberMe=0&contentid=&LinkServID=acu5955%1 cs1es2%BAs3%B9uca5955&returnURL=https://stage-cms.mysite.com/mysite-portal/ HTTP/1.1 引用者:https://stage-cms.mysite.com:443/

连接:保持活动状态

接受编码:gzip,deflate

用户代理:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64; 三叉戟/5.0)

接受:*/*

主机:stage-cms.mysite.com

【问题讨论】:

  • 了解您拥有的 9.0x 版本会很有用

标签: security unicode coldfusion coldfusion-9 unicode-normalization


【解决方案1】:

答案是:规范化。

https://www.owasp.org/index.php/Canonicalization,_locale_and_Unicode#How_to_protect_yourself

如何保护自己

应选择合适的规范形式和所有用户输入 在任何授权决定被规范化为该形式之前 执行。 UTF-8解码后应进行安全检查 完成了。此外,建议检查 UTF-8 encoding 是它所代表的符号的有效规范编码。

http://www.mattgifford.co.uk/canonicalize-method-in-coldfusion-8-and-coldfusion-9

【讨论】:

    【解决方案2】:

    对此有多种解决方案

    对于 CF 8 和 9 用户:

    可以在以下位置找到一组解决此问题的函数:

    https://github.com/coldfumonkeh/cfml-security

    对于 CF 10 用户:

    canonicalize(inputString, restrictMultiple, restrictMixed) 
    

    涵盖了这个问题。见http://help.adobe.com/en_US/ColdFusion/10.0/CFMLRef/WS932f2e4c7c04df8f-1a0d37871353e31b968-8000.html

    Railo 用户:

    这已在 4.0.0.011 中解决

    https://issues.jboss.org/browse/RAILO-1873?_sscc=t

    【讨论】:

      【解决方案3】:

      如果您的用户输入是ill-formed sequence,规范化对您没有帮助。

      有关如何处理格式错误的子序列的更多信息,请参阅 Unicode 5.2 中 Section 3.9, Unicode Encoding Forms 中的“转换过程的约束”

      对于这些情况,用专门为此目的构建的“替换字符”U+FFFD 替换无效序列。这是 99.9% 情况下的灵丹妙药,但剩下的 0.1% 足以摧毁您的数据库。

      为了真正安全,您需要全面分析您的输入解析器,看看它们是否容易受到U+FFFD 替换的攻击。

      始终有效的最佳解决方案是停止解析,清理垃圾,然后返回错误消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-25
        • 2020-11-14
        • 2017-05-12
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        • 2016-08-27
        • 2021-09-06
        相关资源
        最近更新 更多