Fragen? Antworten! Siehe auch: Alternativlos
if ( !initialized ) {Ich habe da genau so viel Kontext wie ihr, aber ich würde das so interpretieren, daß Herr Koch hier ein Protokoll mit in-band signalling gebaut hat, und ein Angreifer hier Pakete einfügen kann, und er will das jetzt "reparieren", indem er "Zufallswerte" einfügt, die der Angreifer nicht raten können soll.
volatile ulong aa, bb; /* we really want the uninitialized value */
ulong a, b;initialized = 1;
/* also this marker is guessable it is not easy to use this
* for a faked control packet because an attacker does not
* have enough control about the time the verification does
* take place. Of course, we can add just more random but
* than we need the random generator even for verification
* tasks - which does not make sense. */
a = aa ^ (ulong)getpid();
b = bb ^ (ulong)time(NULL);
memcpy( marker, &a, SIZEOF_UNSIGNED_LONG );
memcpy( marker+SIZEOF_UNSIGNED_LONG, &b, SIZEOF_UNSIGNED_LONG );
}
Also ich könnte euch jetzt erzählen, daß Werte auf dem Stack alles andere als zufällig sind, daß PID und Uhrzeit auch eher gut ratbar sind, aber die eigentliche Nachricht ist: gnupg hat einen "control channel", der in-band signalling benutzt, und auf dem Angreifer Daten einschleusen können. Mehr muss man nicht sagen. Und diesen Müll-Code habe ich seit Jahren eingesetzt! OMFG! Ich glaube nicht, daß das mit einem Patch fixbar ist. Wegschmeißen, neu machen. Im Übrigen schreibt man das "although", nicht "also".