Seite 1 von 1

Best of Bugs

Verfasst: Do Aug 08, 2013 4:34 am
von mastastefant
Xerox hat anscheinend bei ein paar Kopierer-Modellen einen unpassenden/schlecht konfigurierten Kompressionsalgorithmus verwendet:
http://www.dkriesel.com/blog/2013/0802_ ... n_scanning

Wenn man Vorlagen als komprimiertes jpg scannt, nimmt der Algorithmus schon mal Bildteile mehrfach her, die grade noch ähnlich genug sind.. so wird aus einer kleinen 6 schon mal ne kleine 8, wenn diese auch im Text vorkommt. Funktioniert für Bilder, bei Text führt das dazu dass im Scan dann Zahlen/Kosten/Größenangaben/.. plötzlich 'Tippfehler' enthalten, ziemlich heftig für nen Bürokopierer. Wär spannend das mal auszuprobieren.

Verfasst: Do Aug 08, 2013 8:06 am
von Grent
Wahnsinn. Der Typ muss gedacht haben, er spinnt komplett, als er den Fehler bemerkt hat.


Ich hatte mit einer Kamera-Serie zu tun, die beim Datum nach dem 12. Monat in den 13. wechselte. :p

Verfasst: Sa Aug 17, 2013 12:43 am
von mastastefant
Ich find das immer wieder krass, wie hoch da die Auflagen sind wenn man ein Flugzeug baut, was da alles getestet und berücksichtigt wird, dass man dann tatsächlich die Auflagen meist noch um eine 10er-Potenz unterbieten kann bei den Ausfallraten (die Wahrscheinlichkeit für einen Fehler mit möglicherweise katastrophalen Auswirkungen (i.e, Verlust von Menschenleben) in einem Flieger muss bei 10^-9 liegen.. Eine einzelne (!) Lötstelle hat bereits ne Ausfallswahrscheinlichkeit von 10^-6, zum Vergleich eine Glühbirne von 10^-3.. ) .. und an welchen Fehlern es dann am Ende dann wirklich scheitert:
http://www.welt.de/wirtschaft/article11 ... escht.html

Kabel der Löschanlage falschrum angesteckt, die Löschanlage hätte beim Triebwerksbrand das falsche Triebwerk gelöscht.. Macht wahrscheinlich nicht so viel in Wirklichkeit weil die Triebwerke trotz Löschung wohl weiterlaufen können müssen, dann löscht man halt einfach alles, trotzdem ein echter Murphy.


Zu dem Xerox Bug: auf der Xerox Webpage gibts mitterweile auch was, das liest sich ein bissl nach "Uups, da hilft nur wegschmeißen, alles neu machen.. " :)
http://realbusinessatxerox.blogs.xerox. ... g6kMkBgjNs

Vielleicht erklärt das auch, wo die eine oder andere Million hingekommen ist, oder wieso ein U-Boot am Ende 70t zu schwer ist und nur in eine Richtung funktioniert, oder wieso man einen Wolkenkratzer mit zu kleinen Fahrstuhlschächten baut .. :)

Auf der anderen Seite ermöglicht das auch ganz neue Verteidigungsmöglichkeiten wenn da wer wegen Bilanzfälschung vorm Richter steht .. "Da muss ihre Kopie falsch sein, bei uns passt das alles.."
Ziemlich arg eigentlich, wie weitreichende Auswirkungen so ein einzelner Bug haben kann ..

Verfasst: Sa Aug 17, 2013 2:37 am
von mastastefant
Hier ein klein bissl was für Insider, aber gehört zu meinen All-Time Lieblings-Bugs:

Nicht unbedingt der konkrete Bug selbst, aber einfach diese Kategorie an Bugs: Ich hatte genau so einen Bugfix selbst auch schon mal machen dürfen:
http://sourceware.org/ml/glibc-cvs/2013 ... 00115.html
Fix the value of TWO

#define MONE -1.0 /* -1 */
-#define TWO -2.0 /* -2 */
+#define TWO 2.0 /* 2 */
#define TWO5 0x1.0p5 /* 2^5 */
(bei einem Diff werden die Zeilen mit '-' am Anfang durch jene mit '+' am Anfang ersetzt ... )

In meinem Fall war static const int THREE = 2; definiert .. das kommt öfter vor als man denkt, dass Leute Konstanten wie TWO, THREE, .. definieren, und dann auch noch falsch. Weiß der Geier wieso man nur auf so ne Idee kommen kann, solche Leute sollten lebenslanges Programmier-Verbot bekommen.

