修复了ColdFusion中的Unicode转换问题/漏洞

时间:2013-06-17 21:27:21

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

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

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

(另外,如果您有一个针对CF的示例漏洞利用,我会很感激。)


Unicode转换问题

严重性

类型

配置

由模块报告

脚本(XSS.script)

描述

此页面容易受到各种Unicode转换问题的影响 例如Best-Fit Mappings,Overlong byte sequence,Ill-formed 序列。

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

超长字节序列(非最短格式) - UTF-8允许 字符的不同表示也有较短的表示 形成。出于安全原因,UTF-8解码器不得接受 UTF-8序列比编码字符所需的时间长。例如,字符U + 000A(行 必须仅从表单中的UTF-8流中接受feed) 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,如果前导字节后跟一个 无效的后继字节,那么就不应该使用它。

碰撞

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

建议

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

参考

Unicode Security

UTF-8 and Unicode FAQ for Unix/Linux

A couple of unicode issues on PHP and Firefox

Unicode Security Considerations

Affecteditems

/ mysite的门户/

详细

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 ...(线截断)

请求标题

GET

/ mysite的门户/显示=登录&安培;状态=失败&安培;与rememberMe = 0&安培;内容识别=安培; LinkServID = acu5955%1 Cs1es2%BAs3%B9uca5955&安培; RETURNURL = https://stage-cms.mysite.com/mysite-portal/ HTTP / 1.1 Referer:https://stage-cms.mysite.com:443/

连接:保持活力

Accept-Encoding:gzip,deflate

User-Agent:Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 6.1; WOW64; 三叉戟/ 5.0)

接受:* / *

主持人:stage-cms.mysite.com

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果您的用户输入为ill-formed sequence,则规范化对您无效。

  

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

对于这些情况,请使用完全为此目的构建的“替换字符”U+FFFD替换无效序列。这是一个神奇的药丸,可以在99.9%的情况下起作用,但剩下的0.1%足以消灭你的数据库。

为了确保安全,您需要完全分析您的输入解析器,看看它们是否容易受到U+FFFD替换。

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

答案 2 :(得分:0)

这个

有各种解决方案

对于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