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

abb*_*abb 3 validation tcl code-injection fuzz-testing

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

TCL错误:在执行"foreach header [XXXXX] {}"时,在引号中使用"{} x"而不是空格列出元素

要么

TCL错误:执行"foreach header [XXXXX] {}"时列表中无法匹配的打开引号

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

产生错误的TCL代码非常简单:

foreach标题[XXXXX] {}

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

所以我的问题是:

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

  2. 如果是,可以通过发送系统特制请求(一种代码注入攻击)来利用这种情况来执行任意TCL语句吗?

  3. 有没有"安全TCL编码实践"文件?我找不到任何东西.

Don*_*ows 7

你在comp.lang.tcl上问过我回复的地方:

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

它们表示解析代码中存在问题.我猜这段代码假设它可以假设一个标题是一个格式良好的Tcl列表,你发现它完全不安全.消毒是使用这样的东西:

set listOfWords [regexp -all -inline {\S+} $someString] 
Run Code Online (Sandbox Code Playgroud)

对于任意输入字符串,保证所得到的单词集合是格式良好的列表.

2)如果是,可以通过发送系统特制请求,一种http://en.wikipedia.org/wiki/Code_injection攻击来利用这种情况来执行任意TCL语句 吗?

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

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

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

interp create -safe parsingInterp 
parsingInterp eval { make the procedures } 
parsingInterp eval [list doTheParse $stringToParse] 
Run Code Online (Sandbox Code Playgroud)

请注意,我们还保证构造的列表(例如,那些 list以及其他许多命令)是安全的.那是:

eval [list $a $b $c] 
Run Code Online (Sandbox Code Playgroud)

与以下内容完全相同:

$a $b $c 
Run Code Online (Sandbox Code Playgroud)

无论这些变量是什么,都是如此.

  • 让我们看看他是否可以在另一个地方提出同样的问题. (2认同)