积极预防 及时发现
快速响应 力保恢复
IkonBoard 存在任意命令执行缺陷 (Other,缺陷)
发布时间:2003-04-07 信息来源:管理员

涉及程序: IkonBoard 3.1.1版及其之前的版本 描述: IkonBoard 存在任意命令执行缺陷 详细: IkonBoard 是一款利用Perl/CGI 脚本编写的功能强大的BBS程序。在IkonBoard程序的Perl代码中存在缺陷,攻击者能将输入转换成字符串,并发送到Perl的eval()函数,导致出现缺陷。攻击者利用此缺陷能在目标系统上执行任意命令。 在Sources/Lib/FUNC.pm在处理“lang”cookie时存在缺陷: # Make sure the cookie data is legal if ($iB::COOKIES->{$iB::INFO->{\`COOKIE_ID\`}.\`lang\`}) { $iB::COOKIES->{$iB::INFO->{`COOKIE_ID`}.`lang`} =~ s/^(<\\d\\w>+)$/$1/; } 如果cookie包含非法字符,将导致s///操作出现错误,并且错误的cookie值没有进行任何处理。此时,cookie值将插入到一个目录名中,并转换成字符串传递到eval()函数。虽然能对目录进行检测,但攻击者通过使用NULL技术能迂回检测。 攻击方法: 暂无有效攻击代码 解决方案: 第三方补丁: 将下列补丁添加到WEB服务器的Sources/Lib/FUNC.pm文件中: diff -Nurd Sources.orig/Lib/FUNC.pm Sources/Lib/FUNC.pm --- Sources.orig/Lib/FUNC.pm Sun Jul 14 00:47:08 2002 +++ Sources/Lib/FUNC.pm Mon Feb 3 09:39:48 2003 @@ -101,7 +101,7 @@ my $sid = $iB::IN{\`sid\`} || $iB::COOKIES->{$iB::INFO->{\`COOKIE_ID\`}.\`skin\`}; # Make sure it only contains a number - $sid =~ s/^(\\d+)$/$1/; + $sid =~ s/^(\\d+)$/$1/ or die \"invalid sid value\"; # Make sure we have a default skin set @@ -188,7 +188,8 @@ # Make sure the cookie data is legal if ($iB::COOKIES->{$iB::INFO->{\`COOKIE_ID\`}.\`lang\`}) { - $iB::COOKIES->{$iB::INFO->{`COOKIE_ID`}.`lang`} =~ s/^(<\\d\\w>+)$/$1/; + $iB::COOKIES->{$iB::INFO->{`COOKIE_ID`}.`lang`} =~ s/^(<\\d\\w>+)$/$1/ + or die \"invalid lang cookie value\"; } $default = $iB::COOKIES->{$iB::INFO->{\`COOKIE_ID\`}.\`lang\`} 临时解决方案: 将Sources/Lib/FUNC.pm 的第104行代码: $sid =~ s/^(\\d+)$/$1/; 改成: $sid =~ s/^(\\d+)$/$1/ or die \`bad sid cookie value\` 将Sources/Lib/FUNC.pm 的第191行代码: $iB::COOKIES->{$iB::INFO->{`COOKIE_ID`}.`lang`} =~ s/^(<\\d\\w>+)$/$1/; 改成: $iB::COOKIES->{$iB::INFO->{`COOKIE_ID`}.`lang`} =~ s/^(<\\d\\w>+)$/$1/ or die \`bad lang cookie value\`;