
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
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