sikkerhet

Slik sikrer du deg mot Python-sårbarheten

En alvorlig sårbarhet i Python har sneket seg inn i hundretusenvis av prosjekter. – Ikke støtt arkiv-formater med mindre du virkelig må, sier seniorutvikler Stig Baugstø.

Sårbarheten er egentlig ønsket funksjonalitet, så skal du bruke funksjonen sikkert, må du legge inn ekstra sikkerhetstiltak, forklarer Stig Baugstø.
Sårbarheten er egentlig ønsket funksjonalitet, så skal du bruke funksjonen sikkert, må du legge inn ekstra sikkerhetstiltak, forklarer Stig Baugstø.

− Har du en løsning som på en eller annen måte tar imot en tar-fil og pakker den ut, kan du være i risikosonene for denne sårbarheten, sier Stig Baugstø, seniorutvikler og sikkerhetskonsulent i Webstep, til Digi.no.

Han viser til en nylig gjenoppdaget 15 år gammel sårbarhet i en funksjon for å hente ut og pakke ut tar-filer. Nylig viste det seg at den trolig har sneket seg inn i hundretusenvis av prosjekter.

− Dette er jo en gammel sårbarhet. Grunnen til at den har fått mye oppmerksomhet nå, er at Trellix har oppdaget den igjen og prøver å hype den, litt for å promotere seg selv, sier Baugstø og fortsetter:

− Men at det er en alvorlig sårbarhet, som fortsatt finnes der og som ingen har gjort noe med, det er fakta.

Ønsket funksjonalitet

Tar-formatet er et arkiv-format og brukes på samme måte som zip-filer. Det gjør det mulig å pakke og komprimere flere filer inn i en fil, så filene tar mindre plass.

Sårbarheten ligger i en ønsket funksjonalitet i arkiv-formatet: At det er mulig å pakke ut filer til ulike steder på maskinen. Det kan være praktisk, blant annet til backup-formål, der hele disken kan pakkes i en tar-fil. Ved behov kan fila pakkes ut, og alt havner der det skal, forklarer Baugstø.

Problemet oppstår først når en applikasjon tar imot en tar-fil som inneholder ondsinnede filstier.

− Når du pakker ut en tar-fil, kan det hende den finner ut at den skal pakke ut en fil på en helt annen del av maskinen, og i verste fall prøve å skrive over systemfiler, sier Baugstø.

Men dette er ønsket funksjonalitet. Python-funksjonen som pakker ut tar-filer, gjør akkurat det den skal. Derfor mener også Python at dette egentlig ikke er deres problem.

− Problemet er kanskje heller i tar-formatet enn i Python, sier Baugstø.

Skulle Python selv ha lagt inn sperrer, risikerer de å ødelegge ønsket funksjonalitet for andre.

Du må altså selv finne sårbarheten og legge inn eventuelle ekstra sikkerhetstiltak.

Slik finner du sårbarheten

− Først og fremst må du identifisere om du har noen applikasjoner skrevet i Python. Har du ikke det, er du mest sannsynlig ikke rammet av denne sårbarheten, sier Baugstø.

Det neste man må spørre seg om, er om noen av disse applikasjonene tillater bruk av dette tar-fil-formatet.

− Det er en konkret Python-funksjon som heter extract all, som har denne sårbarheten. Det neste steget vil være å søke i koden etter denne funksjonen, sier Baugstø.

Men selv om du sjekker egen kode og ikke finner spor av funksjonen, kan du være utsatt.

− Man kan ha såkalte tredjepartsavhengigheter, kode fra andre aktører. Da må man også lete etter sårbarheten hos dem, sier Baugstø.

Det kan være mer tungvint.

For å forenkle arbeidet har Trellix laget et verktøy de har valgt å kalle Creosote. Det er åpent tilgjengelig på nett og kan brukes av alle. Creosote er et script man kan kjøre mot kodebasen for å plukke opp bruken av den sårbare funksjonen.

− Men som sikkerhetskonsulent er jeg nødt til å si at man alltid skal være forsiktig med å kjøre script fra tredjeparter uten å ha lest gjennom scriptet først, sier Baugstø.

Må du virkelig støtte tar?

Dersom du finner funksjonen i egen kildekode, er det en idé å dobbeltsjekke om funksjonen faktisk er i aktiv bruk. Hvis ikke, bør den kunne fjernes.

− Når det gjelder egen kode, så må man først stille seg spørsmålet: Trenger min applikasjon å støtte dette filformatet, sier Baugstø og fortsetter:

− Neste spørsmål er: Trenger du at applikasjonen din pakker ut, eller holder det å laste opp fila?

Er det ikke strengt nødvendig, ville Baugstø ha fjernet funksjonen.

− Da fjerner du også problemet, sier han.

Han viser til Open Web Application Project (OWASP), som anbefaler å ikke støtte zip-arkiver.

− I mine øyne kan man også si at man ikke bør støtte arkivformater, sier Baugstø.

Sikre koden

Dersom man er helt nødt til å støtte slike filformater, må man selv sikre koden etter beste evne.

− Før man pakker ut arkivet, bør man i koden gå gjennom alle filene som finnes i arkivet, for å se hvor filene ønsker å bli pakket ut, sier Baugstø.

Dersom filen starter med en henvisning til roten av filsystemet, som starten av c-disken eller filstien stater med en skråstrek, kan det være tegn på snusk.

− Om filstien inneholder to punktum, er det også ugler i mosen.

Om uhellet først er ute

En gjennomtenkt plan og sikkerhetsmekanismer som begrenser skadeomfanget om uhellet først er ute, er også helt nødvendig mener Baugstø.

− En veldig god start er at man kjører Python-programmer som svært begrensede brukere med få rettigheter, ikke som admin-brukere, sier han og fortsetter:

− Det er vanskelig å skrive over filer man ikke har rettigheter til å røre.

Baugstø anbefaler også å prøve å kjøre noe av prosesseringen og utpakkingen av tar-filene i et såkalt sandkasse-miljø på en begrenset maskin.

Ser man på den opprinnelige diskusjonen om sårbarheten og forslagene til hvordan man skal unngå den, er egentlig ingen av løsningene gode nok, mener Baugstø.

− Det sier litt om hvor vanskelig det er å gjøre dette sikkert. Vi må ta høyde for at det kan gå galt, sier han.

Ikke bare Python

Det er ikke uvanlig at utviklere googler seg frem til løsninger på nye problemer. Slik kan enkle funksjoner, som hvordan man pakker ut tar-filer i Python, snike seg inn i koden uten at utvikler har sjekket dokumentasjonen.

− Slik sett er det jo høy risiko for at dette er et vedvarende problem, sier Baugstø.

Siden problemet strengt tatt ikke ligger i Python, men i filformatet, finnes det antageligvis tilsvarende sårbarheter i andre programmeringsspråk. Det viktigste sikkerhetsrådet om sårbarheten er derfor enkelt å gi, mener Baugstø:

– Ikke støtt arkiv-formater med mindre du virkelig må.

Powered by Labrador CMS