In der guten alten Zeit habs wenigstens noch richtige Programmiersprachen für Männer wie FORTRAN, dort konnte man (durch einen Compiler-Bug) tatsächlich '4' als '2' definieren, wenn man nicht aufpasst ;)
subroutine munge (i)
i = 3
return

j = 7
call munge (7)
write (6, 11) j
11 format ('j = ', i6)
Beim Call wird dann i auf '7' gesetzt, und '7' bekommt 3 zugewiesen womit danach alle 7er durch 3er ersetzt werden, und das Programm gibt 'j = 3' aus..

Dass der Bug in glibc ist, ist dafür ein doppelter Insider, denn glibc-Code ist bekannt dafür, das Tor zur Hölle zu sein, und der Big Boss war bis vor kurzem Ulrich Drepper, bekannt für seine Aussagen ala "meine Unicode Definition ist korrekter als die vom unicode.org Konsortium", oder "Die glibc sourcen kompiliert nicht" "glibc soll man ja auch nicht kompilieren, sondern von der Distribution nehmen", oder "So was funktioniert aber nicht auf ARM" "ARM ist mir egal, kein Mensch verwendet ARM" ..
glibc ist *die* Basis-Bibliothek auf praktisch jedem Linux-PC, auf der *alles* aufbaut, zumindest war sie das bis vor kurzem, bis ein paar Leute beschlossen haben, sie schreiben die gesamte libc einfach neu, zum teil wegen dem furchtbaren Code, größtenteils aber einfach wegen Ulrichs Ego-Problemen (das ist eine riesen-Menge code!), und die ganze restliche Linux-Welt ist fast geschlossen drauf aufgesprungen, aus demselben Grund. Drepper ist jetzt bei Goldmann Sachs.


Dieser Bug hier geht noch mehr in die Tiefe, aber zeigt sehr schön womit man sich rumplagt wenn man an Compilern oder Kernel oder generell größeren, komplexen C/C++ Programmen arbeitet. Die Menge an Zeit die da reingeflossen sein muss um das zu finden macht das zu einem meiner Favorits:
http://lwn.net/Articles/478657/

Wenn man den btrfs Dateisystem (!) Linuxtreiber mit einer bestimmten Version von GCC für eine bestimmte 64bit Architektur übersetzt, dann optimiert der Compiler (formal legal) den Zugriff auf einen Wert in einer Datenstruktur im generierten Assembly so um, dass das danebenliegende Synchronisationsflag zurückgesetzt wird, wenn zeitgleich (!) ein anderer (!) Prozess das Flag setzt.
D.h., der Bug tritt nur auf, wenn man einen bestimmten Prozessor hat, mit einem bestimmten Compiler mit bestimmten Optimierungen übersetzt, und zufällig grad mehrere Prozesse zur gleichen Zeit lesen und schreiben, und alles was man davon beobachtet ist, dass dann irgendwo in einem Experimental-Dateisystem Daten durcheinandergewürfelt werden. Wenn man sich mit dem Debugger reinhängt und durchsteppt, lauft das ganze nicht mehr wirklich gleichzeitig ab und alles funktioniert.. Der C Code schaut absolut korrekt aus, der C Standard lässt aber offen was da passieren kann, damit kann man nicht mal wirklich gut argumentieren, wo jetzt überhaupt der Bug ist.

Ich hatte aber auch schon schon mal z.B. den Fall, dass Parameterübergabe von 64bit Werten funktioniert hat oder nicht, je nachdem ob man vorher eine gerade oder ungerade Anzahl an Variablen in seinem Programm verwendet hat (64bit Variablen zählen doppelt) .. je nachdem wie man seinen Code hinschreibt optimiert der Compiler allerdings ein paar der Variablen weg. Dadurch hat das Testprogramm zB. je nachdem ob man eine IF-Bedingung reinschreibt oder nicht den Wert 6.0 entweder als 6.00000 oder 6.00002 ausgegeben. Schuld war dass eine Compiler-Konfiguration zwar an einer Stelle richtig gesetzt war, für den Code hat er aber ne andere undokumentierte Variable verwendet, die er nicht aus der Konfiguration befüllt sondern die man zusätzlich setzen musste.. Hat mich auch ne gute Woche gekostet :base:

Gut, so was kommt in den besten Familien vor .. Die Ariane 5 hat sich beim ersten Testflug auch selbst gesprengt, weil das Guidance System einen Overflow beim Geschwindigkeitswert hatte. Da wurde nämlich Software von der Ariane 4 wiederverwendet. Die Ariane 5 ist aber schneller.

Re: Best of Bugs

