Susceptibility to S/MIME Message Takeover Attacks
Categories
(MailNews Core :: Security: S/MIME, defect)
Tracking
(thunderbird_esr6869+ fixed, thunderbird70 fixed, thunderbird71 fixed)
People
(Reporter: fstrenzke, Assigned: KaiE)
References
Details
(Keywords: csectype-spoof, reporter-external, sec-moderate, Whiteboard: [fixes an undetected scenario from efail][fixes handling of multiple layers])
Attachments
(10 files, 10 obsolete files)
148.24 KB,
application/pdf
|
Details | |
17.88 KB,
text/plain
|
Details | |
21.42 KB,
text/plain
|
Details | |
74.50 KB,
patch
|
KaiE
:
review-
|
Details | Diff | Splinter Review |
3.50 KB,
text/plain
|
Details | |
3.70 KB,
text/plain
|
Details | |
408.00 KB,
patch
|
Details | Diff | Splinter Review | |
48.12 KB,
patch
|
KaiE
:
review+
jorgk-bmo
:
approval-comm-beta+
|
Details | Diff | Splinter Review |
498.27 KB,
patch
|
jorgk-bmo
:
approval-comm-esr68+
|
Details | Diff | Splinter Review |
48.72 KB,
patch
|
jorgk-bmo
:
approval-comm-esr68+
|
Details | Diff | Splinter Review |
Reporter | ||
Updated•9 years ago
|
Updated•9 years ago
|
Comment 1•9 years ago
|
||
Comment 2•9 years ago
|
||
Comment 3•9 years ago
|
||
Comment 4•9 years ago
|
||
Comment 5•9 years ago
|
||
Assignee | ||
Comment 6•9 years ago
|
||
Updated•9 years ago
|
Reporter | ||
Comment 7•9 years ago
|
||
Reporter | ||
Comment 8•9 years ago
|
||
Reporter | ||
Comment 9•9 years ago
|
||
Reporter | ||
Comment 10•9 years ago
|
||
Reporter | ||
Comment 11•9 years ago
|
||
Updated•9 years ago
|
Updated•9 years ago
|
Updated•9 years ago
|
Comment 13•9 years ago
|
||
Reporter | ||
Comment 14•9 years ago
|
||
Comment 15•9 years ago
|
||
Comment 16•9 years ago
|
||
Reporter | ||
Comment 17•9 years ago
|
||
Comment 18•9 years ago
|
||
Comment 19•9 years ago
|
||
Assignee | ||
Comment 20•8 years ago
|
||
Comment 21•8 years ago
|
||
Comment 23•8 years ago
|
||
Reporter | ||
Comment 24•8 years ago
|
||
Updated•8 years ago
|
Comment 25•8 years ago
|
||
Comment 26•8 years ago
|
||
Comment 27•8 years ago
|
||
Comment hidden (off-topic) |
Comment hidden (off-topic) |
Updated•8 years ago
|
Comment 30•8 years ago
|
||
Comment 31•8 years ago
|
||
Comment 32•8 years ago
|
||
Comment 33•8 years ago
|
||
Reporter | ||
Comment 34•8 years ago
|
||
Comment 35•8 years ago
|
||
Comment 36•8 years ago
|
||
Assignee | ||
Comment 37•8 years ago
|
||
Assignee | ||
Comment 38•8 years ago
|
||
Comment 39•8 years ago
|
||
Assignee | ||
Comment 40•8 years ago
|
||
Comment 41•8 years ago
|
||
Assignee | ||
Comment 42•8 years ago
|
||
Comment 43•7 years ago
|
||
Comment 44•7 years ago
|
||
Updated•7 years ago
|
Comment 45•7 years ago
|
||
Comment 46•7 years ago
|
||
Comment 47•7 years ago
|
||
Comment 48•7 years ago
|
||
Comment 49•7 years ago
|
||
Comment 50•7 years ago
|
||
Comment 51•7 years ago
|
||
Comment 52•7 years ago
|
||
Comment 53•7 years ago
|
||
Comment 54•7 years ago
|
||
Comment 55•7 years ago
|
||
Comment 56•7 years ago
|
||
Reporter | ||
Comment 57•7 years ago
|
||
Comment 58•7 years ago
|
||
Updated•6 years ago
|
Reporter | ||
Comment 59•6 years ago
|
||
Comment 60•6 years ago
|
||
Updated•6 years ago
|
Comment 61•6 years ago
|
||
Kai, here's another building site ("Baustelle") left unfinished.
Assignee | ||
Comment 62•6 years ago
|
||
Let's try to summarize again what's remaining.
In my understanding, at the time this bug was reported, TB supported processing of "encrypt-then-sign" email (outer layer is a signature). If the outer signature was valid, Thunderbird would display a valid signature icon.
After efail, is has been claimed in this bug, that recent versions of TB no longer support messages that are "encrypt-then-sign" and never display signature status for those. Is my understanding of the claim correct?
We should verify the claim is correct. We now have some automated tests for S/MIME. We should add an appropriate test case, before we proceed with the discussion. I can work on that.
Comment 63•6 years ago
|
||
(In reply to Kai Engert (:kaie:) from comment #62)
After efail, is has been claimed in this bug, that recent versions of TB no longer support messages that are "encrypt-then-sign" and never display signature status for those. Is my understanding of the claim correct?
Apparently so, see comment #56, second paragraph.
It would be a pity to lose Joshua's clean-up work, see comment #43.
Assignee | ||
Comment 64•6 years ago
|
||
I produced two additional test messages.
Both use an inner encrypted message part.
The first test message uses S/MIME clear signing, multipart/signed, for the outer layer.
Opening that message displays a message with an "invalid signature status" icon.
The inner encrypted text isn't decrypted, the inner plaintext contents aren't shown.
I've toggled pref mailnews.p7m_subparts_external to false (default is true). With this change, the inner contents are decrypted. In addition, I get the encryption status icon.
I guess this confirms that the efail fix prevents the non-top-level message from being decrypted, in the multipart/signed scenario.
For the second test message, I used opaque signing. That is, we have only one MIME part, which is the base64 encoded CMS signature. Embedded inside the CMS signature is the encrypted CMS message.
This message is shown with an encryption icon, plus a valid signature status icon, and the inner message is decrypted and shown.
This means, we still process some encrypted-then-signed messages.
Assignee | ||
Comment 65•6 years ago
|
||
(In reply to Kai Engert (:kaie:) from comment #64)
For the second test message, I used opaque signing. That is, we have only one MIME part, which is the base64 encoded CMS signature.
Well, we have an additional MIME part nested insigned the opaque signature. That part is visible only after the decoding performed in mimecms.cpp
If our intention is to prevent nested encrypted messages, we must teach mimecms.cpp to peek at the content type it is decoding, and forbid it to process a contained encrypted message.
Assignee | ||
Comment 66•6 years ago
|
||
FYI, I have started to work on fixes. Including the tests, won't be a small amount of changes. I'll file a separate bug (tomorrow) to discuss the change (and CC all of you), so we can separate the general discussion from the suggested first round of fixes (I don't know if there will be more to come).
Assignee | ||
Comment 67•6 years ago
|
||
This patch creates new test cases for enveloped-then-signed messages.
It should be attached to, and reviewed in, a separate NSS bug. I'll postpone that, to avoid getting too much attention for now.
Assignee | ||
Comment 68•6 years ago
|
||
This patch was created by refreshing the NSS test suite data, with NSS that includes the previous patch. It includes the additional envelope-then-sign testcases.
Assignee | ||
Comment 69•6 years ago
|
||
Sigh. Somehow, previously, I had failed to notice that Joshua had attached a patch. Sorry. I have worked on an alternative patch.
Looking at Josh's patch now, my patch is less invasive. Given that Joshua's patch had triggered crashes, we don't know what side effects that rework might cause, and given that the S/MIME code has changed in 2018 during the EFAIL fixes, and given that we recently changed how the S/MIME code checks that a status update is related to the currently shown message (based on URIs), it might be useful to start with my patch, which is also just half the size.
Assignee | ||
Comment 70•6 years ago
|
||
Assignee | ||
Comment 71•6 years ago
|
||
Assignee | ||
Comment 72•6 years ago
|
||
Assignee | ||
Updated•6 years ago
|
Assignee | ||
Comment 73•6 years ago
|
||
The released versions of TB, already no longer display any S/MIME signature status for Falko's attached sample messages.
However, there's at least one similar scenario, which is unfixed in released versions, and which is fixed by the latest patch.
I'll iterate through the scenarios, which are covered by the added tests.
As a reminder, "clear text signed" means the "multipart/signed" mechanism (actively used by Thunderbird when creating signatures),
while "opaque signed" means the "application/pkcs7-mime" type, which embeds the message and signature in a CMS blog, but without encryption (this kind of signature is used by Outlook, and supported by Thunderbird for decoding and display).
In all scenarios below that use two signatures, the first (inner signature) is by Alice.
(1) Inner Encrypted, then outer "opaque signed".
Released Thunderbird shows that as correctly signed and encrypted. Because the inner encrypted message could have originally been intended for a different recipient, we had already decided that we don't want to allow/display this kind of combination.
The message contents are shown.
The efail fixes have been incomplete to detect this scenario, which consists of two nested "application/pkcs7-mime" messages.
With the fix applied:
Message NOT shown, invalid signature.
(2) Inner Encrypted, then outer "clear-text signed".
Released TB shows that as "invalid signature".
Message contents are NOT shown, rather we get an attachment.
With the fix applied:
Same.
(3) Similar to 1, but with an additional outer signature layer. Inner Encrypted, then outer "opaque signed", then again opaque signed by Dave.
Released TB shows that encrypted, and with a bad signature from Alice. The additional signature isn't mentioned.
The message contents are shown.
With the fix applied:
Message NOT shown, invalid signature.
(4) Similar to 2, but with an additional outer signature layer. Inner Encrypted, then outer "clear-text signed", then again opaque signed by Dave.
Released TB shows that as having a bad signature from Alice. The additional signature isn't mentioned.
Message contents are NOT shown, rather we get an attachment.
With the fix applied:
Message NOT shown, no attachment, invalid signature.
(5) Two signatures, inner opaque signed, outer opaque signed by Dave.
Released TB shows that as a "mismatch signature" from Alice, because Dave is the sender. The additional signature isn't mentioned.
The message contents are shown.
With the fix applied:
Message NOT shown, no attachment, invalid signature.
(6) Two signatures, inner clear-text signed, outer opaque signed by Dave.
Released TB shows that as a "mismatch signature" from Alice, because Dave is the sender. The additional signature isn't mentioned.
The message contents are shown.
With the fix applied:
Message NOT shown, no attachment, invalid signature.
(7) Two signatures, inner opaque signed, outer clear-text signed by Dave.
Released TB shows that as a good signature from Dave.
The message contents are NOT shown, and we get an attachment.
With the fix applied:
Same
(8) Two signatures, inner clear-text signed, outer clear-text signed by Dave.
Released TB shows that as a mismatch signature from Alice, the second signature isn't mentioned.
Message contents are shown,.
With the fix applied:
Message NOT shown, no attachment, invalid signature.
Assignee | ||
Comment 74•6 years ago
|
||
To summarize the previous comment:
-
Scenario 1 should have been fixed by EFAIL, but wasn't.
-
If we detect that more than one signature is present, we'll never show the email contents.
-
If we detect that more than one signature is present, we'll usually show an invalid signature status. The exception is scenario 7, if the inner message looks like an encrypted message, which we don't decode, we don't detect that we have two signatures.
Because this fix doesn't require any new UI or new strings, we should consider to backport it to TB 68.x. (My only worry is that we don't have automated tests for the pasts EFAIL scenarios yet. I've filed a bug to get that done eventually.)
(In the future, we could consider to improve the UI. Instead of simply not showing a message, we could inform the user about the reason for not showing the message. I suggest to track that in a separate bug.)
Assignee | ||
Comment 75•6 years ago
|
||
Maybe we shouldn't allow scenario 7 either?
I'll attach an incremental patch, which treats scenario 7 the same as the other ones: shown with an invalid signature.
Assignee | ||
Comment 76•6 years ago
|
||
Assignee | ||
Comment 77•6 years ago
|
||
Please give me your opinions, if the behavior of the fixes described in comment 73 and comment 74 are good improvements.
Also, please tell me your opinion on comment 75.
Comment 78•6 years ago
|
||
Difficult stuff, especially on a Sunday late at night. That aside, how relevant to all this is the "half-Efail" fix of not decoding any child parts? Pref mailnews.p7m_subparts_external implemented in bug 1464056 (apparently causing crashes) and regressing bug 1524750. Can that pref be removed or flipped around at some stage?
So (1) and (2) are encrypted, then signed in two different ways and (3) and (4) are similar but with additional signatures. Maybe a silly question: since you have two signing mechanisms, there are four cases of adding two signatures, just like you have four cases in (5)-(8). IOW, (3) = (1) + op sig, (4) = 2 + op sig, what about (1) + cl sig and (2) + cl sig? Sorry, you have to educate us all.
So cases (5) to (8) have no encrypted part? They are just four permutation of clear/opaque. I'm surprised that the system handles those signature types so differently. What's the point of not showing the messages? It's definitely being tampered with? Wouldn't it be desirable to show invalid signatures for all four cases?
Assignee | ||
Comment 79•6 years ago
|
||
(In reply to Jorg K (GMT+2) from comment #78)
how relevant to all this is the "half-Efail" fix of not decoding any child parts? Pref mailnews.p7m_subparts_external implemented in bug 1464056 (apparently causing crashes) and regressing bug 1524750. Can that pref be removed or flipped around at some stage?
We don't want to flip the pref, that would re-introduce security issues. We want to remove the pref and keep the current default, I've filed bug 1576828 for that.
I've explained why bug 1524750 isn't a bug, but rather the intended behavior. I agree user feedback could be better, see bug 1576655.
You didn't say what crashes you're referring to. Are you talking about bug 1464056 comment 51 from me? If yes, then yes, the patch here will fix potential crashes, by avoiding the early return, and reaching the init code at the end of mime_find_class.
Assignee | ||
Comment 80•6 years ago
•
|
||
(In reply to Jorg K (GMT+2) from comment #78)
So (1) and (2) are encrypted, then signed in two different ways and (3) and (4) are similar but with additional signatures, just like you have four cases in (5)-(8).
Correct.
Maybe a silly question: since you have two signing mechanisms, there are four cases of adding two signatures,
I've added tests for all four combinations of the two signature mechanisms. See attachment 9087994 [details] [diff] [review] and search for "// sign, then sign again". That section has 16 tests (4 sig combinations * 4 hash algorithm variations).
That's scenarios 5, 6, 7, 8 from above.
It's correct, I didn't test all of those with the additional encrypt.
Test cases 1 and 2 should sufficiently test that we don't decrypt the inner encrypted part, if they are wrapped inside a signature of either of the two styles.
It's true that for completeness I could potentially add variations of the encrypt-sign-sign scenarios 3 and 4, which use the multipart sig for the outermost layer, but I didn't consider it necessary.
So cases (5) to (8) have no encrypted part? They are just four permutation of clear/opaque.
right.
I'm surprised that the system handles those signature types so differently.
That's because they work very differently!
For the signature type "multipart/signed", we have multiple mime parts. Outer multipart/signed, with inner "any encoding" plus second inner part "application/pkcs7-signature". MIME handler in mimemcms.cpp. That's because no other content shares that mime type.
The second signature type uses the same mime type as encryption, and it's just a single mime part.
Although they look slightly different:
Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data
Content-Description: S/MIME Encrypted Message
vs.
Content-Type: application/pkcs7-mime; name=smime.p7m; smime-type=signed-data
Content-Description: S/MIME Cryptographic Signature
we route both of them through the same MIME decoder type in "mimecms.cpp".
The smime-type might be lying. We can't be certain what's inside, until we are decoding that CMS message blob. Because it could potentially be encrypted content (which we want to prevent from being exposed accidentally), we don't look inside it, we already prevent processing it.
What's the point of not showing the messages?
Arguments:
-
We want to fix scenario 1. That means, whenever we see an outer layer that is opaque signed, we don't want to decode the inner parts that could be either signed (inner opaque) or encrypted. Consequently, we'd no longer show the contents for scenario 5 (which is only signatures, no encryption), and also no longer show contents for scenario 3.
-
If we fix scenario 1, the only scenarios with a double-signature that could potentially still show contents are 6 and 8. However, for consistency reasons, I'd prefer to NOT show contents for anything that has a double signature.
It's definitely being tampered with?
Unknown.
Wouldn't it be desirable to show invalid signatures for all four cases?
Yes, that's why I'm suggesting. That's why for consistency reasons, I've also worked on the additional incremental fix for scenario 7.
(If we agree we want that, I'll merge the incremental patch, so we only have one patch for code review.)
While looking around, I decided that I should also review function MIMEGetRelativeCryptoNestLevel if it's still a good implementation.
Comment 81•6 years ago
|
||
(In reply to Kai Engert (:kaie:) from comment #79)
You didn't say what crashes you're referring to. Are you talking about bug 1464056 comment 51 from me?
Yes. I'll look at comment #80 later.
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Comment 82•5 years ago
|
||
Justification for the implementation approach I'm using:
Because of the flow of the streaming processing of MIME data, we face the following dilemma:
The outer signature is processed first, and triggers a call to the signedStatus callback.
If the signature is valid, we get a good status in the user interface.
It is difficult to prevent sending the positive signature status, because I don't know of a way to peek inside the inner contents.
It seems easier to allow the inner contents to override the earlier signature status.
Consequently, we'll get multiple notifications. That's why the code is enhanced to never allow overriding of a bad status with a good status. Regardless which status came first, the bad status for a message will always prevail.
That's also why we the "extra" variable for the individual tests, the tests must wait until we get the expected amount of notifications.
Assignee | ||
Comment 83•5 years ago
|
||
Assignee | ||
Comment 84•5 years ago
|
||
merging v2 and incremental fix into new v3
Assignee | ||
Comment 85•5 years ago
|
||
merged to trunk (comm-central), merging on top of bug 1571481.
Assignee | ||
Updated•5 years ago
|
Assignee | ||
Comment 86•5 years ago
|
||
Comment 87•5 years ago
|
||
Assignee | ||
Comment 88•5 years ago
|
||
I've addressed all your comments. I've removed the match_content code, that was leftover from an earlier revision.
Comment 89•5 years ago
|
||
Assignee | ||
Comment 90•5 years ago
|
||
fixed the comments
Assignee | ||
Comment 91•5 years ago
|
||
Same patch as before, just merged to trunk, necessary because of context changes (new prettier).
Assignee | ||
Comment 92•5 years ago
|
||
test data for ESR 68 branch
Assignee | ||
Comment 93•5 years ago
|
||
Patch backported to ESR 68 branch.
Excludes new prettier changes.
Includes the small change from bug 1532573 which fixes the @bogus.com email addresses in the test script to @example.com to be compatible with the latest test data.
Assignee | ||
Comment 94•5 years ago
|
||
formatting changes on tb 68 branch require this updated backport patch
Comment 95•5 years ago
|
||
Checkin-needed? Or you can land after the next M-C merge, perhaps in about 20 minutes from now.
Comment 96•5 years ago
|
||
BTW, I'm doing TB 70 beta 2 today or tomorrow. You want to ship it there?
Comment 97•5 years ago
|
||
Comment 98•5 years ago
|
||
Try looks good so far:
https://treeherder.mozilla.org/#/jobs?repo=try-comm-central&revision=514cb59d06af6043f6ced7b7ef726a79c977a2ed
Assignee | ||
Comment 99•5 years ago
|
||
(In reply to Jorg K (GMT+2) (reduced availability 14-19 of Sept.) from comment #97)
Why is the ESR 68 patch different? c-esr68 should be reformatted now, to the
trunk patch should (almost) apply.
That was explained in comment 93.
Resulting test data is the same, it's just that 68 has an older snapshot, and therefore the patch looks different.
Comment 100•5 years ago
|
||
https://hg.mozilla.org/comm-central/rev/e17cea8e7c348566ed1c250396c796a9d18d4a00
https://hg.mozilla.org/comm-central/rev/5f3a5f96cc9b1b4f52f652e46fd433c4c08717ec
I took the test data from the try run since it was different from attachment 9087996 [details] [diff] [review].
I forgot to run linting and clang-format, I hope you have, or else, I'll land a follow-up in a minute.
Comment 101•5 years ago
|
||
https://hg.mozilla.org/comm-central/rev/6542dc3163386308ccb3bd4db7e914d2eb402844 - reformat C++ code.
Comment 102•5 years ago
|
||
TB 70 beta 2:
https://hg.mozilla.org/releases/comm-beta/rev/07b204800f62b72a0543808c980172bae81b2ef0
https://hg.mozilla.org/releases/comm-beta/rev/d38017afcf62c5833a3c01793a8fed474270edc4
https://hg.mozilla.org/releases/comm-beta/rev/4d287273469c94afe9e33a2f7c8414bbc4c6254e
Comment 103•5 years ago
|
||
Assignee | ||
Comment 104•5 years ago
|
||
I'd prefer to let it bake on Beta for 1-2 weeks, prior to make a decision about shipping in 68.x stable.
Comment 105•5 years ago
|
||
My experience shows that beta users don't use any "sophisticated" or uncommon features. Hence my suggestion was to spin it one week on 70 beta 2 and if good, put it on TB 68.1.1 which is not widely distributed so far. Then have it spin there for 1-2 weeks before we ship 68.2 to 25 million users.
Assignee | ||
Comment 106•5 years ago
|
||
Why does 68.1.1 have fewer users than 68.2 ? Because we haven't yet automatically upgraded users from 60.x to 68.x ?
Comment 107•5 years ago
|
||
Yes.
Assignee | ||
Comment 108•5 years ago
|
||
Ok. Nevertheless, it would be unfortunate if the first 68.x version that 60.x users upgrade to has broken S/MIME support.
But if we cannot realistically expect that anyone uses Beta builds to test S/MIME with real world scenarios, then all we can do is rely on our tests.
Comment 109•5 years ago
•
|
||
So does that mean we go for 68.1.1 or 68.2? Surely you've viewed some valid S/MIME messages and they're still displayed OK, right? Plus we have some tests that cover the most common scenarios.
I discussed this with Magnus and he and I are cool to ship this in 68.1.1. Could you do an ESR68 try run with your patches. Please backout
https://hg.mozilla.org/releases/comm--esr68/rev/af3c68874f9b040b1751db49e8e041e7330c4651 (EDIT: destroyed link)
as part of the try since it caused Mochitest (bct) failures.
Updated•5 years ago
|
Assignee | ||
Comment 110•5 years ago
|
||
(In reply to Jorg K (GMT+2) from comment #109)
Could you do an ESR68 try run with your patches.
Assignee | ||
Comment 111•5 years ago
|
||
Once ready, I'll run the 68.x try build as my primary client for testing.
Comment 112•5 years ago
|
||
Good move, that's what I've been doing all along with the 68.x series, starting at its beta release :-)
Comment 113•5 years ago
|
||
(In reply to Jorg K (GMT+2) from comment #105)
spin it one week on 70 beta 2 and if good, put it on TB 68.1.1 which is not widely distributed so far. Then have it spin there for 1-2 weeks before we ship 68.2 to 25 million users.
Sounds reasonable. But it remains to be seen whether it would be 68.1.2, 68.2.0 (in 4-5 weeks) or a 68.2.1 where we fully unthrottle updates.
Updated•5 years ago
|
Assignee | ||
Comment 114•5 years ago
|
||
I haven't seen issues in the limited amount of test message that I could find. If you're ok with the risk, I'm ok to ship with 68.1.1
Assignee | ||
Comment 115•5 years ago
|
||
Comment on attachment 9093925 [details] [diff] [review]
1240290-esr68-backport-v2.patch
ESR Uplift Approval Request
- If this is not a sec:{high,crit} bug, please state case for ESR consideration: long standing spoofing issue, and waiting one year for a fix is too long
- User impact if declined: continous exposure to spoofing scenarios
- Fix Landed on Version: 71
- Risk to taking this patch: Medium
- Why is the change risky/not risky? (and alternatives if risky): It's uncertain if we have sufficiently tested all S/MIME message scenarios, there's a risk for a regression in treating S/MIME messages correctly.
- String or UUID changes made by this patch: none
Assignee | ||
Updated•5 years ago
|
Comment 116•5 years ago
|
||
Comment 117•5 years ago
|
||
Comment 118•5 years ago
|
||
TB 68.1.1 ESR:
https://hg.mozilla.org/releases/comm-esr68/rev/137371bf8d261c76b13f409303f1a4e586250e99
https://hg.mozilla.org/releases/comm-esr68/rev/75cae72a8bb7499fefb512189202fa12af485dbe
https://hg.mozilla.org/releases/comm-esr68/rev/41c0a3653f95cf6158a2b49ab7cb19327c50e9e8
Updated•5 years ago
|
Assignee | ||
Comment 119•5 years ago
|
||
Assignee | ||
Updated•5 years ago
|
Updated•5 years ago
|
Updated•9 months ago
|
Description
•