Hello list,

sorry if this was discussed, I'm new to list and can't find related discussion in archives.

While performing internal tests, I have found some problems I believe are flaws current DMARC specification has due to use of DKIM authentication without adoption/additional requirements. There are well-known DKIM problems need to be solved to use it for message authentication. These problems affect mostly mailbox providers, because they require attacker/spammer to be able to obtain at least one valid DKIM signature on manipulated content. But in some situation they can be used against ESPs, if ESP applies his own DKIM signature to user-provided message.

1. DKIM (and DMARC) doesn't define minimal set of headers. It makes it possible to bypass mailbox provider's spam filters, tamper content of the signed message (demonstration below) and reuse one signed message for e.g. multiple spam messages with very different content/signatures or to use it for phishing. 2. DKIM (and DMARC) doesn't define behavior for the case there are both signed and unsigned fields of the same type (e.g. there are 3 To: headers and only 2 To: signed fields in DKIM h= field). It only defines a sign order (2 last fields are signed). This fact can also be used to tamper message content. 3. DMARC adds requirement for DKIM domain to match RFC5322.From:, but there is still no recommendations for public mailbox providers to prevent From: field from spoofing by authenticated user, that is there is no requirement to match RFC5322.From: to authenticated user's account or domain. I understand it's not DMARC's aim to authenticate a user, but this simple recommendation may increase spoofing protection for e-mail in general, because there is no currently any standard to prevent From: from spoofing by authenticated message sender. Explanations below. 4. DMARC does not define behavior for the case of malformed fields, including RFC5322.From: field (DKIM has no any requirements). Content of malformed field can be displayed to user by MUA or web interface in unpredictable way, potentially making DMARC phishing protection useless.

All problems are confirmed with largest mailbox providers to allow complete or partial DMARC bypass.

Messages for demonstration can be taken from

https://cloud.mail.ru/public/13de862b2b4c/dmarc.zip

Test 1, content spoofing:

Two messages look absolutely different:

http://clip.corp.mail.ru/clip/m0/1404210618-clip-33kb-BciPzLGSxbsl.png

both have valid DKIM signature. The problem is, this signature is same for both messages. See headers of

dmarc1.eml:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1404209937;
    bh=PUlzbqVQe585GKmhDo4TN8yKVGUku3ag7etaEnNByKk=; h=From;
b=b8AnXVrDg1kfNLEt5wVH9sAoB3p6F2b3TKTv5keSKg7r2x+QHRlzX2y5TxeWmG2Ft
 ABYbHkH7HalBDmCLYfcg9f2TI7iICL2dTlltJ6FN3qfdXf/u6/vPfwBrpjU5Vh2qYt
     xS/JUnlg/OOWztoFsLULK4vIv9G+6+QOukNN9CKQ=
From: Spoofed Sender <secur...@yandex.ru>
To: us...@example.com
Subject: Sample 1
MIME-Version: 1.0
Content-Type: multipart/alternative;
    boundary="--ALT--1"

dmarc2.eml:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1404209937;
    bh=PUlzbqVQe585GKmhDo4TN8yKVGUku3ag7etaEnNByKk=; h=From;
b=b8AnXVrDg1kfNLEt5wVH9sAoB3p6F2b3TKTv5keSKg7r2x+QHRlzX2y5TxeWmG2Ft
 ABYbHkH7HalBDmCLYfcg9f2TI7iICL2dTlltJ6FN3qfdXf/u6/vPfwBrpjU5Vh2qYt
     xS/JUnlg/OOWztoFsLULK4vIv9G+6+QOukNN9CKQ=
From: Spoofed Sender <secur...@yandex.ru>
To: us...@example.com
Subject: Sample 2
MIME-Version: 1.0
Content-Type: multipart/alternative;
    boundary="--ALT--2"


body content for both messages is same, but it's manipulated via boundary in top-level Content-Type:

----ALT--1
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

CjxIVE1MPjxCT0RZPjxicj5TUEFNIFNJR05BVFVSRSAxIElTIElULCBMVUtFPGJyPjxicj48YnI+
PC9CT0RZPjwvSFRNTD4K
----ALT--1--

----ALT--2
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

