1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Findet Apples Sicherheits-Bug

  • Plantschkuh!
  • 22. Februar 2014 um 14:00
  • Unerledigt
  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    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.)

    *plantsch*

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

    :rofl:

    Ex-PP-Tutor und genereller [strike]Besser[/strike]Schlechterwisser

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

    Ich vermute, copy-paste-Fehler. :grinning_squinting_face:


    Sent from my iPhone using Tapatalk

    Nur die Wahrheit.

  • emptyvi
    14
    emptyvi
    Logo 2012, Platz 2.
    Reaktionen
    102
    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. :grinning_squinting_face:


    ¤¸¸.•´¯`•¸¸.•..>> Join the herd, join "My Little Pony @ TU-Wien" <<..•.¸¸•´¯`•.¸¸¤
    ¤¸¸.•´¯`•¸¸.•..>> (100% Twilight Sparkle approved) <<..•.¸¸•´¯`•.¸¸¤


    PP-Tutor WS2011 - WS2014
    EVC-Tutor SS2015


  • christianabila
    2
    christianabila
    Mitglied
    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

    Nur die Wahrheit.

  • christianabila
    2
    christianabila
    Mitglied
    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

    Nur die Wahrheit.

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

  • Juggl3r
    8
    Juggl3r
    Mitglied
    Reaktionen
    15
    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?

    "The quieter you become, the more you are able to hear."
    -------------------------------------------------------------------------------------

  • emptyvi
    14
    emptyvi
    Logo 2012, Platz 2.
    Reaktionen
    102
    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.. :grinning_face_with_smiling_eyes:
    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


    ¤¸¸.•´¯`•¸¸.•..>> Join the herd, join "My Little Pony @ TU-Wien" <<..•.¸¸•´¯`•.¸¸¤
    ¤¸¸.•´¯`•¸¸.•..>> (100% Twilight Sparkle approved) <<..•.¸¸•´¯`•.¸¸¤


    PP-Tutor WS2011 - WS2014
    EVC-Tutor SS2015


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

    Das mit den Unit Tests war auch mein erster Gedanke

    "The quieter you become, the more you are able to hear."
    -------------------------------------------------------------------------------------

  • andihit
    2
    andihit
    Mitglied
    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
    13
    mtoman
    Mitglied
    Reaktionen
    47
    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
    8
    Juggl3r
    Mitglied
    Reaktionen
    15
    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 :winking_face:
    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.

    "The quieter you become, the more you are able to hear."
    -------------------------------------------------------------------------------------

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

    Sind "go to" Befehle wirklich so schlimm wie alle sagen? :winking_face: 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.

    That awkward moment when you realize everyone on this board knows more about a test/homework than you do.

  • mtoman
    13
    mtoman
    Mitglied
    Reaktionen
    47
    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? :winking_face: 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
    5
    Cr0w3
    Mitglied
    Reaktionen
    5
    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?

    That awkward moment when you realize everyone on this board knows more about a test/homework than you do.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    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? :winking_face:


    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.

    *plantsch*

  • Cr0w3
    5
    Cr0w3
    Mitglied
    Reaktionen
    5
    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 :)

    That awkward moment when you realize everyone on this board knows more about a test/homework than you do.

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

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    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]

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

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

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    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.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • emptyvi
    14
    emptyvi
    Logo 2012, Platz 2.
    Reaktionen
    102
    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


    ¤¸¸.•´¯`•¸¸.•..>> Join the herd, join "My Little Pony @ TU-Wien" <<..•.¸¸•´¯`•.¸¸¤
    ¤¸¸.•´¯`•¸¸.•..>> (100% Twilight Sparkle approved) <<..•.¸¸•´¯`•.¸¸¤


    PP-Tutor WS2011 - WS2014
    EVC-Tutor SS2015


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

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Tags

  • #gotofail

Rechtliches

Impressum

Datenschutzerklärung