De twaalf jaar oude fout Stack Clash bedreigt niet alleen Linux, maar ook andere Unix-achtige besturingssystemen. Systemd wordt geplaagd door belangrijke beveiligingslekken. En tienduizenden memcached-servers blijven na acht maanden nog kwetsbaar voor kritieke fouten. Deze en andere beveiligingsnieuwtjes lees je in Focus op veiligheid.

 

Stack Clash: twaalf jaar oude fout bedreigt Linux en andere Unix-achtigen

Onderzoekers van beveiligingsbedrijf Qualys ontdekten een kwetsbaarheid in het geheugenbeheer van Linux en andere Unix-achtige besturingssystemen, zoals OpenBSD, NetBSD, FreeBSD en Solaris, en dat zowel op de i386- als amd64-platforms. Aanvallers zijn daardoor in staat om het geheugen corrupt te maken en willekeurige code uit te voeren.

De onderzoekers noemden de fout Stack Clash, omdat ze de stack met een ander geheugengebied doet botsen. De stack is een speciaal geheugengebied dat groeit wanneer een programma meer geheugen nodig heeft. Maar als de stack teveel groeit en in de buurt van een ander geheugengebied komt, kan het programma beide gebieden niet meer uit elkaar houden. Een aanvaller kan dit uitbuiten door de stack te overschrijven met het ander geheugengebied of andersom.

Het idee achter de fout is niet nieuw: in 2005 al werd het botsen van de stack met een ander geheugengebied uitgebuit. In 2010 introduceerde de Linux-kernel een bescherming: de stack guard page. Die geheugenpagina komt na de laatste toegekende geheugenpagina op de stack. Een programma dat toegang tot de stack guard page probeert te krijgen, triggert een exception. Qualys toonde nu aan dat die bescherming te omzeilen is. De stack guard page van 4 Kbyte die Linux aanmaakt, is onvoldoende om een stack clash tegen te gaan: programma’s kunnen “erover springen”.

Qualys ontwikkelde een proof-of-concept die de stack clash lokaal uitbuit: iedereen die lokaal toegang heeft tot het systeem, kan door de stack clash rootprivileges verkrijgen. De oplossing die Qualys voorstelt, is om de stack guard page een Mbyte groot te maken. Maar dat is een oplossing op korte termijn. Om volledige bescherming te bieden, ook bij gebruik van grote stack-gebaseerde buffers, moet alle userlandcode (niet alleen programma’s, maar ook bibliotheken en ld.so) gehercompileerd worden met gcc’s optie -fstack-check. Die voorkomt dat de stackpointer in een ander geheugengebied wijst zonder eerst de stack guard page door te lopen. Dan hoeft die pagina zelfs niet groter dan 4 Kbyte te zijn.

Link:

https://blog.qualys.com/securitylabs/2017/06/19/the-stack-clash

 

Lek in systemd geeft rootprivileges

Een ontwikkelaar ontdekte dat hij eenvoudig rootprivileges kon verkrijgen op een Linux-systeem met systemd door een ongeldige gebruikersnaam in te vullen in een systemd unit-bestand. Een Linux-gebruikersnaam mag niet met een cijfer beginnen, maar toen de ontwikkelaar als gebruikersnaam in een unit-bestand 0day invulde, werd de service met rootrechten opgestart.

Op zich is het een triviale fout om op te lossen. Maar de reactie van Lennart Poettering, de hoofdontwikkelaar van systemd, was eenvoudig: 0day is geen geldige gebruikersnaam, dus er valt niets te fixen in systemd. Dat is trouwens niet helemaal correct. Red Hat Enterprise Linux en CentOS accepteren deze gebruikersnamen wel. Op deze systemen gaat het dus wel degelijk om een fout in systemd, dat de gebruikersnaam niet herkent.

Ook al is de reactie van Poettering wat wereldvreemd, de fout is gelukkig niet zo gemakkelijk uit te buiten. Een aanvaller heeft immers al rootprivileges nodig om die ongeldige naam in een unit-bestand te plaatsen… Maar er zijn wel situaties denkbaar waarin dat mogelijk is. Je slaagt er bijvoorbeeld in om een beheerder om de tuin te leiden en hem ervan te overtuigen om een unit-bestand van jou te installeren met zo’n ongeldige naam in. Op sommige systemen draaien bovendien scripts die automatisch unit-bestanden aanmaken. Als die niet controleren of de gebruikersnaam geldig is, verkrijgt de gebruiker op deze manier eenvoudig rootrechten. Of je kunt gebruik maken van een andere exploit die schrijftoegang tot systemd’s unit-bestanden geeft en dan door het lek in systemd je privileges uitbreiden. Ondertussen hebben de systemd-ontwikkelaars de fout toch gefikst: vanaf systemd 234 wordt een unit met ongeldige User-instellingen niet meer uitgevoerd.

