这些 tcl 错误是不是表明代码不安全?

Posted

技术标签:

【中文标题】这些 tcl 错误是不是表明代码不安全?【英文标题】:do these tcl error indicate insecure code?这些 tcl 错误是否表明代码不安全? 【发布时间】:2011-04-23 07:51:07 【问题描述】:

我正在对具有嵌入式 TCL 解释器的系统进行安全测试。系统从 Internet (HTTP) 接收输入,对其进行解析并传递给可定制的 TCL 脚本。在模糊测试期间(在 HTTP 标头中发送二进制垃圾),我注意到日志中有以下错误:

TCL 错误:在执行“foreach header [XXXXX] ”时,引号中的列表元素后跟“x”而不是空格

TCL 错误:执行“foreach header [ XXXXX ] ”时列表中的开放引号不匹配

这里的 XXXXX 是一个返回 HTTP 标头数组的命令,由系统解析。很抱歉混淆了真正的命令,希望您理解我不想在供应商被告知问题之前公开太多细节(如果结果证明是问题的话)。

产生错误的TCL代码很简单:

foreach 标头 [ XXXXX ]

据我所知,HTTP 解析是在 TCL 之外完成的,解析后的值可以通过自定义命令访问 TCL(可能作为 TCL 扩展实现)。

所以我的问题是:

    这些错误是否表明系统存在安全问题,例如用户输入验证不足?

    如果是,是否可以通过发送系统特制请求code injection attack,利用此条件执行任意TCL语句?

    是否有任何“安全 TCL 编码实践”文档?我找不到。

【问题讨论】:

【参考方案1】:

你在comp.lang.tcl 上问过这个问题,我回复了:

1) 这些错误是否是安全问题的迹象? 系统,如用户输入验证不足?

它们表明解析代码存在问题。我猜想 该代码假设它可以假设标题是格式良好的 Tcl 列表,您发现它完全不安全。消毒是为了 使用这样的东西:

set listOfWords [regexp -all -inline \S+ $someString] 

生成的单词集合保证格式正确 列表,用于任意输入字符串。

2) 如果是,是否可以利用此条件执行任意 TCL 报表通过发送系统特制请求,一种 http://en.wikipedia.org/wiki/Code_injection 攻击?

可能不会,除非您将该列表视为代码。

3) 是否有任何“安全 TCL 编码实践”文档?任何其他 如何安全处理不受信任的数据的信息来源?

最简单的方法是在安全解释器中进行解析:

interp create -safe parsingInterp 
parsingInterp eval  make the procedures  
parsingInterp eval [list doTheParse $stringToParse] 

请注意,我们还保证构建的列表(例如,那些 list,以及除此之外的许多其他命令)是 eval 安全的。那就是:

eval [list $a $b $c] 

完全一样与:

$a $b $c 

无论这些变量是什么,这都是真的。

【讨论】:

让我们看看他是否可以在另一个地方问同样的问题。

以上是关于这些 tcl 错误是不是表明代码不安全?的主要内容,如果未能解决你的问题,请参考以下文章

测试 TCL 中是不是存在矩阵对象

来自 localhost 的这些 .env GET 请求是不是表明存在攻击? [关闭]

我们需要在 TCL 中“取消设置”变量吗?

tcl文件无法获取通过代码设置的环境变量[关闭]

Oracle 无法删除表,错误代码:ORA-00942

tcl:包装一个同名的proc