Con questa autorizzazione un attaccante potrebbe caricare nuove versioni degli artefatti con codice dannoso come immagini Docker:
# Configure docker to use gcloud to authenticate with Artifact Registrygcloudauthconfigure-docker<location>-docker.pkg.dev# tag the image to upload itdockertag<local-img-name>:<local-tag><location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag># Upload itdockerpush<location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
È stato verificato che è possibile caricare una nuova immagine Docker malevola con lo stesso nome e tag di quella già presente, quindi la vecchia perderà il tag e la prossima volta che quell'immagine con quel tag viene scaricata verrà scaricata quella malevola.
Carica una libreria Python
Inizia creando la libreria da caricare (se puoi scaricare l'ultima versione dal registro puoi evitare questo passaggio):
Configura la struttura del tuo progetto:
Crea una nuova directory per la tua libreria, ad esempio hello_world_library.
All'interno di questa directory, crea un'altra directory con il nome del tuo pacchetto, ad esempio hello_world.
All'interno della directory del tuo pacchetto, crea un file __init__.py. Questo file può essere vuoto o può contenere inizializzazioni per il tuo pacchetto.
Nella radice della tua directory hello_world_library, crea un file setup.py.
Questo file contiene metadati sulla tua libreria e dice a Python come installarla.
# setup.pyfrom setuptools import setup, find_packagessetup(name='hello_world',version='0.1',packages=find_packages(),install_requires=[# Eventuali dipendenze necessarie per la tua libreria],)
Ora, carichiamo la libreria:
Crea il tuo pacchetto:
Dalla radice della tua directory hello_world_library, esegui:
python3setup.pysdistbdist_wheel
Configura l'autenticazione per twine (usato per caricare il tuo pacchetto):
Assicurati di avere twine installato (pip install twine).
Non è possibile caricare una libreria python con la stessa versione di quella già presente, ma è possibile caricare versioni superiori (o aggiungere un extra .0 alla fine della versione se funziona -non in python però-), o eliminare l'ultima versione e caricarne una nuova con (necessario artifactregistry.versions.delete):
Con questa autorizzazione puoi scaricare artefatti e cercare informazioni sensibili e vulnerabilità.
Scarica un'immagine Docker:
# Configure docker to use gcloud to authenticate with Artifact Registrygcloudauthconfigure-docker<location>-docker.pkg.dev# Dowload imagedockerpull<location>-docker.pkg.dev/<proj-name>/<repo-name>/<img-name>:<tag>
Un attaccante con questa autorizzazione potrebbe concedersi autorizzazioni per eseguire alcuni degli attacchi al repository precedentemente menzionati.