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

3
我们最近升级了安全扫描器,它报告了一个新问题。
有什么推荐的解决方法吗?(我们恰好使用的是ACF9。)
(另外,如果你有一个针对CF的漏洞利用示例,我会很感激。)

严重程度

配置

脚本(XSS.script)

此页面容易受到各种Unicode转换问题的攻击,例如最佳匹配映射、过长字节序列、不良格式序列。

最佳匹配映射是指将字符X转换为完全不同的字符Y。通常情况下,在Unicode和其他编码之间转码时会出现最佳匹配映射。

过长字节序列(非最短形式)- UTF-8允许使用不同的表示来表示字符,这些表示也可以更短。出于安全原因,UTF-8解码器不能接受比编码字符所需字节更长的UTF-8序列。例如,字符U+000A(换行符)只能以0x0A的形式从UTF-8流中接受,而不能以以下五种可能的过长形式之一出现:

  • 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 安全性

Unix/Linux UTF-8 和 Unicode 常见问题解答

PHP 和 Firefox 中的一些 Unicode 问题

Unicode 安全注意事项

/mysite-portal/

详情

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

问题列表:

  • Unicode字符U+02B9修饰字母PRIME(编码为%CA%B9)被转换为U+0027撇号(')

  • Unicode字符U+02B9修饰字母PRIME(编码为%CA%B9)被转换为U+0027撇号(')...(行被截断)

请求头

GET

/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 Referer: https://stage-cms.mysite.com:443/

连接:保持活动状态

接受编码:gzip,deflate

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

接受:*/*

主机:stage-cms.mysite.com


知道你使用的9.0x版本会很有用。 - James A Mohler
3个回答

1
Canonicalization对于用户输入的不良序列无法起到帮助作用。

有关如何处理不良子序列的更多信息,请参阅Unicode 5.2中第3.9节,Unicode编码形式中的“转换过程的约束条件”。

对于这些情况,应使用专门为此目的构建的“替换字符”{{link3:U+FFFD}}替换无效序列。这是一个能在99.9%的情况下奏效的灵丹妙药,但是剩下的0.1%足以摧毁您的数据库。
为了真正安全,您需要完全分析输入解析器,以查看它们是否容易受到U+FFFD替换的攻击。 最好的解决方案是停止解析,清理垃圾,然后返回错误消息。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接