Overigens werd systemd nog door een ander lek geplaagd. Een kwaadaardige dns-server kon die fout in systemd-resolved uitbuiten door een speciaal geprepareerd antwoord te sturen. De aanvaller kon het systeem dan doen crashen of willekeurige code op een afstand uitvoeren. De fout was al twee jaar aanwezig in systemd, sinds systemd 223 in juli 2015.

 

Memcached-servers worden maar niet gepatcht

In oktober 2016 ontdekten onderzoekers van Cisco’s Talos beveiligingsteam drie belangrijke beveiligingsfouten in versie 1.4.31 en eerder van memcached. Aanvallers konden daardoor eenvoudig publiek toegankelijke memcached-installaties overnemen, willekeurige code op de servers uitvoeren en gevoelige gegevens stelen.

De fout werd opgelost, maar toen Cisco in februari 2017 een internetscan deed, bleken nog maar liefst 85.000 publiek toegankelijke memcached-installaties kwetsbaar te zijn. Slechts 22 procent vereiste authenticatie. Cisco stuurde naar al die beheerders een waarschuwingsmail en deed na vijf maanden een nieuwe scan. Eind juli 2017 bleken nog steeds meer dan 73.000 servers kwetsbaar.

Link:

http://blog.talosintelligence.com/2017/07/memcached-patch-failure.html

 

‘Bad Taste’ voert VBScript-code uit via Wine

Nils Dagsson Moskopp ontdekte een verrassende fout die hij ‘Bad Taste’ noemde. Als je op je Linux-systeem Wine en gnome-exe-thumbnailer hebt geïnstalleerd, kan het in GNOME Files (voorheen Nautilus) openen van een directory met een kwaadaardig msi-bestand al voldoende zijn om willekeurige VBScript-code uit te voeren. Ook de bestandsbeheerders Nemo (van Cinnamon) en Caja (van MATE) zijn kwetsbaar. Het probleem zit in de code van gnome-exe-thumbnailer, dat een ingebed icoontje uit een uitvoerbaar Windows-bestand haalt om dat als thumbnail te tonen. Die thumbnailer haalt het versienummer uit een msi-bestand. Niet door het bestand te parsen, maar door een VBScript aan te maken en dat met Wine uit te voeren. Door VBScript in een bestandsnaam op te nemen, kun je deze code willekeurige VBScript-code laten uitvoeren. GNOME 3.26 houdt dit soort aanvallen tegen door alle thumbnailers in een sandbox te draaien.

Link:

http://news.dieweltistgarnichtso.net/posts/gnome-thumbnailer-msi-fail.html

 

Tails 3.0

Tails, de distributie die anonimiteit en privacy hoog in het vaandel draagt, heeft versie 3.0 uitgebracht, gebaseerd op Debian 9 (“Stretch”). De ondersteuning voor 32-bitcomputers is verwijderd, omdat gebruik van de 64-bitmogelijkheden de beveiliging verbetert. Onder andere met het NX-bit. De meeste binary’s zijn in Tails 3.0 bovendien gehard met PIE (position-independent executable), wat ASLR (Address Space Layout Randomization) mogelijk maakt. De Tor Browser heeft in de distributie een upgrade gekregen naar versie 7.0, gebaseerd op Firefox 52 ESR. En de Tails Greeter, waarmee je Tails bij het opstarten configureert, is helemaal op de schop gegaan.

Link:

https://tails.boum.org

 

En verder

Parrot Security OS 3.7 heeft een nieuw thema en de auto-updater toont de vooruitgang van systeemupgrades. De oude Linux 4.9-kernel is in de op Debian gebaseerde distributie voor penetrationtesters ingeruild voor Linux 4.11, met als resultaat een betere hardware ondersteuning. Ook BackBox Linux, de op Ubuntu gebaseerde distributie voor penetrationtesters, heeft een nieuwe versie. BackBox Linux 5 heeft Linux-kernel 4.8 en een boel bijgewerkte hackingtools.

Let’s Encrypt geeft vanaf januari 2018 wildcard certificaten uit. Zo’n certificaat geldt voor willekeurige subdomeinen van een domein (zoals *.example.com), wat het voor websitebeheerders eenvoudiger maakt om https op heel hun domein uit te rollen. En de OpenBSD-ontwikkelaars zijn een functie aan het testen waarbij het besturingssysteem bij elke opstart een unieke kernel heeft. Kernel Address Randomized Link (KARL) genereert bij elke opstart een willekeurige kernel en laadt die op dezelfde locatie, terwijl het in Linux 4.12 geïntroduceerde Kernel Address Space Layout Randomization (KASLR) bij elke opstart dezelfde kernel op een willekeurige locatie laadt.