Hi,

I noticed that virus notifications sent by clamav-milter only contain the recipient's username, and not the full email address. This is rather unfortunate, since this makes it hard to figure out which email address has been compromised, if you have multiple aliases / virtusernames.

I had a look at the code, and noticed:
static sfsistat
clamfi_envrcpt(SMFICTX *ctx, char **argv)
{
(...)
to = smfi_getsymval(ctx, "{rcpt_addr}");
if(to == NULL)
to = argv[0];
(...)
}

While argv[0] is guaranteed to contain the full recipient email address (e.g. "<[EMAIL PROTECTED]>"), it appears that the {rcpt_addr} macro only contains the bare username (e.g. "myusername"). (This is after applying the virtusertable, but before applying aliases.)

My guess is that {rcpt_addr} is used instead of argv[0] because of whitelist checking. But privdata->to is used in various other places, such as generating the virus notification, the Cc: header of the virus notification, and the X-Original-To: header of a phishing report or quarantine, among others. And this results in headers with incorrect email addresses, so this is arguably a bug.

Wouldn't it be better to always store the full email address (argv[0]) in privdata->to, and store the username, if it is needed, in a separate field, such as privdata->user? That way, only those places (whitelist?) that need the bare username can be changed to use it, and other places will use the correct recipient email address.

Best regards,

– Michael
_______________________________________________
http://lurker.clamav.net/list/clamav-devel.html
Please submit your patches to our Bugzilla: http://bugs.clamav.net

Reply via email to