Nacktes entsetzen…

…machte sich eben bei mir breit, als ich die heise-meldungen überflog. An sich ist mir eine meldung zum ICQ-client ja sowas von scheißegal, aber ich kenne eben auch menschen, die so etwas benutzen und deshalb mal eine kleine warnung brauchen könnten, wenn eine wirklich kritische lücke bekannt wird.

Das mit dem nackten entsetzen fing schon an, als ich von der eigentlich gemeldeten lücke las:

Ursache des Problems ist eine Format-String-Schwachstelle […]

Vielleicht weiß nicht jeder, wieso so etwas bei mir entsetzen auslösen kann. Deshalb eine kleine (und für absolute laien vielleicht zu kurze) erklärung dazu.

Die formatierte ein-/ausgabe in der programmiersprache C ist wirklich sehr schlicht. Es gibt eine funkzjon printf(), die kriegt als ersten parameter einen string, der angibt, wie die auszugebenden daten formatiert werden sollen, weitere daten können als parameter folgen. Natürlich gibt es diese funkzjon in vielen „geschmacksrichtungen“, damit man auch in dateien, oder in strings hinein formatiert ausgeben kann. Im einem sehr einfachen fall sieht die anwendung dieser funkzjon so aus:

extern int n, m;
printf ("Anzahl: %d/%d (%f%%)\n", n, m, (100.0 * n) / m);

Ja, ich weiß, das ist schrecklich. 😀 Aber es ist auch sehr flexibel. Die formatanweisungen werden mit einem prozentzeichen eingeleitet, darauf folgen weitere angaben zum datentyp und zur breite des ausgabefeldes. Wenn tatsächlich einmal ein prozentzeichen ausgegeben werden soll, muss man eben zwei prozentzeichen schreiben – wie ich in diesem einfachen beispiel auch demonstriert habe. Denn es ist möglich, auch feststehende texte in die formatierte ausgabe aufzunehmen, was übrigens – wie vieles an C – sehr praktisch ist.

Aber diese praktische eigenschaft der stdio-bibliotek verleitet anfänger (!) immer wieder dazu, dass sie ihre texte so ausgeben wollen:

extern char *a_string;
printf (a_string);

Und das sollte man wirklich lassen! Wenn der inhalt der variablen a_string sogar noch aus einer benutzereingabe oder gar aus dem internetz kommt, sollte man es in jedem fall lassen, es ist brandgefährlich. Die korrekte und ungefährliche form, einen solchen text auszugeben, sieht so aus:

extern char *a_string;
printf ("%s", a_string);

Wenn man es nicht so macht, kann ein angreifer beliebige listen von parametern für eine formatierte ausgabe angeben. Die weiteren parameter werden einfach vom stack geholt. Je nach kontext sind auf diese weise buffer-überläufe, stack-manipulazjonen oder auch einfach nur irreführende und gefährliche ausgaben möglich. Wie gesagt, es ist ein absoluter anfängerfehler, wenn man es anders macht.

Und so ein blutiger anfängerfehler steckt also in einem programm, mit dem zurzeit milljonen von menschen im internet unterwegs sind. Wenn ich mir überlege, dass einige dieser anwender nicht besonders sorgsam sind und ihren ICQ-client erst appdäjhten werden, wenn sie ihr windohs neu installieren, denn werden angriffe gegen diesen fehler wohl auch noch in etlichen monaten erfolg versprechen. Wo haben die programmierer dieser aufdringlich bunten IM-softwäjhr eigentlich diese patzer von programmierern herbekommen?

Aber das nackte entsetzen hörte bei dieser vorstellung noch lange nicht auf, denn diese meldung geht ja noch weiter:

Da ICQ für das Rendering von HTML-Nachrichten die Funktionsbibliotheken des Microsoft-Browsers benutzt, (…)

Ja, richtig gelesen!!1! Die betten da einen kompletten internet-exploiter mit allen seinen problemen und schwächen in ein programm ein, nur damit leute beim tschätten etwas bunter machen können. Unfassbar!!1! Es ist denen wohl nicht möglich, dafür eine kleine, harmlose komponente zu nehmen, die HTML kann, aber nichts mit dieser ganzen jauche zu tun hat. Niemand braucht in einer angezeigten tschättzeile möglichkeiten wie „active x“ oder „active scripting“ oder eingebettete multimediale objekte – niemand, außer ein paar schurken, die sich solche permanenten schwachstellen zunütze machen können. Warum zum schwefelkackenden höllenhund wird so ein klaffendes sicherheitsloch in eine an sich harmlose softwäjhr verbastelt?

Wenn ich nur daran denke, wie viele von den menschen, die ich endlich vom brauser-umstieg auf opera oder firefox überzeugen konnte, diese ICQ-jauche weiterhin arglos benutzen und gar nicht verstehen können, weshalb sie sich damit den gleichen gefahren aussetzen, die auch im IE stecken. Da können sie auch gleich weiter mit dem IE im netz versinken und ihren kompjuter von jedem dahergelaufenen verbrecher durchficken lassen!

Wer meint, das sicherheit wichtig ist, sollte ICQ mit einer anderen softwäjhr benutzen – guhgell hilft beim finden. (Auf windohs-maschinen bin ich persönlich begeistert von miranda IM, aber das ist vielleicht eine geschmacksfrage.)

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.