However, I could not find anything about if the bug in gets is fixed or not i.e. whether gets, scanf, fscanf etc. check for bounds on input buffers or not.
Con una certa comprensione del modo in cui C funziona o uno sguardo alla documentazione, è difficile non notare che questi bug non sono corretti e non possono essere risolti mantenendo la stessa interfaccia di funzione.
Dato che queste funzioni ottengono solo un puntatore a un buffer ( char*
) e non la dimensione del buffer e dato che non vi è alcuna dimensione implicita associata al buffer in C, è impossibile controllare queste funzioni i limiti (sconosciuti). Ciò significa che è impossibile correggere queste funzioni insicure che conserveranno l'API.
Questo è anche chiaramente descritto per esempio in man gets :
Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead.
Also, is there any study or estimate about what would be the cost if someone is able to launch an attack similar to that today?
Non sono a conoscenza di alcuna ricerca seria e non potrei immaginarne nessuna dato che ci sono troppe incognite: quanto lontano potrebbe diffondersi il worm, qual è il danno effettivo che fa su ogni sistema ... Ma, se tale il worm ha successo, il danno sarà molto più alto rispetto al passato poiché molti sistemi sono collegati tra loro e anche la criticità di questi sistemi è molto più alta. Raccomando di dare un'occhiata agli attacchi recenti come WannaCry .