Xchat /dns command execution vulnerability

From: SpaceWalker (spacewalkerat_private)
Date: Wed Mar 27 2002 - 10:20:48 PST

  • Next message: Cisco Systems Product Security Incident Response Team: "Cisco Security Advisory: LDAP Connection Leak in CTI when User Authentication Fails"

    Xchat - Remote command execution
    
    name            : Xchat
    date            : 27/3/2002
    description     : Xchat is a graphical IRC client widely used in the linux and *bsd
    community
    severity        : Low risk
    homepage        : www.xchat.org
    versions        : probably all
    Bug description :
    
    There is an issue by the way xchat handle the /exec command, and more
    accuratly in the /dns command.
    the /dns should resolve the host of somebody, issuing the command
    "/dns some_nick"
    and executes
    "%s %s",prefered dns program, hostname of the person
    
    the body of the cmd_dns() function contains this, in common/outbound.c line 1474
    {
    sprintf (tbuf, "/exec %s %s", prefs.dnsprogram, nick);
    handle_command (tbuf, sess, 0, 0);
    }
    
    and far away, at line 1863 in the cmd_exec() function
    execl ("/bin/sh", "sh", "-c", cmd, 0);
    not any caracter are stripped out of cmd : if you can force a server to
    respond a dns with ";DISPLAY=localhost:0.0;xterm"
    the command passed to the execl will be
    "host;DISPLAY=localhost:0.0;xterm"
    which will run arbitrary command.
    Anyway, the executed command are printed to the channel just before
    execution.
    To exploit the hole, the attacker may force a server to respond to a whois
    command with a malformed dns.
    So, two conditions to exploit the vuln:
    * The cible must be on your own patched server
    * He musts run the /dns command on someone
    
    Solution        :
    For now, don't go on unknown servers, while a patch is being coded.
    Generaly, it's a bad idea to go on an unknown server with xchat. It trusts
    too much the protocols conventions and may be vulnerable in some strcpy()s
    (like in the example).
    
    Spacewalker <spacewalkerat_private>
    



    This archive was generated by hypermail 2b30 : Wed Mar 27 2002 - 12:52:00 PST