Bug nel JavaScript di Firefox: dati sensibili a rischio
Secunia ha rivelato un pericoloso bug in Firefox, un'errata gestione delle stringhe JavaScript. Verrebbero esposti alcuni dati presenti in memoria
di Fabio Boneschi pubblicata il 07 Aprile 2005, alle 15:39 nel canale SicurezzaFirefoxMozilla










Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Sennheiser Momentum 5, i nuovi auricolari top di gamma hanno la batteria sostituibile
Serie A e Serie B al via: guida ai nuovi abbonamenti DAZN e TIMVISION (c'è anche il piano per una sola squadra)
CMF Buds Neo, il sub-brand di Nothing prova il rilancio con un paio di auricolari low cost
GTA 6 è già un successo: i preordini stanno andando molto bene
Una Visa scaduta può ancora pagare in negozio: bastano due telefoni
I migliori robot aspirapolvere in offerta su Amazon: 25.000 Pa a 379€, rullo lavapavimenti e modelli top fino a 42.000 Pa
The Duskbloods non cambia la direzione di FromSoftware: Miyazaki conferma che lo studio continuerà a puntare sui single-player
Un weekend di ribassi eccezionali su Amazon: c'è di tutto, dai PC alle e-bike, dagli smartphone ai robot, sembra un Black Friday
Cosa succede se l'IA diventa una persona?
Tutta la stagione NFL 2026/2027 è su DAZN, ecco i piani disponibili per il Game Pass
I 3 portatili in offerta migliori di tutta Amazon: quello con 32GB di RAM, 1TB SSD e Intel Core 5 a 604€ è imbattibile, ma...
iPhone 17 Pro e Pro Max ai minimi storici su Amazon: il risparmio reale va da 160€ a 190€
SK hynix, il boom dell'HBM finisce in busta paga: un decimo dell'utile ai dipendenti
Linktour Alumi, test drive: la microcar in alluminio riciclato che vuole accendere la mobilità urbana









167 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info(qui correggimi che posso facilmente sbagliare: il buffer overflow avviene a causa di mancati contorlli: ti aspetti che ci sia una certa struttura dati in memoria, e invece ce n'era un'altra con risultati imprevisti.)
No, questo problema potrebbe presentarsi in maniera molto più "semplice" e "meschina": basta un banale errore di battitura, ad esempio scrivi 100000000 invece di 10000000 (ti "scappa" uno zero) nel ciclo che legge "qualcosa" (una certa quantità di dati) e la copia su un buffer (una certa porzione di memoria, sufficientemente grande per contenere un certo numero di dati dello stesso tipo e "grandezza"
Il mio è un esempio MOLTO elementare e semplicistico, ma spero che basti a mostrarti come possa essere semplice produrre un bug senza che il tuo stile di programmazione sia necessariamente cattivo: può capitare a tutti di sbagliare, e basta veramente poco, anche una svista, per fare insorgere dei problemi tutt'altro che irrilevanti. Alcuni anni fa (non ricordo esattamente quanti) la NASA si è persa per strada (ovvero nel vuoto cosmico) una costosissima sonda per un ";" (o forse una "," ma cambia poco) fuori luogo in un certo ciclo, che ne stravolgeva il funzionamento. E pensare che quello era un software "mission critical", di quelli che non possono permettersi bug e vengono sottoposti a controlli e test lunghissimi, severissimi e rigorosissimi, molto più di quelli che occorrono per un software destinato a un'utenza più o meno domestica...
Vedi sopra: uno stile di programmazione impeccabile non ti pone al riparo da possibili errori, statisticamente più è lungo il codice, più aumenta la probabilità che ci siano dei bug, e un banalissimo errore di battitura può trasformarsi in un gravissimo errore di logica.
Per tornare un po' in topic con i bug di FF, tornando indietro di alcuni post si parlava di un bug che causa memory leakage: si tratta un problema grave, potenzialmente molto pericoloso per il corretto funzionamento del sistema (ruba inutilmente memoria a tutti gli altri processi) e sicuramente fastidioso, molto difficile da correggere, tant'è che ad oggi non è stata rilasciata una patch. Molto probabilmente, per correggere questo bug sarà necessaria una profonda revisione di TUTTO il codice sorgente, riga per riga, alla ricerca dei puntatori gestiti male. Non so che dimestichezza hai con la programmazione, si tratta di un problema che sorge nella gestione dinamica della memoria, che è molto importante nei programmi ma altrettanto difficile e potenzialmente pericolosa, poichè è facilissimo compiere degli errori, basta una piccolissima dimenticanza. Ti faccio un esempio:
supponi di voler creare una struttura dati dinamica per usare solo la memoria che serve quando serve, userai un puntatore e scriverai istruzioni del tipo
punt = nuova_struttura_dinamica;
questa struttura è associata al puntatore e si può raggiungere solo con punt; a questo punto userai punt, farai anche altre cose che non lo riguardano, e quando non ti servirà più (o peggio, dovrai riutilizzarlo) potresti scrivere qualcosa (istruzione comunque corretta) del tipo
punt = null;
oppure (situazione più facile da verificarsi che provocherà il leakage)
punt = altra_struttura_dinamica;
dimenticando di cancellare nuova_struttura_dinamica (il nome può ingannare: in realtà non ha un nome e si può usare solo tramite punt o un altro puntatore che venga assegnato alla struttura puntata da punt - cioè punt2 = punt). A questo punto non puoi più accedere a nuova_struttura_dinamica, che non è una variabile ma un area di memoria accessibile solo tramite un puntatore, e diventa impossibile rilasciare la risorsa che non serve più (cioè, quell'area di memoria è irrimediabilmente persa fino al termine dell'esecuzione del programma).
A prima vista potrebbe sembrare un errore grossolano, però bisogna considerare che i puntatori sono un po' complicati da gestire, soprattutto quando entrano in gioco gli oggetti e strutture dinamiche complesse, e quando aumenta il numero di indirezioni (un puntatore che punta a un puntatore che punta a ... che punta a un'area di memoria dinamica), per cui il fatto che in FF ci sia questo grave problema e che la soluzione riguarderà una larga parte del codice non vuol dire che FF sia stato scritto male o con un cattivo stile di programmazione (i parametri per giudicare la bontà di uno stile di programmazione sono altri). Il problema è che più un sw è lungo e complesso, più è probabile che contenga bug.
PS: non è che io voglia difendere MS a tutti i costi, le schermate blu frequenti davano fastidio anche a me, certe scelte - commerciali, architetturali,... - non mi hanno fatto fare i salti di gioia. Cerco comunque di essere obiettivo: tutti possono sbagliare, qualunque prodotto ha i suoi pregi e i suoi difetti.
ovviamente se per molti bug intendi errori stupidi, ma non è assolutamente il caso di Microsoft ci mancherebbe, allora è vero,
Dipende, a volte gli errori più banali sono quelli più difficili da scovare
Bye.
Azz, non so se lo avete notato, ma ce n'è uno "nuovo" nel parser dei post sul sito: tutto ciò che è compreso tra il primo e l'ultimo "quote" viene inglobato in un'unica citazione. Sul forum non mi pare che succeda...
X la redazione: non ci si può fare nulla? (sempre che non ci stiate già lavorando
A proposito di bug
Azz, non so se lo avete notato, ma ce n'è uno "nuovo" nel parser dei post sul sito: tutto ciò che è compreso tra il primo e l'ultimo "quote" viene inglobato in un'unica citazione. Sul forum non mi pare che succeda...
X la redazione: non ci si può fare nulla? (sempre che non ci stiate già lavorando
lunedì erano già in programma un po' di interventi...tra cui anche il parser dei commenti da sito
ciao
E' vero, ma quello è stato davvero imperdonabile e la Nasa ci ha fatto davvero una figuraccia...per una cosa del genere penso che alcune teste siano cadute
io penso che con l'andare avanti con il tempo, bisogna sempre più pensare alla sicurezza del codice oltre che l'efficacia/efficienza...
programmare bene o male lo possono far tutti, fare codice sicuro no...servono approcci mentali, rigorosità e molto altro...cosa che tutti i programmatori dovrebbero avere e non solo alcuni...secondo me abbiamo passato la fase dell'ottimizzazione del codice, ora dobbiamo seriamente passare alla sicurezza del codice, sia a causa della maggior completezza dei linguaggi sia per ragioni proprie di bug ecc...
basta guardare l'approccio di Bernstein, informatevi su Qmail o su djbdns... quello è un approccio verso le prestazioni e verso soprattutto la sicurezza del codice...qmail è sostanzialmente lo stesso dal 1998
La versione 1.0, la versione generale, fu annunciata il 20 Febbraio 1997. La versione corrente, 1.03, è stata rilasciata il 15 giugno 1998.
e in questo periodo non ci sono stati richiami vari...un esempio di codice scritto con la sicurezza come meta finale
trattandosi di un file l'ho uploadato ora
Quello è sparito
Comunque te ne faccio notare un altro minore, che c'è da un po' e non si nota più di tanto: il carattere " ) " accanto a un carattere accentato (forse anche in presenza di virgolette, ho aggiunto uno spazio per sicurezza) viene interpretato come la faccina
Sono dettagli minori (l'ultimo non so se si verifichi ancora, mi è tornato in mente e lo faccio presente), ma visto che siamo in tema faccio il pignolo
Edit - altro piccolo dettaglio: sul sito non compare la scritta "quote:" sopra le citazioni (se sto oltrepassando il limite puoi sempre mandarmi a quel paese
Ciao
E' vero, ma quello è stato davvero imperdonabile e la Nasa ci ha fatto davvero una figuraccia...per una cosa del genere penso che alcune teste siano cadute , IMHO lo si può considerare un errore elementare, non tollerabile a differenza della questione puntatori in c, che quando diventa complessa, è davvero difficile essere sicuri e testare il tutto a "prova di errore" anche solo con una buona approssimazione...
Credo che quel pezzo di codice fosse scritto in Fortran e probabilmente in quella versione non era contemplata la programmazione strutturata (e vai di goto, return et similia), anzi, credo che il problema si sia presentato in uno degli stratagemmi usati per ottenere un ciclo: il ";" fuoriluogo credo tagliasse fuori un numero da un 'istruzione di salto che andava ripetuta; il numero a quel punto perdeva di significato e il compilatore lo ignorava (un po' come se in C scrivessi qualcosa del tipo:
a = b; 100
c = funzione(b);
e il compilatore non mi desse nessun warning; comunque prendi questo discorso con le pinze, personalmente non conosco il Fortran, ricordo qualcosa su quel bug da una lezione di Linguaggi). Il guaio è che più il tuo codice è lungo e complesso e più aumentano le probabilità che un errore elementare, banale, grossolano, intollerabile, e chi più ne ha più ne metta, finisca col mimetizzarsi perfettamente in mezzo a tante istruzioni corrette e diventi difficile da scovare, anche se con un po' d'esperienza si impara a cercare al volo gli errori di battitura più comuni, ma a volte l'occhio (e l'incapacità di prevedere proprio tutto in fase di testing) può ingannare (esempio banale, "#inculde" in fretta potresti leggerlo come "#include"
Java mi piace, e mi piacciono in particolare le caratteristiche a cui ti riferisci, però non si può mai abbassare la guardia: basta un piccolo bug nel compilatore/interprete che sia e i benefici del linguaggio di alto livello vanno a farsi benedire...
Stai sempre allerta, amico, il bug è sempre in agguato, ci osserva, trama nell'ombra, attende il momento giusto per trapassarti il cuore...
Cmq programmare in Fortran ora come ora lo ritengo "delinquenziale", che i salti incondizionati siano totalmente simulabili attraverso quelli condizionati è stato dimostrato ormai da molti anni
Si, ma anche quel codice dovrebbe avere molti anni (non ricordo esattamente quanti, ma è passato un po' di tempo da quando quella sonda "prese il largo"
Mi pare dicesse qual cosa del tipo: "Le capacità di un programmatore sono inversamente proporzionali al numero di goto presenti nel programma", ovviamente vale anche per la correttezza e la leggibilità (e di conseguenza, la bravura del programmatore).
Sono d'accordo con te, ma questo è vero fino a un certo punto. Innanzi tutto, così il problema si sposta dal "controllo" esercitato dal programmatore, umano e tutt'altro che infallibile, a quello del compilatore/framework, che è comunque un software e quindi può contenere errori sui quali tu, lavorando ad un livello più alto, non puoi avere nessun controllo (se ti colleghi al sito di Java troverai l'elenco dei bug periodicamente trovati e risolti); è anche vero che così i problemi eventuali possono essere ristretti, localizzati e ridotti nel numero, ma non eliminati del tutto. Poi, quel risultato è ottenuto in parte mediante limitazioni alla libertà del programmatore: ad esempio, Java ti impedisce di gestire direttamente l'allocazione della memoria (intendendo per direttamente la richiesta al sistema operativo di allocarne quanta ne vuoi e più o meno come vuoi: in definitiva lo fa lui), cosa che per un OS è di fondamentale importanza, inoltre non è possibile sovraccaricare gli operatori, limitazione utile da un lato, potenzialmente eccessiva ai fini della scrittura di un OS: in C++, ad esempio, potresti scrivere una tua versione dell'operatore new (o più versioni) per accedere in memoria e gestirne l'allocazione nella maniera più opportuna in determinate circostanze (ma potresti farlo anche con apposite funzioni in C, non potresti farlo in alcun modo in Java). In definitiva, difficilmente il kernel di un OS potrà essere scritto con quei linguaggi; i moduli che poggiano sul kernel, e gli strati superiori, invece si
Ciao
www.igpozzo.it/altro/brushedleron.zip
c'è sia uxtheme che il tema di win che quello di firefox e pure adblock col bottone personalizzato "a tema"
Una figata! Poi il thema di Pather con lo stile iTunes è semplicemente favoloso!!!
Consiglio anche ad altri di provarlo, perché ne vale veramente la pena... .)
Grazie tante!!!
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".