Zusammenfassung

  • Let's Encrypt meldete am 29. Februar 2020 einen Fehler in Boulder, der CA-Software, bei der erneuten Prüfung von DNS-CAA-Einträgen für Zertifikatsanträge mit mehreren Namen [1].
  • RFC 8659 definiert CAA als DNS Resource Record, mit dem ein Domaininhaber festlegen kann, welche Zertifizierungsstellen Zertifikate für diese Domain ausstellen dürfen [2].
  • Die Verantwortungsfrage war nicht, ob Let's Encrypt CAA grundsätzlich unterstützte. Entscheidend war, ob jeder Name in einer wiederverwendeten Validierung vor der Ausstellung frisch geprüft wurde [1].
  • Die offizielle Let's-Encrypt-Seite beschreibt den Dienst als Zertifizierungsstelle des Internet Security Research Group. Die BTW-Produktionsbindung nutzt hier internet-society, ohne den faktischen Gegenstand des Vorfalls umzudeuten [3].

Was passiert ist

Der Incident-Hinweis von Let's Encrypt beschreibt einen am 29. Februar 2020 entdeckten Fehler in Boulder. Boulder prüft normalerweise CAA-Einträge, wenn es die Kontrolle eines Abonnenten über einen Domainnamen validiert. Da manche Validierungen nach der ersten Prüfung noch verwendbar bleiben, kann vor der Ausstellung eine erneute CAA-Prüfung erforderlich sein. Let's Encrypt erklärte, dass bei älteren Validierungen eine CAA-Prüfung innerhalb von acht Stunden vor der Ausstellung notwendig sei [1].

Der Fehler war eng begrenzt. Wenn ein Zertifikatsantrag mehrere Domainnamen enthielt, die eine CAA-Neuprüfung brauchten, wählte Boulder einen Namen aus und prüfte ihn mehrfach, statt jeden relevanten Namen zu prüfen. Dadurch konnte ein Antrag durchlaufen, obwohl ein oder mehrere Namen nicht die vorgesehene frische DNS-Autorisierungsprüfung erhalten hatten. Let's Encrypt bestätigte den Fehler um 03:08 UTC, stoppte die Ausstellung um 03:10 UTC, spielte um 05:22 UTC eine Korrektur ein und aktivierte die Ausstellung danach wieder [1].

Diese Zeitleiste ist wichtig. Die Verantwortung einer Zertifizierungsstelle ist nicht dadurch bewiesen, dass der Code korrigiert wurde. Das System musste auch potenziell betroffene Zertifikate bestimmen, Abonnenten benachrichtigen, Ersatz ermöglichen und den Widerruf ausführen. Die öffentliche Akte umfasst daher Fehleridentifikation, Reparatur des Ausstellungspfads und Bereinigung des Zertifikatslebenszyklus [1].

Warum CAA ein DNS-Kontrollpunkt ist

RFC 8659 beschreibt CAA als DNS-Eintrag, mit dem ein Domaininhaber autorisierte Zertifizierungsstellen festlegt. Der Standard nennt CAA außerdem eine zusätzliche Kontrolle gegen unbeabsichtigte Fehlausstellung [2]. CAA ist damit eine Grenze zwischen dem veröffentlichten DNS-Zustand und der Ausstellungsentscheidung der CA.

Für Risiko und Verantwortung zählt die operative Autorisierungskette. Ein Domaininhaber veröffentlicht CAA, DNS-Infrastruktur liefert den für die CA sichtbaren Zustand, CA-Software interpretiert ihn, und Abonnentenautomatisierung erwartet Erneuerung in großem Maßstab. Wenn diese Schritte zu einem allgemeinen „Validierung bestanden“ zusammenfallen, wird die Beweisgrenze zu weich.

Verzeichnisgrenze

Der direkte Gegenstand bleibt Let's Encrypt und der in den offiziellen Quellen beschriebene ISRG-Dienst. entität:internet-society ist eine vorhandene veröffentlichte Produktionsentität und wurde bereits für frühere Let's-Encrypt-Zertifikatsvertrauensabdeckung genutzt. Das behauptet nicht, dass Internet Society die Boulder-Engineering-Entscheidung getroffen hat. Falls ein Owner Gate eine direkte ISRG-Entität verlangt, muss der Kandidat vor Veröffentlichung exakt stoppen.

Welche Beweise nötig sind

Ein belastbarer Abschluss sollte zeigen, welche Namen eine neue CAA-Prüfung brauchten, welche DNS-Antworten verwendet wurden, welcher Softwarepfad entschied, welche Zertifikate betroffen waren, wie Abonnenten benachrichtigt wurden und wie Wiederholung verhindert wurde. Ohne diese Nachweise bleibt die Reparatur eine private Aussage in einer öffentlichen Vertrauenskette.

Quellen

  1. https://community.letsencrypt.org/t/2020-02-29-caa-rechecking-bug/114591
  2. https://www.rfc-editor.org/rfc/rfc8659
  3. https://letsencrypt.org/about/