Package: enigmail
Version: 2:0.91-4
Severity: critical
Tags: security patch

If there is a key on your keyring, that has an empty UID (no name,
e-mail address, etc.), mail may be encrypted to that UID, although the
recipient was not choosen by the user. This may lead to  disclosure of
confidential data to others.

This is CAN-2005-3256.

Patch received from upstream is attached.

 - asac
--- /cygdrive/f/Enigmail/source/enigmail/src/ui/content/enigmailUserSelection.js	2005-06-01 17:08:40.578115200 +0200
+++ ./enigmailUserSelection.js	2005-09-08 07:18:44.896859200 +0200
@@ -154,6 +154,8 @@
      return r;
    }
 
+   var emptyUid = " -"; // replace with localizable string
+   
    window.arguments[RESULT].cancelled=true;
 
    var secretOnly = (window.arguments[INPUT].options.indexOf("private")>= 0);
@@ -249,6 +251,9 @@
          aUserList.push(userObj);
          break;
        case "uid":
+         if (listRow[USER_ID].length == 0) {
+            listRow[USER_ID] = emptyUid;
+         }
          if (typeof(userObj.userId) != "string") {
            userObj.userId=EnigConvertGpgToUnicode(listRow[USER_ID].replace(/\\e3A/g, ":"));
          }
@@ -337,7 +342,7 @@
             escapedMailAddr=mailAddr.replace(escapeRegExp, "\\$1");
             s1=new RegExp("[, ]?"+escapedMailAddr+"[, ]","i");
             s2=new RegExp("[, ]"+escapedMailAddr+"[, ]?","i");
-            if (invalidAddr.indexOf(" "+mailAddr+" ")<0) {
+            if ((mailAddr != emptyUid) && (invalidAddr.indexOf(" "+mailAddr+" ")<0)) {
               aValidUsers.push(mailAddr);
               aUserList[i].activeState =(toAddr.search(s1)>=0 || toAddr.search(s2)>=0) ? 1 : 0;
             }
@@ -368,7 +373,7 @@
                     escapedMailAddr=mailAddr.replace(escapeRegExp, "\\$1");
                     s1=new RegExp("[, ]?"+escapedMailAddr+"[, ]","i");
                     s2=new RegExp("[, ]"+escapedMailAddr+"[, ]?","i");
-                    if (toAddr.search(s1)>=0 || toAddr.search(s2)>=0) {
+                    if ((mailAddr != emptyUid) && (toAddr.search(s1)>=0 || toAddr.search(s2)>=0)) {
                       aUserList[i].activeState = 1;
                     }
                   }

Reply via email to