1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Findet Apples Sicherheits-Bug

  • Plantschkuh!
  • 22. Februar 2014 um 14:00
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 22. Februar 2014 um 14:00
    • #1

    http://opensource.apple.com/source/Securit…slKeyExchange.c, in der Funktion SSLVerifySignedServerKeyExchange.

    Und das, Kinder, ist der Grund warum ihr immer geschwungene Klammern verwenden sollt.

    (Wenn der Code in eurem Browser auch hingespieben ausschaut: Gemischte Spaces und Tabs. Auch daraus können wir was lernen.)

  • Bradon
    Punkte
    518
    Beiträge
    100
    • 22. Februar 2014 um 14:19
    • #2

    :rofl:

  • christianabila
    Punkte
    30
    Beiträge
    6
    • 22. Februar 2014 um 14:42
    • #3

    Ich vermute, copy-paste-Fehler. :D


    Sent from my iPhone using Tapatalk

  • emptyvi
    Punkte
    2.037
    Beiträge
    374
    • 22. Februar 2014 um 16:10
    • #4

    fail. Aber jetzt hab ich endlich ein schönes Beispiel, das ich den PP-Studis zeigen kann, wenn sie wieder mal fragen warum ifs ohne Klammern uncool sind. :D

  • christianabila
    Punkte
    30
    Beiträge
    6
    • 22. Februar 2014 um 16:11
    • #5

    Ausgezeichnetes Beispiel aus der Praxis. Finde ich gut. :)


    Sent from my iPhone using Tapatalk

  • christianabila
    Punkte
    30
    Beiträge
    6
    • 23. Februar 2014 um 14:27
    • #6

    Wird auf derstandard.at berichtet:
    http://derstandard.at/1392686067499/…cherheitsluecke

    Weitere Vorgehensweisen, dieses Problem zu beheben, sind im Artikel beschrieben.

    Von einer US-amerikanischen Sicherheitsbehörde:
    http://web.nvd.nist.gov/view/vuln/deta…d=CVE-2014-1266

    Einmal editiert, zuletzt von christianabila (23. Februar 2014 um 14:32) aus folgendem Grund: more info

  • Juggl3r
    Punkte
    565
    Beiträge
    98
    • 23. Februar 2014 um 18:40
    • #7

    Habt ihr schon den Diff gesehen?
    http://i.imgur.com/XIJlcxC.png

    Wie kann man so einen Fehler bei dem Diff "zufällig" einbauen?

  • emptyvi
    Punkte
    2.037
    Beiträge
    374
    • 23. Februar 2014 um 18:57
    • #8

    Das schaut auf den ersten Blick schon recht absichtlich aus. Andererseits braucht man nur ein bissl rummurksen (ala "oh da fehlt noch ein if, weil Fall xyz ist noch nicht abgedeckt *kopiert if mit fail hin* - ach, bin ich blöd.. steht ja eh da.. *löscht nur if aber das fail nicht mehr"). Wenn ich darane denke, was für abstruse Fehler mir teilweise schon unterlaufen sind.. ^^
    Was mich viel mehr verstört ist, dass die scheinbar keinerlei automatische Tests drüber laufen haben lassen. Bei nem simplen Unit-Test hätte das doch schon failen müssen.. oO

  • Juggl3r
    Punkte
    565
    Beiträge
    98
    • 23. Februar 2014 um 19:41
    • #9

    Das mit den Unit Tests war auch mein erster Gedanke

  • andihit
    Punkte
    15
    Beiträge
    3
    • 23. Februar 2014 um 21:19
    • #10

    evtl. verdrückt und unabsichtlich den Shortcut für aktuelle-Zeile-kopieren erwischt? (passiert mir öfters..)
    Aber normalerweise schaut man sich den diff ja an bevor man committed...

    und dass dieser Fehler so lange unentdeckt blieb... is auch komisch
    bzgl: Unit Tests: vmtl habens eh welche, nur diesen Testfall habens halt vergessen

    oder die NSA is an allem schuld

  • mtoman
    Punkte
    1.767
    Beiträge
    331
    • 23. Februar 2014 um 22:58
    • #11

    Hmm, das Ding ist überhaupt recht wild..
    dachte zuerst: "na, wenn das eh in jedem Fall failed, dann dürfte ja zumindestens die Sicherheitslücke nicht entstehen".

    Bis ich dann gesehen habe, dass das fail-label in jedem Fall durchlaufen wird.
    Was von der Benennung hier etwas verwirrend ist.. und ja, man sieht ja wozu das dann führt...
    wäre "fail" wirklich ein "fail", dann wäre dieses doppelte goto schneller aufgefallen.

  • Juggl3r
    Punkte
    565
    Beiträge
    98
    • 24. Februar 2014 um 00:59
    • #12

    Ja und er gibt ja err zurück und da err kein err ist, läuft es nicht schief ;)
    Hab irgendwo mal bei den Comments gelesen, dass XCode keinen Shortcut für Zeile kopieren/einfügen hat. Auch wäre es unlogisch bei der Änderung diese Zeile anzunavigieren.

  • Cr0w3
    Punkte
    195
    Beiträge
    28
    • 24. Februar 2014 um 08:26
    • #13

    Sind "go to" Befehle wirklich so schlimm wie alle sagen? ;) Da ich noch nichts mit C programmiert habe, hatte ich auch noch nichts mit go to zu tun. Die Leute scheinen schockiert zu sein, dass sowas (bei Apple) benutzt wird.

  • mtoman
    Punkte
    1.767
    Beiträge
    331
    • 24. Februar 2014 um 11:27
    • #14
    Zitat von Cr0w3

    Sind "go to" Befehle wirklich so schlimm wie alle sagen? ;) Da ich noch nichts mit C programmiert habe, hatte ich auch noch nichts mit go to zu tun. Die Leute scheinen schockiert zu sein, dass sowas (bei Apple) benutzt wird.

    Naja, darüber kann man wohl streiten.. der Programmfluss wird halt schwieriger überschaubar, wenn man wild umherspringt.
    Zum Error-Handling wird es ja schon öfters mal noch verwendet.

    Was in der Situation wohl die beste Lösung wäre?
    Würde mich interessieren, was ihr dazu meint.
    (abgesehen von {} IMMER verwenden :) )

    - Die Variante mit den tausend verschachtelten ifs erhöht auch nicht unbedingt die Lesbarkeit.

    - Im error case sofort returnen bricht diese "one way in, one way out"-Regel, hätte hier das cleanup-Problem und hätte nichts gerettet, wenn stattdessen das return doppelt dringewesen wäre.

    - Return-Wert OK/NOK und Error-Number extra speichern hätte das Problem die Sicherheitslücke hier verhindert (wenn "return NOK" fälschlicherweise kopiert worden wäre).
    Da ist halt dann wieder die Frage: einen zusätzlichen unschönen Parameter per Pointer mitgeben für den Error-Value? Oder die "get_last_error"-Variante die aber ihre Probleme mit Parallelität hat, und die Funktion recht "unpure" werden lassen würde (was z.B. für Parallelisierung nicht gerade förderlich wäre).

    - Wenn man das goto beibehalten möchte: den eigenen Return Wert vom Return-Wert der aufgerufenen Funktionen trennen.
    Also z.B. anfangs OK = 0 und dann direkt VOR dem fail-label OK = 1 nur dann wenn wirklich alles durchlaufen wurde. Der bissl eigenartige Fall ist dann halt, wenn OK und "err" dann nicht übereinstimmen.

  • Cr0w3
    Punkte
    195
    Beiträge
    28
    • 24. Februar 2014 um 12:05
    • #15
    Zitat

    - Return-Wert OK/NOK und Error-Number extra speichern hätte das Problem die Sicherheitslücke hier verhindert (wenn "return NOK" fälschlicherweise kopiert worden wäre).
    Da ist halt dann wieder die Frage: einen zusätzlichen unschönen Parameter per Pointer mitgeben für den Error-Value? Oder die "get_last_error"-Variante die aber ihre Probleme mit Parallelität hat, und die Funktion recht "unpure" werden lassen würde (was z.B. für Parallelisierung nicht gerade förderlich wäre).

    Das ist grundsätzlich der Weg, den ich bei "ähnlichen Problemen" gehe. Mag vllt. unschön sein, aber in Punkto Nachvollziehbarkeit sicher leichter zu finden und verstehen.

    Was ist eigentlich der Unterschied zwischen goto xyz und xyz() als stinknormaler Methodenaufruf?

  • Plantschkuh!
    Punkte
    6.173
    Beiträge
    1.181
    • 24. Februar 2014 um 15:22
    • #16
    Zitat von Cr0w3

    Sind "go to" Befehle wirklich so schlimm wie alle sagen? ;)


    Kommt drauf an wohin man springt. Vorwärtssprünge aus Schleifen oder Bedingungen hinaus (also sowas wie verallgemeinertes break) sind nicht so schlimm wie wenn du wild zurück und in Schleifen hinein springst.

    Zitat

    Die Leute scheinen schockiert zu sein, dass sowas (bei Apple) benutzt wird.


    Welche Leute? Dieses Idiom mit Sachen testen und wenn was schiefgeht zum clean up code am Ende der Funktion springen ist in der Systemprogrammierung recht akzeptiert. Der Python-Interpreter verwendets intern auch. Linux auch, glaub ich.

    Zitat von mtoman


    Was in der Situation wohl die beste Lösung wäre?
    Würde mich interessieren, was ihr dazu meint.
    [...]
    - Die Variante mit den tausend verschachtelten ifs erhöht auch nicht unbedingt die Lesbarkeit.


    Ein großes großes Oder hätte hier auch gereicht. Aber ja, das ist auch nicht unbedingt super.

    In Wirklichkeit gehören die ganzen Überprüfungen hier in eine eigene Funktion ausgelagert. Nur geht dann etwas Kohäsion verloren. Verschachtelte Funktionen wären der Hit, gibts aber in C nicht.

    Zitat von Cr0w3

    Was ist eigentlich der Unterschied zwischen goto xyz und xyz() als stinknormaler Methodenaufruf?


    Ein Aufruf schiebt die Rücksprungadresse auf den Stack, damit man zurückspringen kann. Bei goto ist das nicht vorgesehen.

  • Cr0w3
    Punkte
    195
    Beiträge
    28
    • 24. Februar 2014 um 15:58
    • #17

    Danke für die Aufklärung :)

    Zitat

    Welche Leute?

    Bekannte, Leute aus dem Standardforum und auch bei Stackoverflow hab ich einen Link gefunden, wo erklärt wird, dass gotos böse sind. (http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215.PDF)

    Zitat

    Dieses Idiom mit Sachen testen und wenn was schiefgeht zum clean up code am Ende der Funktion springen ist in der Systemprogrammierung recht akzeptiert. Der Python-Interpreter verwendets intern auch. Linux auch, glaub ich.

    Hängt dann vermutlich stark mit dem Anwendungszweck zusammen, obs gut oder böse ist. Wahrscheinlich wissen auch viele Leute gar nicht wo goto überall verwendet wird :)

    Einmal editiert, zuletzt von Cr0w3 (24. Februar 2014 um 16:01)

  • Kampi
    Punkte
    7.828
    Beiträge
    1.468
    • 3. März 2014 um 11:08
    • #18
    Zitat von Plantschkuh!

    Und das, Kinder, ist der Grund warum ihr immer geschwungene Klammern verwenden sollt.

    tja, die frage ist ob man es auch tut. natürlich hab ichs in OSUE immer brav den studenten vorgebetet, aber privat hab ich bemerkt dass ich zusehends drauf verzichte... und dann gibt es natürlich auch noch coding guidelines die sagen man darf nicht klammern. linux kernel zb. openbsd (man style) läßt es offen.

    Zitat von emptyvi

    Was mich viel mehr verstört ist, dass die scheinbar keinerlei automatische Tests drüber laufen haben lassen. Bei nem simplen Unit-Test hätte das doch schon failen müssen.. oO

    Zitat von https://www.imperialviolet.org/2014/02/22/applebug.html

    A test case could have caught this, but it's difficult because it's so deep into the handshake. One needs to write a completely separate TLS stack, with lots of options for sending invalid handshakes.

    [edit]zeit für ein neues t-shirt: http://teespring.com/goto-fail-goto-fail[/edit]

    Einmal editiert, zuletzt von Kampi (3. März 2014 um 11:12)

  • Wolfibolfi
    Punkte
    14.936
    Beiträge
    2.942
    • 7. März 2014 um 22:01
    • #19

    Hey, ich hab den Fred erst jetzt gesehen. Dankeschön für den Link, hehe. Zum Glück komm ich so gut wie nie dazu, goto zu verwenden. Und klammern tu ich eigentlich auch immer.

  • emptyvi
    Punkte
    2.037
    Beiträge
    374
    • 7. März 2014 um 22:57
    • #20
    Zitat von Wolfibolfi

    Und klammern tu ich eigentlich auch immer.

    Hier könnte vielleicht ein Beziehungspsychologe weiterhelfen. #badPunDay #doILookLikeAnIdiotUsingHashtagsHereOhMyICertainlyDoSorry #EspeciallyIfTheForumAutoseperatesEm

    2 Mal editiert, zuletzt von emptyvi (8. März 2014 um 04:05)

Tags

  • #gotofail
  1. Datenschutzerklärung
  2. Impressum