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.