🤯 PaSo's Welt: 14.04.2014 - Eine kleine Kritik zur unterirdischen Qualität des Quellcodes der "OpenSSL" Bibliothek, die uns aktuell den "Heartbleed"-Supergau beschert

Es ist mein erstes mal, das ich öffentlich ein Softwareprojekt kritisiere. Aber das aktuelle Problem mit dem "Heartbleed"-Supergau sowie dem rumgeheule der OpenSSL Verantwortlichen über "strukturelle Schwächen" zwingt einen praktisch dazu.

Zuerst aber eine persönliche Bemerkung, denn der nachfolgende Text könnte ggf. nicht ganz neutral sein - Oder wie es auf Neudeutsch heißt "That's a matter of opinion":
Konkret geht es um einen der "Maintainer" von OpenSSL, Ralf S. Engelschall, oder kurz "rse". Ich habe "rse" Mitte 2000 bei einem Vortrag kennengelernt und fand Ihn persönlich, sein Verhalten und den Vortrag selbst absolut unterirdisch. Ein Blick auf seine aktuelle Webseite "http://engelschall.com/" bestätigt immer noch den Eindruck, den ich vor 14 Jahren von "rse" erlangt habe, auch scheint das der "Train of thoughts" wohl auch seit 2008 auf dem Abstellgleis - Entschuldigung, ich meine natürlich "storage track" - steht. Wenn man sich den "Eigenlob stinkt ja nicht" Text bei "The Gang" & Co. so durchliest, müsste man meinen, das der Quellcode von OpenSSL wie mit Persil gewaschen aussieht und "rse" voll der Superchecker ist - Egal zu welchem Thema... Ok, kommen wir nun zum "reality check":

So, nun ist es passiert: OpenSSL hat sich "Überschla' wie a dreckschipp". Und das war nur eine Frage der Zeit, mich wundert es, das nicht schon früher massive "Probleme" aufgetaucht sind. Denn die Qualität des Quellcodes ist alles andere als optimal, hier helfen auch keine Ausreden in der Preisklasse "Uns fehlen Mithelfer". Das "OpenSSL Projekt" gibt es seit 1998 und in den knapp 16 Jahren währe wohl mal ein Codereview und Redesign "drin" gewesen.
  • Ideologie & Co:
    • Natürlich, 80x24 kompatibel
    • Dateinamen sind meist im nichts sagenden 8.3 Format
    • Unlogische und inkonsistente Klammerung
    • goto end; oder goto err; - Was soll man da noch sagen? goto? In Worten: G-O-T-O
    • Und natürlich die übliche Angst der Entwickler: Leerzeichen könnten beißen...
  • Dokumentation? Was ist eine "Dokumentation"? - Hört sich wie eine tropische Krankheit an...
  • Variablennamen:
    z.B.: int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d, int n, int *al) {...}
    Dieses Konzept ist durch den gesamten Code zu finden, Variablenbezeichnungen sind meist so kurz und nichts sagend wie möglich. Ein Kommentar zur Funktion selbst fehlt natürlich.
  • Eine konsistente Nutzung von Konstanten hat schon was für sich, z.B. muß man weniger Rätseln ala "Was will mir der Künstler sagen?":
    r = tls_decrypt_ticket(s, p, size, session_id, len, ret);
    switch (r)
     {
     case 2: /* ticket couldn't be decrypted */
      s->tlsext_ticket_expected = 1;
      return 2;
     case 3: /* ticket was decrypted */
      return r;
     case 4: /* ticket decrypted but need to renew */
      s->tlsext_ticket_expected = 1;
      return 3;
     default: /* fatal error */
      return -1;
     }
  • Und zuletzt "MAGIC VALUES", was währe ein seriöses Programm ohne "MaGiC VaLuEs"? Das wirklich schlimme daran ist, die hier vorgestellten Konstrukte werden teilweise bei Speicheroperationen genutzt! Also was soll das, mal 1 + 2 + irgendwas oder -4 oder +4 oder mal ein ganz freches +/-16, das ist doch Wahnsinn!
    Eine Auswahl:
    buf = OPENSSL_malloc(1 + 2 + payload + padding);
    ret = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buf, 3 + payload + padding);
    int rv = tctx->tlsext_ticket_key_cb(s, nctick, nctick + 16,&ctx, &hctx, 0);
    if (s->s3->server_opaque_prf_input_len != size - 2)
    dsize -= 2 + idsize;
    if (data >= (d+n-2)) goto ri_check;
    while (data <= (d+n-4))




Aktualisiert am 02.07.2014:
Beim "OpenSSL" Projekt gibt es zwei Neuerungen. Zum einen wurde eine lachhafte "Roadmap" vorgestellt um die Qualität(!) des Quellcodes zu verbessern und zum zweiten wurde der Status von "rse" auf "Inaktiver Entwickler" ich meine natürlich "Currently inactive OpenSSL members" gesetzt.

Erstellt durch: PaSo's MuseumsWelt V5.01.04 Edition #Neuland / Datenschutz-Grundverordnung (DSGVO)
Erstellt am: 16.08.2022 13:05