Razvijači repozitorija Python-paketa PyPI (Python Package Index) najavili su implementaciju podrške za mehanizam digitalne atestacije za verifikaciju autentičnosti objavljenih paketa, koji je zamijenio verifikaciju korištenjem PGP potpisa. Ključna razlika atestacije je u tome što objavu paketa potvrđuje ne razvijač, već treća strana (katalog paketa) nakon verifikacije autentičnosti objave putem vanjskog pružatelja OpenID Connect (na primjer, nakon provjere da se objavljeni paket odnosi na povezani repozitorij na GitHubu ili GitLabu).
Sistem atestacije uklanja nedostatke prisutne u mehanizmu verifikacije putem PGP potpisa, koji je ranije bio proglašen zastarjelim u PyPI. Ovo rješenje je doneseno zbog problema s verifikacijom pripadnosti razvijačima otvorenih PGP ključeva koji se koriste za verifikaciju digitalnih potpisa — od 1069 PGP ključeva korištenih od 2020. godine za generiranje potpisa u PyPI, 29% otvorenih ključeva nije bilo dostupno na velikim javnim. poslužiteljima ključeva, a 35% ključeva se nije moglo potvrditi tokom audita. Potvrđenih 36% PGP ključeva pokrivalo je samo 0.3% od svih potpisanih datoteka.
U novom sistemu, potpisi korišteni za atestaciju paketa kreiraju se koristeći kratkodnevne efemerne ključeve, generirane na osnovu ovlasti koje potvrđuju pružatelji OpenID Connect. U trenutku generiranja ključeva potrebnih za stvaranje digitalnog potpisa, razvijač se identificira putem pružatelja OpenID, koji potvrđuje njegovu povezanost s glavnim projektom. Infrastruktura za digitalnu atestaciju izgrađena je pomoću sistema Sigstore i alata in-toto Attestation Framework.
Prednosti digitalne certifikacije uključuju izostanak vezivanja za stalne PGP ključeve — gubitak ili kompromitiranje privatnog ključa narušava povjerenje u potpise stvorene na temelju njega, dok se pri certifikaciji potpis formira u vezanosti za token koji potvrđuje ovlasti u trenutku postavljanja paketa i povezanost paketa s glavnim repozitorijem koda. Na primjer, prilikom objavljivanja paketa pripremljenog preko GitHub Action, certifikacija određuje potvrdivu i verifikovanu vezu između datoteke postavljene u PyPI, repozitorija, tijeka rada i heša commita na temelju kojeg je paket stvoren.

Za praćenje autentičnosti ključeva i otkrivanje mogućih kompromitacija koristi se javni centralizirani log koji oblikuje pakete projekata i samog PyPI, a za osiguranje integriteta i zaštitu od retroaktivnog izobličavanja podataka koristi se struktura "Merkle stablo" (Merkle Tree, svaki grana verifikuje sve niže grane i čvorove zahvaljujući stablo-hesiranju).
Dodatno, može se primijetiti otkrivanje zlonamjernog paketa "fabrice" u katalogu PyPI, koji se putem namjernog sličnog imenovanja (dodeljivanje sličnih imena, koja se razlikuju po pojedinim simbolima, poput exampl umesto example, djangoo umesto django, pyhton umesto python itd.) maskirao kao popularna biblioteka "fabric", koja ima ukupno 201 miliona preuzimanja (7 miliona preuzimanja u prošlom mjesecu). Zlonamjerni paket ostao je neprimećen od 2021. godine i od tada je preuzet više od 37 hiljada puta.
Paket "fabrice" ponavlja osnovnu funkcionalnost izvorne biblioteke i dodatno uključuje kod za otkrivanje i slanje na spoljne domaćine ključeva za pristup AWS-u (Amazon Web Services), postavljanje backdoora i izvršavanje određenih skripti. Aktivacija zlonamernih komponenti odvijala se na Linux i Windows. Na Linuxu, datoteke povezane sa zlonamernom aktivnošću preuzimane su u direktorij ~/.local/bin/vscode.
Izvor: opennet.ru
