Vývojáři repozitáře Python balíčků PyPI (Python Package Index) oznámili zavedení podpory digitálního certifikačního mechanismu pro ověřování pravosti publikovaných balíčků, který nahradil verifikaci pomocí PGP podpisů. Klíčovým rozdílem certifikace je, že publikaci balíčku potvrzuje nikoli vývojář, ale třetí strana (adresář balíčků) po ověření pravosti publikace prostřednictvím externího poskytovatele OpenID Connect (například po ověření, že publikovaný balíček souvisí se spojeným repozitářem na GitHubu nebo GitLab).
Systém certifikace odstraňuje nedostatky spojené s mechanismem verifikace PGP podpisy, který byl dříve v PyPI prohlášen za zastaralý. Toto řešení bylo přijato kvůli problémům s ověřením příslušnosti vývojářům otevřených PGP klíčů, které byly použity k ověření digitálních podpisů — z 1069 PGP klíčů, které byly použity od roku 2020 k vytváření podpisů v PyPI, 29% otevřených klíčů chybělo na velkých veřejných klíčích, a 35% klíčů nebylo možné ověřit během auditu. serverech Přitom potvrzených 36% PGP klíčů pokrývalo pouze 0.3% ze všech podepsaných souborů.
V novém systému se podpisy používané k certifikaci balíčků vytvářejí pomocí krátkodobých efemérních klíčů, generovaných na základě oprávnění potvrzených poskytovateli OpenID Connect. V okamžiku generování klíčů potřebných k vytvoření digitálního podpisu se vývojář identifikuje prostřednictvím poskytovatele OpenID, který potvrzuje jeho spojení s hlavním projektem. Infrastruktura pro digitální certifikaci byla vybudována za pomocí systému Sigstore a nástroje in-toto Attestation Framework.
Mezi výhody certifikace patří absence vázanosti na stálé PGP klíče — ztráta nebo kompromitace soukromého klíče narušuje důvěru v základě jich vytvořené podpisy, zatímco při certifikaci se podpis vytváří ve vazbě na token, který potvrzuje oprávnění v okamžiku umístění balíčku a spojení balíčku se základním repozitářem s kódem. Například při publikaci balíčku připraveného prostřednictvím GitHub Action certifikace určuje ověřitelný a potvrzený vztah mezi umístěným souborem v PyPI, repozitářem, workflow procesem a hashem commitu, na jehož základě byl balíček vytvořen.

Pro sledování pravosti klíčů a identifikaci možných kompromitací se pro vytváření balíčků projektů a samotného PyPI používá veřejný centralizovaný log, pro zajištění integrity a ochranu před zkreslením dat zpětně se využívá struktura „Merkleova stromu“ (Merkle Tree, každý větev ověřuje všechny podřízené větve a uzly díky stromovému hashování).
Dále můžeme zmínit odhalení v katalogu PyPI škodlivého balíčku „fabrice“, který se pomocí type squattingu (přiřazení podobných jmen lišících se jednotlivými znaky, například, exampl místo example, djangoo místo django, pyhton místo python atd.) maskoval pod populární knihovnu „fabric“, která má 201 milionů stažení (7 milionů stažení za minulý měsíc). Škodlivý balíček zůstal nepovšimnut od roku 2021 a od té doby byl stažen více než 37 tisíckrát.
Balíček „fabrice“ opakoval základní funkčnost původní knihovny a navíc obsahoval kód pro zjišťování a odesílání na externí hostitele klíčů pro přístup k AWS (Amazon Web Services), instalaci zadních vrátek a provádění určitých skriptů. Aktivace škodlivých komponentů probíhala na Linuxu a Windows. Na Linuxu byly související soubory s škodlivou aktivitou načítány do adresáře ~/local/bin/vscode.
Zdroj: opennet.ru
