109291 2003-08-11  21:45  /88 rader/ yan feng <jsk@ph4nt0m.net>
Importerad: 2003-08-11  21:45  av Brevbäraren
Extern mottagare: bugtraq@securityfocus.com
Mottagare: Bugtraq (import) <5966>
Ärende: PST Linux Advisor--------Dsh-0.24.0 in debian has a home env Buffer Overflow Vulnerability
------------------------------------------------------------


                            ========================================
                             Ph4nt0m Security Advisory #2003--8-10
                            ========================================

              Dsh-0.24.0 in debian has a home env Buffer Overflow 
Vulnerability


By "jsk" (akun), in ph4nt0m.net(c) Security.
E-mail: jsk@ph4nt0m.net 


Advisory Number : pst-2003--8-10-004
name              : dsh
versions          : 0.24.0 possible in 0.24.1
Vendor           : http://fresh.t-systems-sfr.com/linux/src/dsh-
0.24.0.tar.gz
summary           : Local&remote
os(s)            : *nix
 
***************************************************************************
** Description : the bug should be in  debian os,Successful
exploitation  could

result in arbitrary code execution with potentially elevated
privileges.

***************************************************************************
** 具体漏洞:
***************************************************************************
**

dsh.c

main(int ac, char ** av)
{
  char *buf=NULL;
  
  setlocale (LC_ALL, "");
  if (!textdomain(PACKAGE_NAME))
    {
      if (!bindtextdomain(PACKAGE_NAME, LOCALEDIR))
	fprintf (stderr, "%s: failed to call bindtextdomain\n", PACKAGE);
    }
  
  
  
  load_configfile(DSH_CONF);
  if (asprintf (&buf, "%s/.dsh/dsh.conf", getenv("HOME")) < 
0).............lol
    {
      fprintf (stderr, _("%s: asprintf failed\n"), PACKAGE);
      exit (1);
    }  
  load_configfile(buf);
  free (buf);


asprintf的定义:

nt asprintf(char **strp, const char *fmt, ...)
{
  ssize_t buflen = 50 * strlen(fmt); /* pick a number, any number 
*/.............lol
  *strp = malloc(buflen);

  if (*strp)
  {
    va_list ap;
    va_start(ap, fmt);
    vsnprintf(*strp, buflen, fmt, ap);..................................lol
    va_end(ap);
    return buflen;
  } 
hey:

getenv("HOME") >50*strlen(%s/.dsh/dsh.conf)  ......buf overflow......
***************************************************************************
********************** By "jsk" (akun), in ph4nt0m.net(c) Security.
E-mail:jsk@ph4nt0m.net  ph4nt0m Security Team: http://www.ph4nt0m.net
My World: http://jsk.ph4nt0m.net MY GnuPG Public Key:
http://202.119.104.82/webeq/app/jsk/jsk.asc
(109291) /yan feng <jsk@ph4nt0m.net>/-----(Ombruten)
109806 2003-08-15  03:17  /19 rader/ Vade 79 <v9@fakehalo.deadpig.org>
Importerad: 2003-08-15  03:17  av Brevbäraren
Extern mottagare: bugtraq@securityfocus.com
Mottagare: Bugtraq (import) <6050>
Ärende: Re: PST Linux Advisor--------Dsh-0.24.0 in debian has a home env Buffer Overflow Vulnerability
------------------------------------------------------------
In-Reply-To: <20030810011227.5888.qmail@www.securityfocus.com>

>  ssize_t buflen = 50 * strlen(fmt); /* pick a number, any number 
>*/.............lol
>  *strp = malloc(buflen);
>
>  if (*strp)
>  {
>    va_list ap;
>    va_start(ap, fmt);
>    vsnprintf(*strp, buflen, fmt, 
ap);..................................lol

>getenv("HOME") >50*strlen(%s/.dsh/dsh.conf)  ......buf overflow......

how do you figure? it uses the same buflen value to limit the amount 
written to the buffer in the vsnprintf call as it was allocated(cept 
didn't add space for the null byte)? am i missing something?
(109806) /Vade 79 <v9@fakehalo.deadpig.org>/--------