C2PA's eMudhra Moment
By David Buchanan (aka retr0id), 29th October 2026
The eMudhra incident has shown how the modern Web PKI ecosystem reacts to a CA compromise. All things considered, I think it went smoothly—all the web browsers I use picked up the revocations swiftly. But it has also been a clusterfuck, with eMudhra trying to downplay their responsibilities and refusing to elaborate on how exactly the failure occurred. There's also a long tail of TLS clients that don't have a great way to handle revocations, or are otherwise not getting their trust stores updated in a timely manner.
The C2PA ecosystem tries to solve a very similar problem to Web PKI, but it is comparatively in its infancy. The media verification tools you'll find in top-spot search results today don't support revocation at all.
So how would the C2PA ecosystem react to a similar compromise? Let's find out!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | openssl cms -verify -inform PEM \ -CAfile <( curl -fsSL "https://pki.goog/c2pa/root-g3.crt" | openssl x509 -inform DER ) \ << EOF -----BEGIN CMS----- MIILJwYJKoZIhvcNAQcCoIILGDCCCxQCAQExDTALBglghkgBZQMEAgEwgf4GCSqG SIb3DQEHAaCB8ASB7XRoZSBsZWFmIGNlcnQncyBwcml2YXRlIGtleSBpcyA0Lg0K DQppLmUuDQoNCi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQ0KTUVFQ0FRQXdF d1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNFSnpBbEFnRUJCQ0FBQUFBQUFBQUFB QUFBQUFBQQ0KQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkE9PQ0KLS0tLS1FTkQg UFJJVkFURSBLRVktLS0tLQ0KDQpJJ20gc3VyZSB0aGlzIGlzIGZpbmUuDQoNCn5y ZXRyMGlkDQoNCqCCCEAwggIuMIIBs6ADAgECAhRRkrgBE4UqJdBnVQbsUbqo8ZzW DzAKBggqhkjOPQQDAzBDMQswCQYDVQQGEwJVUzETMBEGA1UECgwKR29vZ2xlIExM QzEfMB0GA1UEAwwWR29vZ2xlIEMyUEEgUm9vdCBDQSBHMzAgFw0yNTA1MDgyMjMy MjFaGA8yMDUwMDUwODIyMzIyMVowQzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkdv b2dsZSBMTEMxHzAdBgNVBAMMFkdvb2dsZSBDMlBBIFJvb3QgQ0EgRzMwdjAQBgcq hkjOPQIBBgUrgQQAIgNiAASG/1/+O4pw+l7cWbt4AhIy5LJL60HGfRpgcLzcn6oC wVZEQY32no8384Gii4/Ok4VHG+uVahaYAjenWVfI+DgTd6DtI0KGCilQimKEa7qq WE/ystd/enxuEjkVNDYxoXajZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQIwDgYDVR0P AQH/BAQDAgEGMB8GA1UdIwQYMBaAFJxc2IlTQ+da1YHbA94ZfwQqKi2qMB0GA1Ud DgQWBBScXNiJU0PnWtWB2wPeGX8EKiotqjAKBggqhkjOPQQDAwNpADBmAjEAjJUR 7lt1QySToG2ERbL1BIQxvvgE7Irz/ymAxfQ0/AuWjWKQs1jvyi/6TbW9msRlAjEA 1D3Wa4NeA+MAwCTMCUqLfZn1UEHfvKdO94pULuh9NbRkV8ghhilZRHX4LibbJGQ5 MIIC2zCCAmCgAwIBAgIUT8ox+CYy5uawPWuDq5i51htFNyIwCgYIKoZIzj0EAwMw QzELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkdvb2dsZSBMTEMxHzAdBgNVBAMMFkdv b2dsZSBDMlBBIFJvb3QgQ0EgRzMwHhcNMjUwNzMxMjEzNDQ5WhcNMzAwNzMxMjEz NDQ5WjBOMQswCQYDVQQGEwJVUzETMBEGA1UECgwKR29vZ2xlIExMQzEqMCgGA1UE AwwhR29vZ2xlIEMyUEEgTW9iaWxlIEEgMVAgSUNBIEczIEw0MHYwEAYHKoZIzj0C AQYFK4EEACIDYgAEdzciiVSAygXEOnYGN0w4CgRDWYMqsvolc2lpCyZnyDx5Q2po V0vuiK+ts9r+jhQtTsd1ZMU5Gyx5h5z/vuOwzJcytaIoxjXu9qnrT9zvHb/cnWAb w0yF6OQygtc8XHsfo4IBCDCCAQQwDgYDVR0PAQH/BAQDAgEGMB8GA1UdJQQYMBYG CCsGAQUFBwMEBgorBgEEAYPoXgIBMBIGA1UdEwEB/wQIMAYBAf8CAQAwFwYDVR0g BBAwDjAMBgorBgEEAYPoXgEBMGQGCCsGAQUFBwEBBFgwVjAsBggrBgEFBQcwAoYg aHR0cDovL3BraS5nb29nL2MycGEvcm9vdC1nMy5jcnQwJgYIKwYBBQUHMAGGGmh0 dHA6Ly9jMnBhLW9jc3AucGtpLmdvb2cvMB8GA1UdIwQYMBaAFJxc2IlTQ+da1YHb A94ZfwQqKi2qMB0GA1UdDgQWBBRTbbVy6CE+Y6GLWxV8Yf3X3xIxmzAKBggqhkjO PQQDAwNpADBmAjEA+inCNKzYg71/IAwvgTN9KCkYNuBcB1Xhk6gYujZdRzgPHw3o cmWxXH+QFnlYQrcMAjEA6nTiBHlgqcsQAAvFUE/iWvLjjNEfEiQU9kAmdbG77Naf w9UC5rMVEBH+xS2SqWnqMIIDKzCCArKgAwIBAgIUAM211uiU3M/jKFIlebqZ/jDj T40wCgYIKoZIzj0EAwMwTjELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkdvb2dsZSBM TEMxKjAoBgNVBAMMIUdvb2dsZSBDMlBBIE1vYmlsZSBBIDFQIElDQSBHMyBMNDAe Fw0yNjEwMjkxNzEyNDRaFw0yNjExMjgxNzEyNDNaMFoxCzAJBgNVBAYTAlVTMRMw EQYDVQQKEwpHb29nbGUgTExDMR4wHAYDVQQLExVHb29nbGUgUGhvdG9zIEFuZHJv aWQxFjAUBgNVBAMTDUdvb2dsZSBQaG90b3MwWTATBgcqhkjOPQIBBggqhkjOPQMB BwNCAATiU0o1MtCPu6At3mWe5ivQAx/i23hVlu9QkwJEawMIUuDxV1pMYzzHGd/u X9qGLXZO/JbD8w7gBVxCwj8YTtjGo4IBYDCCAVwwDgYDVR0PAQH/BAQDAgbAMB8G A1UdJQQYMBYGCCsGAQUFBwMEBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHQYD VR0OBBYEFIakFPWEVO/LdP6Mb2fIWtP+qgCmMB8GA1UdIwQYMBaAFFNttXLoIT5j oYtbFXxh/dffEjGbMHIGCCsGAQUFBwEBBGYwZDAmBggrBgEFBQcwAYYaaHR0cDov L2MycGEtb2NzcC5wa2kuZ29vZy8wOgYIKwYBBQUHMAKGLmh0dHA6Ly9wa2kuZ29v Zy9jMnBhL21vYmlsZS1hLTFwLWljYS1nMy1sNC5jcnQwFwYDVR0gBBAwDjAMBgor BgEEAYPoXgEBMBkGCSsGAQQBg+heAwQMBgorBgEEAYPoXgMKMDMGCSsGAQQBg+he BAQmDCQwMTk3YWU0ZC01Yzg1LTczOWYtOTFhZS03MGIwNTIzNDI1YTcwCgYIKoZI zj0EAwMDZwAwZAIwRY1wCEyg6Gb/4ASs4/iL0P0FHUzqIRi/R3m720dr422j4xjj GOFt2Jl8Pd26gABTAjA/UklPGjzCLOjPXyoAoYC8NyVTjLvMGuJPrRQyZp6sYhP5 kGD4v4pD2J4fTzBl5QExggG5MIIBtQIBATBmME4xCzAJBgNVBAYTAlVTMRMwEQYD VQQKDApHb29nbGUgTExDMSowKAYDVQQDDCFHb29nbGUgQzJQQSBNb2JpbGUgQSAx UCBJQ0EgRzMgTDQCFADNtdbolNzP4yhSJXm6mf4w40+NMAsGCWCGSAFlAwQCAaCB 5DAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0yNjEw MjkxODU4MDNaMC8GCSqGSIb3DQEJBDEiBCBr2PQzGjwSYJ7hpRMk65RGHQKfbvMd A3k0o31kdPrbcjB5BgkqhkiG9w0BCQ8xbDBqMAsGCWCGSAFlAwQBKjALBglghkgB ZQMEARYwCwYJYIZIAWUDBAECMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIAgDAN BggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDAKBggqhkjOPQQD AgRIMEYCIQD+Ikz8MzZ1PerfRQniA3xMFIWxVYF8dciJHo0kL1SWdQIhAOWbO2HP 93aBMOmUEihsc6Y0cfOSOe254d7ibV4MDzyp -----END CMS----- EOF |
The above demonstrates a S/MIME encrypted message, with a signature that chains to Google's C2PA root CA, which is in the official C2PA trust list.
The vulnerabilities I exploited to produce this chain are not eligible for bug bounty rewards, and are in fact already publicly known. But in the spirit of our little experiment I'm not going to elaborate.
Erm, Actually ☝️🤓
The astute observer will note that my demo is "not the same" as the eMudhra compromise, because it's merely a leaf cert that has a private key of 4, rather than a trusted intermediate.
I can get Google's intermediate to sign any leaf key I like (via an undisclosed method), and that "4" key is just how I'm proving it.
In the context of TLS that's kinda how cert issuance works normally, but it completely breaks the C2PA trust model.