CjxIVE1MPjxCT0RZPjxicj50aGlzIGlzIFNQQU0gU0FNUExFIDI8YnI+PGJyPjxicj48L0JPRFk+
PC9IVE1MPgo=
----ALT--2--


Original authenticated message, which was sent via yandex.ru relay and was signed was dmarc.eml:

From: Spoofed Sender <secur...@yandex.ru>

----ALT--1
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

CjxIVE1MPjxCT0RZPjxicj5TUEFNIFNJR05BVFVSRSAxIElTIElULCBMVUtFPGJyPjxicj48YnI+
PC9CT0RZPjwvSFRNTD4K
----ALT--1--

----ALT--2
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

CjxIVE1MPjxCT0RZPjxicj50aGlzIGlzIFNQQU0gU0FNUExFIDI8YnI+PGJyPjxicj48L0JPRFk+
PC9IVE1MPgo=
----ALT--2--

it contains no headers except From:.

DKIM doesn't require even From: header to be signed. It leaves a possibility to have a "universal" DKIM signature to be valid for any message headers.

The problems here is, spammers can use very limited number of mailboxes from well-known mailbox provider to create DKIM-signed spam messages with very different signatures - different subjects, recipients and (partially) content, misusing DMARC-protected domain's reputation.

Mailbox provider will not detect SPAM/virus signatures before signing the message in this case due to content-type manipulation (content is base64-encoded but in case of original messages signer sees it as a non-encoded plaintext).

I have tested DKIM implementations of 2 world-largest mailbox providers (GMail and Yahoo) and two largest Russian mailbox providers (Mail.Ru and Yandex). In all cases, Subject, Content-Type, Content-Disposition and To: are omitted from DKIM signature if not present in original message, so content of the signed message can be manipulated.

Test 2: sender spoofing:

A second test performed, was an attempt to get valid DKIM signature on spoofed RFC5322.From: field, 15-30-minutes long manual tests for each service. Problem like this allows to use DKIM signature of mailbox providers with any content and any sender (including spoofed From: fields), it makes it impossible for recipient to recognize and ban spam messages based on sender or domain reputation and makes DMARC protection nearly useless.

In case of GMail and Mail.Ru few possibilities for spoofing were found, that is From: can differ from authenticated user, examples of spoofed messages with valid DKIM are in google.eml, mailru.eml.

Yandex has no protection against spoofing at all, there is no check for RFC5322.From: in messages from authenticated sender. See yandex.eml.

I have failed to spoof From: after quick test run against Yahoo, but another potentially more significant DMARC-related content manipulation problem covered by this article was discovered.

Problems were reported to Google, Yandex and Yahoo and are fixed by Mail.Ru. In case of Google and Yahoo problems are accepted as security bugs. Details can be disclosed (if someone interested) after all bugs are fixed in accordance to their disclosure policy. In case of Mail.Ru problem was in the fact redirected message was signed with DKIM.

Based on test results, you can expect most DKIM/DMARC implementation may have this kind of bugs. But, because there is no standard to perform a check of RFC5322.From: to be authenticated user, accepting and fixing bugs like this is due to good will of mailbox provider.

What I'd like to propose/discuss:

1. Include recommendation to match RFC5322.From: against authenticated user for mailbox provider as RFC's "SHOULD".

2. Include recommendation to always add From:, To:, Cc:, Subject:, MIME-Version:, Content-Type:, Content-Disposition: (may be something else?) into h= of DKIM signature. DKIM allows absent headers to present in h=, in this case header can not be added without invalidating DKIM signature.

As an alternative, DMARC DNS record can be extended to include list of protected fields.

3. FAIL DMARC if there are unsigned headers of this type, e.g. there are 2 To: fields and only one is signed (DKIM allows to mix both signed and unsigned fields of the same name).

4. Fail DMARC check, if message doesn't pass RFC5322 compliance checks, e.g. has malformed From: or has non-ASCII or control characters in the protected headers.

WBR,
Vladimir Dubrovin
@Mail.Ru

_______________________________________________
dmarc-discuss mailing list
dmarc-discuss@dmarc.org
http://www.dmarc.org/mailman/listinfo/dmarc-discuss

NOTE: Participating in this list means you agree to the DMARC Note Well terms 
(http://www.dmarc.org/note_well.html)

Reply via email to