Verfasst: Fr Aug 02, 2024 9:01 am
von mastastefant
Delta Airlines hätte gerne 500mio $ von Crowdstrike und Microsoft:
https://www.cnbc.com/2024/07/31/delta-c ... llion.html

Großes Kino! Da kann's nur Gewinner geben.

Delta sagt, sie müssen einfach klagen, den armen Shareholder wegen. Und Crowdstrike kann nicht einfach ungetestete Software in ihr kritisches system einbringen.

Tja, da hat der Delta CEO wohl vergessen dass sie ja keiner zwingt, Crowdstrike einzusetzen.. und auch nicht die AGB gelesen, da steht nämlich drin, dass deren zeugs nicht für kritische Infrastruktur eingesetzt werden darf. Die wissen selber was das für ein Ranz ist.

Und dann Microsoft mit reinziehen. Das einzige woran die Schuld sind ist dass der Crowdstrike Treiber überhaupt durch deren WHQL Zertifizierung durchgegangen ist.

Crowdstrike hat nämlich einen Kernel Treiber für ihr Zeug gebaut, damit sie alles sehen was am System vorbeigeht. Ein Fehler im Kernel ist aber immer kritisch, bringt immer das System down. Deswegen gibt's von Microsoft WHQL Zertifizierung wo Microsoft dem Code auf Fehler checkt.
Crowdstrike will aber nicht für jeden Virus Patch durch die Zertifizierung durch, weil's zu lang dauert, also haben sie dem eigentlichen Code in ein Modul ausgelagert, dass der Kernel Treiber nachlädt. Damit ist das Modul nicht mehr Teil der WHQL Zertifizierung. Crowdstrike hat damit Kernel Level sideloading eingebaut, ganz toll, weil genau sowas sollte eigentlich das ganze antiviruszeugs verhindern.

Und dann hat Crowdstrike anfängerfehler Nummer eins gemacht, nämlich das Modul geladen ohne Input checking, und dann noch ohne nullpointer check.
Der Fehler war dass ein Update eine leere Signatur Datei hochgeladen hat, damit haben die nullpointer dereferenziert, und hin ist der Kernel. Für eine angeblich Security Firma ist das oberblamabel, weil das sind die basics die jeder lernt, die sie da verbockt haben. Und im den Schaden zu maximieren, haben sie den Treiber als mandatory klassifiziert, damit Windows den Treiber bei Problemen auch nicht überspringen kann.
Obendrein blamabel, weil sie mit der selben Tour erst vor wenigen Monaten davor Linux Systeme auf die selbe Art abgeschossen haben.
Aber wer sich so was wie Crowdstrike in Linuxsysteme einbaut ist mMn selber schuld, der verdient es nicht besser..

Da kann Microsoft genau gar nix dagegen machen, wenn jemand so ein verhunztes Kernel Modul einbaut. Wieso ein unchecked nullpointer dereferenzierung durch deren WHQL durchging, zeigt aber auch kein gutes Bild, was die Zertifizierung wert ist.

Nur, das Microsoft schon was dagegen getan hat! Die haben das Problem schon lange erkannt, und haben eine API eingebaut, um Virus scannern Zugriff zum System zu geben, ohne Kernel Treiber. So wie es Apple schon gemacht hat. Dann crashed nur der Virusscanner, ohne dass das System crasht.

Nur, dass dann die EU Regulierungsbehörden in einem Anflug vollkommener Inkompetenz oder Langeweile gemeint haben, dass das Wettbewerbsverzerrung sei, weil dann Virenscanner irgendwie mehr können als andere Programme, oder so. Und daher gibt's die API jetzt nicht.
Hey, weiß auch nicht, warum die EU so ein schlechtes Bild bei der Bevölkerung hat..

Dass die Leute jetzt auf Microsoft wegen Schadensersatz zeigen, das finden die Leute bei Microsoft jetzt sicher wenig witzig.

Mal sehen was da jetzt rauskommt bei Delta. Aber alles andere als das Delta mit ihren Shareholdern auf dem Schaden sitzen bleibt, und die EU zurückrudert bei der Scanner API und Microsoft bei WHQL Mal nachschärft, wär ne ziemliche Frechheit..

Re: Best of Bugs

Verfasst: Di Sep 03, 2024 9:37 pm
von florianklachl
Bei mir war bei diesem Bug am Tag danach nur ein mit auffaellig hoher Dringlichkeit zu installierendes Sicherheitsupdate am Windowsrechner. Als Test fuer die Sicherheitsersatzsysteme ist es aber vielleicht sogar gut, wenn auch Microsoft manchmal ein bisschen pfuschen laesst. :)