svn path=/branches/BRANCH_6-3/; revision=5389
fetchmail 6.3.11 (released XXXX-XX-XX - i. e. not yet):
fetchmail 6.3.11 (released XXXX-XX-XX - i. e. not yet):
+# SECURITY BUGFIXES
+* Fetchmail checks the Subject CommonName and Subject AltName X.509 certificate
+ fields for embedded NUL characters and aborts certificate verification to
+ counter recent SSL certificate verification attacks. Untested.
+
# BUGFIXES
* Remove the spurious message "message delimiter found while scanning headers".
RFC-5322 syntax states that the delimiter is part of the body, and the body is
# BUGFIXES
* Remove the spurious message "message delimiter found while scanning headers".
RFC-5322 syntax states that the delimiter is part of the body, and the body is
msgstr ""
"Project-Id-Version: fetchmail 6.3.10-beta1\n"
"Report-Msgid-Bugs-To: fetchmail-devel@lists.berlios.de\n"
msgstr ""
"Project-Id-Version: fetchmail 6.3.10-beta1\n"
"Report-Msgid-Bugs-To: fetchmail-devel@lists.berlios.de\n"
-"POT-Creation-Date: 2009-07-02 21:34+0200\n"
+"POT-Creation-Date: 2009-08-04 11:24+0200\n"
"PO-Revision-Date: 2009-05-26 00:53+0200\n"
"Last-Translator: Matthias Andree <matthias.andree@gmx.de>\n"
"Language-Team: Deutsch <de@li.org>\n"
"PO-Revision-Date: 2009-05-26 00:53+0200\n"
"Last-Translator: Matthias Andree <matthias.andree@gmx.de>\n"
"Language-Team: Deutsch <de@li.org>\n"
msgid "Bad certificate: Subject CommonName too long!\n"
msgstr "Ungültiges Zertifikat: Server-CommonName zu lang!\n"
msgid "Bad certificate: Subject CommonName too long!\n"
msgstr "Ungültiges Zertifikat: Server-CommonName zu lang!\n"
+#: socket.c:638
+msgid "Bad certificate: Subject CommonName contains NUL, aborting!\n"
+msgstr "Ungültiges Zertifikat: Subject-CommonName enthält NUL, breche ab!\n"
+
+#: socket.c:661
+msgid "Bad certificate: Subject Alternative Name contains NUL, aborting!\n"
+msgstr ""
+"Ungültiges Zertifikat: Subject-Alternative-Name enthält NUL, breche ab!\n"
+
+#: socket.c:666
+#, c-format
+msgid "Subject Alternative Name: %s\n"
+msgstr "\"Subject Alternative Name\": %s\n"
+
+#: socket.c:691
#, c-format
msgid "Server CommonName mismatch: %s != %s\n"
msgstr "Server-CommonName stimmt nicht überein: %s != %s\n"
#, c-format
msgid "Server CommonName mismatch: %s != %s\n"
msgstr "Server-CommonName stimmt nicht überein: %s != %s\n"
msgid "Server name not set, could not verify certificate!\n"
msgstr "Server-Name nicht gesetzt, konnte Zertifikat nicht verifizieren!\n"
msgid "Server name not set, could not verify certificate!\n"
msgstr "Server-Name nicht gesetzt, konnte Zertifikat nicht verifizieren!\n"
msgid "Unknown Server CommonName\n"
msgstr "Unbekannter Server-CommonName\n"
msgid "Unknown Server CommonName\n"
msgstr "Unbekannter Server-CommonName\n"
msgid "Server name not specified in certificate!\n"
msgstr "Server-Name nicht in Zertifikat spezifiziert!\n"
msgid "Server name not specified in certificate!\n"
msgstr "Server-Name nicht in Zertifikat spezifiziert!\n"
msgid "EVP_md5() failed!\n"
msgstr "EVP_md5() fehlgeschlagen!\n"
msgid "EVP_md5() failed!\n"
msgstr "EVP_md5() fehlgeschlagen!\n"
msgid "Out of memory!\n"
msgstr "Kein Speicher mehr frei!\n"
msgid "Out of memory!\n"
msgstr "Kein Speicher mehr frei!\n"
msgid "Digest text buffer too small!\n"
msgstr "Textpuffer für Digest zu klein!\n"
msgid "Digest text buffer too small!\n"
msgstr "Textpuffer für Digest zu klein!\n"
#, c-format
msgid "%s key fingerprint: %s\n"
msgstr "%s-Schlüssel-Fingerabdruck: %s\n"
#, c-format
msgid "%s key fingerprint: %s\n"
msgstr "%s-Schlüssel-Fingerabdruck: %s\n"
#, c-format
msgid "%s fingerprints match.\n"
msgstr "%s-Fingerabdrücke stimmen überein.\n"
#, c-format
msgid "%s fingerprints match.\n"
msgstr "%s-Fingerabdrücke stimmen überein.\n"
#, c-format
msgid "%s fingerprints do not match!\n"
msgstr "%s-Fingerabdrücke stimmen nicht überein!\n"
#, c-format
msgid "%s fingerprints do not match!\n"
msgstr "%s-Fingerabdrücke stimmen nicht überein!\n"
#, c-format
msgid "Server certificate verification error: %s\n"
msgstr "Fehler bei Server-Zertifikat-Überprüfung: %s\n"
#, c-format
msgid "Server certificate verification error: %s\n"
msgstr "Fehler bei Server-Zertifikat-Überprüfung: %s\n"
#, c-format
msgid "unknown issuer (first %d characters): %s\n"
msgstr "unbekannter Herausgeber (erste %d Zeichen): %s\n"
#, c-format
msgid "unknown issuer (first %d characters): %s\n"
msgstr "unbekannter Herausgeber (erste %d Zeichen): %s\n"
msgid "File descriptor out of range for SSL"
msgstr "Datei-Deskriptor außerhalb des Bereichs für SSL"
msgid "File descriptor out of range for SSL"
msgstr "Datei-Deskriptor außerhalb des Bereichs für SSL"
#, c-format
msgid "Invalid SSL protocol '%s' specified, using default (SSLv23).\n"
msgstr ""
"Ungültiges SSL-Protokoll „%s“ angegeben, benutze Voreinstellung (SSLv23).\n"
#, c-format
msgid "Invalid SSL protocol '%s' specified, using default (SSLv23).\n"
msgstr ""
"Ungültiges SSL-Protokoll „%s“ angegeben, benutze Voreinstellung (SSLv23).\n"
msgid "Certificate/fingerprint verification was somehow skipped!\n"
msgstr "Zertifikat-/Fingerabdruck-Überprüfung wurde irgendwie übersprungen!\n"
msgid "Certificate/fingerprint verification was somehow skipped!\n"
msgstr "Zertifikat-/Fingerabdruck-Überprüfung wurde irgendwie übersprungen!\n"
msgid "Cygwin socket read retry\n"
msgstr "Cygwin-Socket-Lese-Wiederholung\n"
msgid "Cygwin socket read retry\n"
msgstr "Cygwin-Socket-Lese-Wiederholung\n"
msgid "Cygwin socket read retry failed!\n"
msgstr "Cygwin-Socket-Lese-Wiederholung fehlgeschlagen!\n"
msgid "Cygwin socket read retry failed!\n"
msgstr "Cygwin-Socket-Lese-Wiederholung fehlgeschlagen!\n"
msgid "found Received address `%s'\n"
msgstr "„Received“-Adresse „%s“ gefunden\n"
msgid "found Received address `%s'\n"
msgstr "„Received“-Adresse „%s“ gefunden\n"
-#: transact.c:566
-msgid "message delimiter found while scanning headers\n"
-msgstr "Nachrichtentrenner gefunden beim Scannen der Kopfzeilen\n"
-
-#: transact.c:597
msgid "incorrect header line found while scanning headers\n"
msgstr "inkorrekte Kopfzeile gefunden beim Scannen der Kopfzeilen\n"
msgid "incorrect header line found while scanning headers\n"
msgstr "inkorrekte Kopfzeile gefunden beim Scannen der Kopfzeilen\n"
#, c-format
msgid "line: %s"
msgstr "Zeile: %s"
#, c-format
msgid "line: %s"
msgstr "Zeile: %s"
#, c-format
msgid "no local matches, forwarding to %s\n"
msgstr "keine lokalen Übereinstimmungen, Weiterleitung an %s\n"
#, c-format
msgid "no local matches, forwarding to %s\n"
msgstr "keine lokalen Übereinstimmungen, Weiterleitung an %s\n"
msgid "forwarding and deletion suppressed due to DNS errors\n"
msgstr "Weiterleiten und Löschen wegen DNS-Fehlern unterdrückt\n"
msgid "forwarding and deletion suppressed due to DNS errors\n"
msgstr "Weiterleiten und Löschen wegen DNS-Fehlern unterdrückt\n"
msgid "writing RFC822 msgblk.headers\n"
msgstr "schreibe RFC822 msgblk.headers\n"
msgid "writing RFC822 msgblk.headers\n"
msgstr "schreibe RFC822 msgblk.headers\n"
msgid "no recipient addresses matched declared local names"
msgstr "keine Empfängeradresse stimmt mit deklarierten lokalen Namen überein"
msgid "no recipient addresses matched declared local names"
msgstr "keine Empfängeradresse stimmt mit deklarierten lokalen Namen überein"
#, c-format
msgid "recipient address %s didn't match any local name"
msgstr "Empfängeradresse %s stimmt mit keinem lokalen Namen überein"
#, c-format
msgid "recipient address %s didn't match any local name"
msgstr "Empfängeradresse %s stimmt mit keinem lokalen Namen überein"
msgid "message has embedded NULs"
msgstr "Nachricht hat eingebettete NUL-Zeichen"
msgid "message has embedded NULs"
msgstr "Nachricht hat eingebettete NUL-Zeichen"
msgid "SMTP listener rejected local recipient addresses: "
msgstr "SMTP-Server lehnte Adressen mit lokalem Empfänger ab: "
msgid "SMTP listener rejected local recipient addresses: "
msgstr "SMTP-Server lehnte Adressen mit lokalem Empfänger ab: "
msgid "error writing message text\n"
msgstr "Fehler beim Schreiben des Nachrichtentextes\n"
msgid "error writing message text\n"
msgstr "Fehler beim Schreiben des Nachrichtentextes\n"
#: xmalloc.c:47
msgid "realloc failed\n"
msgstr "realloc fehlgeschlagen\n"
#: xmalloc.c:47
msgid "realloc failed\n"
msgstr "realloc fehlgeschlagen\n"
+
+#~ msgid "message delimiter found while scanning headers\n"
+#~ msgstr "Nachrichtentrenner gefunden beim Scannen der Kopfzeilen\n"
if (depth == 0 && !_depth0ck) {
_depth0ck = 1;
if (depth == 0 && !_depth0ck) {
_depth0ck = 1;
if (outlevel >= O_VERBOSE) {
if ((i = X509_NAME_get_text_by_NID(issuer, NID_organizationName, buf, sizeof(buf))) != -1) {
report(stdout, GT_("Issuer Organization: %s\n"), buf);
if (outlevel >= O_VERBOSE) {
if ((i = X509_NAME_get_text_by_NID(issuer, NID_organizationName, buf, sizeof(buf))) != -1) {
report(stdout, GT_("Issuer Organization: %s\n"), buf);
report(stderr, GT_("Bad certificate: Subject CommonName too long!\n"));
return (0);
}
report(stderr, GT_("Bad certificate: Subject CommonName too long!\n"));
return (0);
}
+ if ((size_t)i > strlen(buf)) {
+ /* Name contains embedded NUL characters, so we complain. This is likely
+ * a certificate spoofing attack. */
+ report(stderr, GT_("Bad certificate: Subject CommonName contains NUL, aborting!\n"));
+ return 0;
+ }
if (_ssl_server_cname != NULL) {
char *p1 = buf;
char *p2 = _ssl_server_cname;
if (_ssl_server_cname != NULL) {
char *p1 = buf;
char *p2 = _ssl_server_cname;
* first find a match among alternative names */
gens = (STACK_OF(GENERAL_NAME) *)X509_get_ext_d2i(x509_cert, NID_subject_alt_name, NULL, NULL);
if (gens) {
* first find a match among alternative names */
gens = (STACK_OF(GENERAL_NAME) *)X509_get_ext_d2i(x509_cert, NID_subject_alt_name, NULL, NULL);
if (gens) {
- int i, r;
- for (i = 0, r = sk_GENERAL_NAME_num(gens); i < r; ++i) {
- const GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, i);
+ int j, r;
+ for (j = 0, r = sk_GENERAL_NAME_num(gens); j < r; ++j) {
+ const GENERAL_NAME *gn = sk_GENERAL_NAME_value(gens, j);
if (gn->type == GEN_DNS) {
char *p1 = (char *)gn->d.ia5->data;
char *p2 = _ssl_server_cname;
if (gn->type == GEN_DNS) {
char *p1 = (char *)gn->d.ia5->data;
char *p2 = _ssl_server_cname;
+ /* Name contains embedded NUL characters, so we complain. This
+ * is likely a certificate spoofing attack. */
+ if ((size_t)gn->d.ia5->length != strlen(p1)) {
+ report(stderr, GT_("Bad certificate: Subject Alternative Name contains NUL, aborting!\n"));
+ sk_GENERAL_NAME_free(gens);
+ return 0;
+ }
if (outlevel >= O_VERBOSE)
if (outlevel >= O_VERBOSE)
- report(stderr, "Subject Alternative Name: %s\n", p1);
+ report(stdout, GT_("Subject Alternative Name: %s\n"), p1);
if (*p1 == '*') {
++p1;
n = strlen(p2) - strlen(p1);
if (*p1 == '*') {
++p1;
n = strlen(p2) - strlen(p1);
n = strlen(p2) - strlen(p1);
if (n >= 0)
p2 += n;
n = strlen(p2) - strlen(p1);
if (n >= 0)
p2 += n;
if (0 == strcasecmp(p1, p2)) {
if (0 == strcasecmp(p1, p2)) {
}
if (!matched) {
report(stderr,
}
if (!matched) {
report(stderr,