
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
Archivio: Ottobre 2001 ml@sikurezza.org Soggetto: Re: Kernel capabilities weakness Mittente: vecna Data: 8 Oct 2001 11:18:32 -0000
~ non so chi si e' interessato un po delle capabilities, cmq in riferimento ad
~ una mail inviata su bugtraq risulterebbe possibile un exploit per il
~ ripristino globale delle capabilities.
~
~ http://www.securityfocus.com/cgi-bin/archive.pl?id=1&mid=67143
visto solo ora...
~ if ((fd=open("/dev/mem",O_RDWR | O_SYNC ))<0)
~ {
~ fprintf(stderr,"Error opening /dev/mem.\n");
~ exit(1);
~ }
la vulnerabilita` e` concettualmente simile a quella trovata contro pitbull
linux e gia` discussa in questa lista 2 anni fa'... generalmente potremmo dire
che ogni protezione/linitazione/smistamento dei privilegi e` utile e aumenta
la sicurezza, ma se /dev/mem lo si lascia SCRIVIBILE qualunque cosa puo`
essere bypassata.
anche nell'email su BQ:
--
To make capability bounding sets at all useful, you have to disable
CAP_SYS_RAWIO, which governs access to /dev/mem. Be advised that doing so
will break X and any other user-space program that needs raw access to
memory or I/O ports.
--
le capabilities prevedono la difesa di /dev/mem appunto con CAP_SYS_RAWIO,
ma il problema che si pone dopo averla attivata e` simile a quello che
si incontra usando X su *BSD una volta alzato il securelevel.
(logicamente va anche levata la cap x i moduli)
idea x nuovo thread:
"ma xke` non si pensa a un modo + fine per X per poter far quello che deve
fare SENZA dover x forza aprir /dev/mem in lettura/scrittura ?
~ buf = mmap(0,5000,PROT_READ | PROT_WRITE , MAP_SHARED , fd, 0x01f0000);
~ if (buf == (void*)-1 )
~ {
~ printf("MAP_FAILED with %d\n",errno);
~ exit(1);
~ }
~ printf("Mem config regs mapped at address %p.\n",buf);
~
~ buf[0x20] &= 0xFFFFEFF0; /* trying disabling SYS_MODULE */
~ printf("Value in 0x01f0080 = 0x%08x \n\n",buf[0x20]);
~
~ buf[0x20] &= 0xFFFFFFFF; /* try to set capability back */
~ printf("New value in 0x01f0080 = 0x%08x \n\n",buf[0x20]);
attacchi simili li ho sempre visti fare con fopen() fseek()
~ Non so se le capabilities siano state modificate ( ma non mi risulta ),
~ quindi è piu' probabile un mio errore.
~ Il problema è che a funzionare funziona, solo che riesce solo a droppare le
~ capabilities ma non a 'rialzarle'.
beh il programma li` sopra si limita ad aprire e a cambiare il valore in modo
che non risultino attivate quelle cap, quel codice sicuramente non le
ripristinera` mai (bisognerebbe salvar quel byte buf[0x20] come backup della
kernel memory originale, e dopo aver droppato le capabilities rimettere il
valore che c'era prima, in questo modo si tornerebbe alla situazione
iniziale)
~ Mi domando come e' possibile visto che sto provando direttamente a scrivere
~ in /dev/mem e che non ho trovato altri riferimenti in memoria a cap_bset.
si in effetti non ce ne sono altri :) ma tutto dipende da cosa metti tu
in memoria, avendo accesso a /dev/mem sei l'equivalente di gesu` cristo in vena
di miracoli su quella box, mettere togliere capabilities si tratta solo di
aggiungere alle variabili il valore esatto o ripristinar quello precedente
~ Qualche idea ???
non usare X
ciao [Hypo] :)
bye
________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005