CVE-2026-78676: Kritisk fejl i GitPython giver kodeudførelse
GitPython før 3.1.59 kan snydes til at indsætte skadelige git-direktiver via config-filer. Opdatér til 3.1.59 eller nyere.
Hvad er det?
CVE-2026-78676 er en sårbarhed i GitPython, et Python-bibliotek som mange udviklingsværktøjer og CI/CD-pipelines bruger til at læse og skrive i git-repositorier programmatisk. Fejlen ligger i den måde, GitPython gemmer flerlinjede værdier i en git-konfigurationsfil (den fil, der styrer indstillinger for et git-repository). Når GitPython skriver konfigurationen om, kan en værdi med skjulte linjeskift blive omdannet fra en uskadelig, citeret tekststreng til et aktivt direktiv, for eksempel core.hooksPath, som fortæller git, hvor den skal finde script der køres automatisk. Det gør det muligt for en angriber at få eget kode kørt, næste gang en almindelig git-handling udløser hook’en.
Hvem rammer det?
Det rammer virksomheder, der bruger GitPython i egne værktøjer, automatiseringsscript, CI/CD-pipelines (automatiske build- og udrulningsflows) eller interne systemer, som klontr eller behandler git-repositorier fra kilder, I ikke selv kontrollerer fuldt ud. Det gælder alle versioner af GitPython før 3.1.59. Særligt udsatte er systemer, der henter kode fra eksterne bidragydere, kunderepositorier eller open source-projekter og derefter foretager en hvilken som helst konfigurationsændring via GitPython.
Hvad kan ske?
En angriber kan lægge en forberedt konfigurationsfil i et repository, som ser harmløs ud. Så snart jeres system bruger GitPython til at foretage en helt almindelig, urelateret ændring i konfigurationen, kan den skjulte værdi blive aktiveret som et git-hook-direktiv. Næste gang der udføres en git-handling som commit eller checkout, kører angriberens kode med de rettigheder, som jeres byggeserver eller automatiseringsjob har. I praksis kan det give fuld adgang til byggeserveren, kildekode, adgangskoder gemt i pipelinen og adgang videre ind i jeres netværk.
Hvor alvorligt er det?
CVSS-scoren er 9,8 ud af 10, hvilket er kritisk. Sårbarheden kan udnyttes over netværket, kræver ingen login eller rettigheder og ingen handling fra en bruger ud over, at systemet selv foretager en normal konfigurationsskrivning. Konsekvensen rammer fortrolighed, integritet og tilgængelighed fuldt ud, da angriberen kan opnå vilkårlig kodeudførelse. Der er ikke oplyst aktiv udnyttelse i det åbne på offentliggørelsestidspunktet, men fejlen er let at forstå og kræver ingen specialviden at udnytte, når man kender mekanismen.
Hvad gør jeg nu?
Følg punkterne i rækkefølge for at lukke hullet og begrænse skaden.
- Opdatér GitPython til version 3.1.59 eller nyere i alle projekter, byggeservere og containerimages, der bruger biblioteket.
- Gennemgå jeres kodebase og CI/CD-pipelines for at finde alle steder, hvor GitPython indgår, direkte eller som transitiv afhængighed via andre biblioteker.
- Tjek eksisterende git-konfigurationsfiler i repositorier for uventede eller mistænkelige core.hooksPath-værdier eller andre direktiver, I ikke selv har sat.
- Begræns, hvilke rettigheder byggeservere og automatiseringsjob har, så en eventuel kodeudførelse ikke automatisk giver adgang til hele netværket.
- Undgå indtil videre at lade automatiserede systemer klone eller behandle repositorier fra ukendte eller ubetroede kilder uden manuel gennemgang.
- Hvis I ikke selv kan afgøre, om jeres systemer er berørt, eller I finder tegn på kompromittering, bør I hente ekstern sikkerhedshjælp til at gennemgå byggemiljøet.
Opdatér inden for få dage
Vi anbefaler, at I opdaterer GitPython til 3.1.59 eller nyere hurtigst muligt, især hvis biblioteket indgår i CI/CD-pipelines eller andre automatiserede flows. Det er kun forsvarligt at vente, hvis I med sikkerhed kan dokumentere, at GitPython ikke indgår nogen steder i jeres systemer. I mellemtiden bør I ikke lade automatiserede systemer behandle repositorier fra kilder, I ikke stoler fuldt ud på.
Tidslinje
Konkrete eksempler
CI-pipeline hos et dansk softwarehus
Et dansk softwarehus lader sin CI-pipeline automatisk klone pull requests fra eksterne bidragydere for at køre tests. En bidragyder lægger en forberedt konfigurationsfil i sit forslag. Da pipelinen bruger GitPython til at opdatere en urelateret indstilling, aktiveres et skjult hook-direktiv, og angriberens kode kører med byggeserverens rettigheder, hvilket giver adgang til virksomhedens interne netværk og kildekode.
Ofte stillede spørgsmål
Hvordan finder vi ud af, om vi bruger GitPython?
Søg efter GitPython i jeres afhængighedsfiler, for eksempel requirements.txt, Pipfile eller pyproject.toml, og tjek også byggeserverens installerede pakker. Mange CI/CD-værktøjer og interne automatiseringsscript bruger GitPython uden det er tydeligt i selve applikationskoden.
Er vi ramt, hvis vi kun bruger GitPython til interne repositorier?
Risikoen er lavere, men ikke nul. Hvis interne repositorier nogensinde har modtaget bidrag fra eksterne parter, konsulenter eller open source-afhængigheder med git-undermoduler, kan en skadelig konfiguration alligevel være sneget ind.
Kan vi vente til den næste planlagte opdatering i weekenden?
Det anbefaler vi ikke. Sårbarheden kræver ingen login og ingen brugerhandling, og den udnytter en helt almindelig arbejdsgang i GitPython. Vi anbefaler at rulle opdateringen ud, så snart den kan testes, frem for at følge den normale opdateringscyklus.
Skal vi anmelde hændelsen til myndighederne?
Kun hvis I finder konkrete tegn på, at sårbarheden er blevet udnyttet, og at persondata eller kritiske systemer er kompromitteret. Er der tale om en ren opdatering uden fund af misbrug, er der ikke anmeldelsespligt.
Er der en midlertidig løsning, hvis vi ikke kan opdatere med det samme?
Der findes ikke en officiel midlertidig løsning ud over opdateringen. I kan begrænse eksponeringen ved at undgå at behandle repositorier fra ubetroede kilder og ved at overvåge git-konfigurationsfiler for uventede hooksPath-værdier, indtil opdateringen kan gennemføres.
CVSS-detaljer
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE-svaghedstyper
Original NVD-beskrivelse (engelsk)
GitPython before 3.1.59 fails to safely re-serialize multi-line git-config values during write operations, corrupting dormant quoted values into injected directives like core.hooksPath. Attackers can craft config files with embedded newlines that become live git directives after any unrelated GitPython config write, enabling arbitrary code execution via hook invocation.
Referencer & kilder
Eksterne kilder
Brug for hjælp med jeres sikkerhed?
Vi hjælper SMV’er med at omsætte trusler som denne til konkrete handlingsplaner.