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.)

AUA! WordPress neu formatieren

Ich habe es ja schon lange geahnt: wordpress und microsloth winhose sind gar nicht so verschieden. Wenn man so etwas wie das folgende bei der „weblog tools collection“ liest, wird aus dieser ahnung eine pochende gewissheit (übelsetzung von mir):

Wegen meines neuen deseings dachte ich mir, dass es eine gute idee wäre, meine wordpress-installazjon neu zu formatieren – ganz ähnlich, wie man einen pc neu formatiert, um eine neue installazjon von windows darauf vorzunehmen.

(…)

Indem ich nur die inhalte meiner wordpress-datenbank in diese WXR-datei exportierte, bewahrte ich mich davor, den ganzen in der datenbank angesammelten müll in meine neue installazjon von wordpress zu übernehmen.

Man könnte wirklich glauben, hier spricht einer von der winhose-registrierung…

Und was aus einer solchen veröffentlichung einen richtigen brüller macht: Einen link zu dieser meldung sieht gerade jeder wordpress-blogger in seinem „dashboard“. Damit auch jedem klar wird, was für systembedingter müll beim betrieb von wordpress entstehen kann, wenn man nicht gelegentlich mit schmackes in die scheiße greift und das tut, was man manchmal eben so tun muss.

(Aber ich tue es lieber mit ein paar gezielten löschungen in der datenbank.)