[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


Archivio: Giugno 2004 ml@sikurezza.org
Soggetto: Re: [ml] toth
Mittente: snagg
Data: Tue, 29 Jun 2004 13:17:55 +0200 (CEST)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



> Preambolo per koba: dato che e' l'ultimo post che intendo fare su questo
> thread e dato che non sono iscritto a devel@ ti prego di far passare
> quest'ultima mia mail, grazie :)
Sorry anche per me , la situazione diventa grottesca..


> Intanto volevo chiarire che la patch era per far funzionare quell'UNICO
> caso, non voleva essere una patch giusta in generale o da applicare
> definitivamente. Correggere i bug in modo definitivo e' compito tuo, non
> mio.
 scusa la domanda ma quando patchi una cosa e vedi che la tua patch  e` 
concettualmente sbagliata
solo perche` funziona un esempio, che fai la lasci?

> Detto questo, io non sapro' cos'e' un TOCTOU, ma nemmeno il tuo tool lo
> sa a quanto pare, vediamo un po' di esempi:
>
> semplici chdir bypassano toth:
>
> int main()
> {
> if (!access("filp", W_OK)) {
>         chdir("../");
>         chdir("toth");
>         fopen("filp", "r+");
> }
> return 0;
> }
Io ho usato il tuo codice ed il risultato e` stato:

snagg@aVaTaR:~/tothh$toth ./a.out

ToTH is TOcTou  Hunter, enjoy ...


ToTH:This program is under the terms of GNU GPLv2.
        Please report any bugs to Snagg [snagg@xxxxxxxxxx].
        If you don't want to see this run the program --quiet

ToTH:[Lunch the program]................
                                        [DONE]
ToTH:[Tracing syscalls].................
                                        [DONE]
ToTH:[Searching for TOCTOU].................
                                        [DONE]
REPORT :
The program is not suid,you cannot overwrite files in which you don't have the
right privileges

ToTH:There are 1 TOCTOU:

ToTH:1  between SYSCALL= open , path = filp and SYSCALL= access ,path = filp

ToTH:END

snagg@aVaTaR:~/tothh$

Credo fosse quello che ti aspettassi o no?

> rinominare il file e usare stat bypassa toth:
>
> int main()
> {
>         struct stat stats;
>
>         stat("filp", &stats);
>         rename("filp", "filp1");
>         if (stats.st_uid == getuid())
>                 fopen("filp1", "r+");
>
>         return 0;
> }

il check sull'uid non l'ho mica capito.. questo non costituisce toctou dal
momento che tu rinominando il file azzeri la finestra di tempo poiche` la
stat e` su filp non su filp1

> per non parlare dei link:
> (ho provato solo con quelli simbolici, gli hard non mi ci metto nemmeno :))
>
> int main()
> {
>
>         if (!access("READMElink", R_OK))
>                 fopen("README", "r+");
>
>         return 0;
> }

Scusa la domanda indiscreta dove sarebbe il toctou?cioe` mi spiego quelle due
funzioni aprono "apparentemente" un file diverso anche se il primo e` un link
simbolico al secondo per cui anche se tu modificassi il link a cui punta il
primo per il secondo non cambierebbe nulla , apre sempre README
indipendentemente da cosa punta il primo


> path assoluti e relativi bypassano toth:
>
>         if (!access("/home/user/toth/README", R_OK))
>                 fopen("README", "r+");
Credo sia naturale , dal momento che tracciandolo non puoi sapere in che dir
lo stai lanciando e quindi fopen("README","r+" ) e
access("/home/user/toth/README", R_OK) assumono un significato diverso , per
intenderci:

io sono nella mia home e faccio un check su toth/README , se c'e` apro la mia
copia che sta nella home altrimenti no.Quindi come fai a tracciare questo
tipo di codice che 1)non lo troverai mai scritto in qualcosa di decente 2) e`
solo potenzialmente una problema e questo dipende dalla cwd  in cui ti trovi
il che non ti permette di tracciarlo coome qualcosa di problematico


> addirittura basta un ./ davanti per mandare in panico toth:
>
>         if (!access("./README", R_OK))
>                 fopen("README", "r+");
>
Grazie e` stato patchato (se vuoi puoi riscaricarlo e testarlo di persona)

snagg@aVaTaR:~$toth ./a.out

ToTH is TOcTou  Hunter, enjoy ...


ToTH:This program is under the terms of GNU GPLv2.
        Please report any bugs to Snagg [snagg@xxxxxxxxxx].
        If you don't want to see this run the program --quiet

ToTH:[Lunch the program]................
                                        [DONE]
ToTH:[Tracing syscalls].................
                                        [DONE]
ToTH:[Searching for TOCTOU].................
                                        [DONE]
REPORT :
The program is not suid,you cannot overwrite files in which you don't have the 
right privileges

ToTH:There are 1 TOCTOU:

ToTH:1  between SYSCALL= open , path = README and SYSCALL=    
access ,path  ./README

ToTH:END

snagg@aVaTaR:~$



> ah, sapete i pthread non piacciono a toth:

>
> void prova() {
>
>         if(!access("README", R_OK))
>                 open("README", "r+");
> }
>
> int main()
> {
>         pthread_t pt;
>
>         pthread_create(&pt, NULL, (void *)prova, NULL);
>         pthread_join(pt, NULL);
>
>         return 0;
> }

Beh i (p)thread non piacevano manco a strace(che non gradisce tuttora) e a 
gdb(a
meno che tu non abbia gdb6 e 2.6)

> successivamente volevo provare con delle fork() ma dopo mi sono
> chiesto: "perche' perdere tempo se so gia' il risultato?"...
> Allora ho lasciato perdere...

Sono alla release 0.2 con calma posso implementare qualunque cose compreso il
tracciare i children , per cui a meno che tu non sia tanto preso dal
programma da volergli dedicare del tuo tempo aspetta che io lo faccia e
vedrai che traccera` anche i processi figli non solo della fork ma anche
della clone

>
> E' usanza inoltre lavorare con gli handler, quando si fanno queste cose,
> ma siccome ho visto che a te piacciono le cose alternative tipo
> fprintf(stdout, ...);
Perche` una fprintf e` strana?e` C , se poi il C e` strano per te altro
discorso:P


> forse forse capisco perche' lavori con i path.
>
> detto questo saluto con affetto snagg :)
Ciao Ciao
>
> ciao
>
Cheers

- --
You can download my public key from :
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xAF03412D


Per me si va tra la perduta gente

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iQCVAwUBQOEv88RZnwcjHpecAQI94wQAv/x6G51wX6kiJ3K5eYTY78rwsIx8HGdU
mMJYNscN00lHRRIYBmgbFomMBJpiI+xcP9TfEOopVMCLWG1ouBMKejAEBxmzw8T2
6kP8/KKBx5Gu9BfIzyOJGL2Cc4ee2Z+dxEY49Gv/DVknEzuFDN0VhdZ1U8PQ1JfG
QSzyRS6hB/8=
=gXlH
-----END PGP SIGNATURE-----




[ Home | Liste | F.A.Q. | Risorse | Cerca... ]

www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005