Sikkerhedsforskere fra firmaet Fenrisk har afsløret oplysninger om sårbarheder i værktøjerne Pagure og OBS (Open Build Service), som gjorde det muligt at kompromittere infrastrukturerne til pakkeopbygning for Fedora- og openSUSE-distributionerne. Forskere har vist muligheden for at udføre angreb for at eksekvere vilkårlig kode på servere med Pagure og OBS, hvilket kunne bruges til at indsætte ændringer i pakkerne i Fedora- og openSUSE-repositorierne.
Der er identificeret 4 sårbarheder på Pagure-platformen, der anvendes i Fedora til samarbejde om kode og pakke-metadata. For at udnytte de identificerede problemer kræves der en konto i Pagure, som enhver kan opnå (der er i øjeblikket registreret 24899 brugere på Pagure.io). Tre problemer muliggør læsning af filer på systemet, og et problem tillader eksekvering af egen kode på serveren. Problemerne blev opdaget den 1. januar 2024, rapporteret via bugzilla.redhat.com den 25. april 2024 og rettet i Pagure på 3 timer.
- Sårbarhederne CVE-2024-4981 og CVE-2024-47515 skyldes forkert håndtering af symbolske links i filopdaterings- og arkiveringsfunktioner. Sårbarhederne gør det muligt at læse indholdet af lokale filer på serveren, for eksempel kan man få indsigt i indholdet af filen med administrator-sessionens parametre i Pagure og få adgang med hans rettigheder. Udnyttelsen af sårbarheden i funktionen _update_file_in_git() indebærer at oprette et repository i Pagure; tilføje en commit med en ny fil, der er oprettet som et symbolsk link til den ønskede systemfil; åbne denne fil til redigering i webgrænsefladen.
- Sårbarheden (CVE-2024-4982) i funktionen view_issue_raw_file() tillader at gå uden for den grundlæggende mappe ved at angive tegnene "\/.." i parametrene for den anmodede Issue. Problemet muliggør læsning af filer på systemet, afhængigt af de adgangsrettigheder, som processen, hvorigennem webgrænsefladen kører, har. For eksempel kan man for at se filen \/etc\/passwd åbne siden "http:\/\/pagure.local:5000\/your-repository\/issue\/raw\/..\/..\/..\/..\/..\/..\/..\/etc\/passwd".
- Sårbarheden (CVE-2024-47516) i funktionen PagureRepo.log() giver mulighed for at indsætte egne kommandoer og udføre kode på serveren. Problemet skyldes, at ved visning af ændringshistorikken for en fil via webgrænsefladen, kaldes kommandoen «git» med overførsel af branchens ID i kommandolinjen (f.eks. «/usr/bin/git —pretty=oneline —abbrev-commit — README.md»). Korrektheden af ID'et bliver ikke kontrolleret, så man kan i stedet overføre hvilken som helst kommandolinjeoption, for eksempel «—output=/tmp/foo.bar» for at omdirigere output til en fil. Den angribende kan overskrive filer på systemet ved at sende en forespørgsel som følgende: http://pagure.local:5000/test/history/README.md?identifier=—output=/tmp/foo.bar
Pagure kører under brugeren git, så det vil kun være muligt at overskrive filer tilhørende denne bruger. For at udføre sin kode på serveren kan man benytte en service til adgang til repository via SSH, når man interagerer med denne, udføres kommandoen «bash -c /usr/libexec/pagure/aclchecker.py». Den angribende kan udnytte sårbarheden til at overskrive filen «/srv/git/.bashrc», og denne fil vil blive kørt af bash-shell'en ved adgang til repository via SSH.
Angrebet indebærer at registrere sig i systemet Pagure, oprette et repository, tilføje en README.md-fil til repositoryet med en commit-besked af typen «|| /bin/bash» og sende en forespørgsel «http://pagure.local:5000/test/history/README.md?identifier=—output=/srv/git/.bashrc». I løbet af disse trin vil strengen «34а5с43 || /bin/bash» blive skrevet til filen «/srv/git/.bashrc». For at køre den oprettede fil «/srv/git/.bashrc» er det tilstrækkeligt at logge ind på repositoryet via SSH med sin konto. Udførelse af kode med rettighederne for brugeren git på Pagure-serveren giver kontrol over alt indholdet i repositories med pakker.
I platformen OBS (Open Build Service), der anvendes i openSUSE og nogle andre distributioner til pakkehåndtering, er der identificeret en sårbarhed (CVE-2024-22033), der muliggør udførelse af egen kode på serveren. Sårbarheden blev identificeret den 27. juni 2024, rapporteret til openSUSE-projektet den 29. juni og rettet den 10. juli.
Sårbarheden findes i tjenesten «obs-service-download_url», hvor der manglede en ordentlig kontrol af den URL, der anvendes ved kørsel af wget-værktøjet fra et script, der downloader kildekoden til OBS. En angriber kan angive en konfiguration af den pakke, der oprettes i OBS, hvor der i stedet for en URL til download af koden angives en kommandolinjeparameter til wget, for eksempel: —output-document=\/tmp\/test tempfile
For at omgå fejlen ved at forsøge at køre wget uden en URL, er der i eksemplet angivet parametret «download-manifest», som gør det muligt at angive en liste med URL'er i en separat fil. Det ovenstående eksempel vil føre til kørsel af kommandoen: \/usr\/bin\/wget -i \/srv\/obs\/service\/XXXXX\/src\/tempfile -4 —output-document=\/tmp\/test
som tillader at skrive indholdet, der hentes fra linket angivet i filen \/srv\/obs\/service\/XXXXX\/src\/tempfile, til filen \/tmp\/test fra koden, som angriberen har downloaded til OBS via build.opensuse.org-interface, der tillader fri registrering. Udover at overskrive en fil på serveren kan angriberen også sende sig selv en hvilken som helst fil ved at angive «—output-document» parametret som «—post-file», for eksempel «—post-file=\/etc\/passwd». På denne måde kan angriberen læse og skrive filer på serveren i overensstemmelse med de adgangsrettigheder, som tjenesten OBS kører under.
For at omdanne muligheden for at skrive til en fil til at udføre kode på serveren har forskere foreslået en metode, der består af to trin. De to trin er nødvendige, da angriberen kan oprette en fil «.wgetrc» med indstillinger til wget, men dette er ikke tilstrækkeligt til at starte kommandoer. Dog kan der via «.wgetrc» skabes betingelser for at køre et vilkårligt program i systemet, men uden at videregive argumenter til det. For at starte vilkårlig kode foreslås det at køre programmet «prove», som behandler konfigurationsfilen «.proverc», der tillader angivelse af parametret «—exec» til udførelse af vilkårlig kode.
I det første trin oprettes en fil ved navn «.proverc» i brugerens hjemmebibliotek «obsservicerun» gennem de førnævnte handlinger med «download-manifest», som indeholder kommandoer, der vil blive udført ved opstart af processen «prove». I det andet trin oprettes en fil «.wgetrc» med parameteren «use-askpass=\/usr\/bin\/prove», som udløser «prove». Når disse filer er blevet oprettet, er det tilstrækkeligt at skabe betingelser for at downloade data ved hjælp af wget, hvilket vil føre til, at angriberens kode køres på serveren med brugeren «obsservicerun» rettigheder. Brugerens rettigheder «obsservicerun» er tilstrækkelige til at udtrække nøgler fra repository, der bruges af OBS-brugere til at signere pakker.
Tillæg: SUSE Product Security-teamet mener, at faren ved sårbarheden i OBS er overvurderet, og at forskernes påstand om, at problemet giver mulighed for kompromittering af alle pakker i openSUSE-distributionen, ikke er korrekt. Det bemærkes, at tjenesterne i infrastrukturen build.opensuse.org kører i isolerede containere, der genskabes og ikke indeholder kritisk information. Den identificerede sårbarhed vurderes som farlig, men ikke tilstrækkelig til at kompromittere openSUSE's bygning infrastruktur og de genererede pakker. Derudover nævnes det, at handlinger i OBS-grænsefladen, som beskrevet i angrebseksemplet, kun kunne udføres på en lokalt installeret version af OBS på udviklerens arbejdsstation.
Kilde: opennet.ru
