Shellshock

Nu har en bugg i bash hittats. Det låter ju inte så farligt kan man tro, men då har man fel.

Den kallas shellshockoch går att läsa mer här CVE-2014-6271. Buggen går kortfattat ut på att bash exporterar variabler och funktioner till andra instanser av bash.

Farligast är webbservrar som kör någon form av cgi-bin, men med en del fantasi kan man utnyttja buggen på alla möjliga vis.

Här ser du ett exempel på hur man kan sätta en variabel, men egentligen deklarerar man en funktion. I det här fallet är kommandot vi vill köra ganska harmlöst, nämligen echo vulnerable.
export badvar='() { :;}; echo vulnerable'

Inga problem hittills. När en ny instans av bash skapas så händer det magiska:
# bash -c "date"
vulnerable
Thu Sep 25 15:41:26 CEST 2014

Hängde du med? Istället för att bara visa dagens datum så exekveras alltså echo vulnerable också.

Det intressanta börjar när man funderar på vilka saker som sätter olika variabler i bash. Det är mycket. Det läskigaste exemplet är cgi-bin som sätter olika variabler, och sedan exekverar kod via bash. Det går att göra utan att logga in på servern.

Fundera till exempel på vad som händer om en webbserver får ett HTTP-anrop som sätter lite headers som ser ut så här:
Cookie:() { :; }; ping -c 3 209.126.230.74
Host:() { :; }; ping -c 3 209.126.230.74
Referer:() { :; }; ping -c 3 209.126.230.74

Exemplet kommer från troyhunt.com som gjort en scanner. Alla servrar som är drabbade som får den här speciella texten kommer att skicka en ping till honom.

Det som händer är alltså att webbservern glatt tar emot de olika headers. De skrivs sedan till en variabel i bash som startar själva webbapplikationen, men som då även skickar en ping. Även ping är ju harmlöst, men att skicka lite lösenordsfiler eller radera saker är inte lika harmlöst.

Ett annat fiffigt trick visas på seclist. Här skickar man in speciella paket från DHCP-servern.

Självklart följer Cloudnet utvecklingen av det här och håller alla system uppdaterade.