A zero-day vulnerability in NGINX’s LDAP Reference Implementation has been fixed by the maintainers of the NGINX web server project. The security update was released in response to this vulnerability.
The app users who are proxied by the NGINX web server, the NGINX LDAP reference implementation utilizes the Lightweight Directory Access Protocol (LDAP) to authenticate.
In an advisory, Liam Crilly and Timo Stark of F5 Networks stated:-
“Project maintainers addressed the security vulnerabilities in the NGINX LDAP reference implementation were publicly shared. We have determined that only the reference implementation is affected.”
“There is no need to change anything if you are not using the reference implementation, and no other corrective action is necessary if you are using the NGINX Open Source or NGINX Plus since they are not affected.”
Based on its response, NGINX says only three conditions are impacting the reference implementation, which uses LDAP for authentication. And here they are:-
- Command-Line Parameters Are Used to Configure the Python Daemon
According to what is detailed in the sample configuration, and in the documentation as well, the main method of configuring the LDAP reference implementation is to use a number of proxy_set_header directives.
It is also possible to set the parameters of the configuration through the command line nginx-ldap-auth-daemon.py to initialize the Python daemon.
You can prevent this from happening by adding the following configuration to the location = /auth-proxy block in the NGINX configuration (nginx-ldap-auth.conf in the repo) in order to ensure that all extraneous request headers are ignored during authentication.
- Unused, Optional Configuration Parameters
It is possible for an attacker to override certain configuration parameters in a configuration by passing specially crafted HTTP request headers if those parameters aren’t set in the configuration.
In order to defend, it will only be necessary to add the following configuration to the location = /auth-proxy block in the NGINX configuration file.
- LDAP Group Membership Is Required
Since the Python daemon does not sanitize its inputs that’s why they become vulnerable to being bypassed by an attacker with a specially crafted request header through which they evade the group membership (memberOf) check.
Moreover, the LDAP authentication can also be forced to succeed regardless of whether the user to be authenticated is not a member of the required group.
If you wish to mitigate this issue, make sure that the backend daemon that displays the login form strips the username field of all special characters.
Here users have to modify the two characters, and here they are:-
- Parenthesis characters – ( ) –
- The equal sign (=)
While apart from this, these two characters have distinct meanings for the LDAP servers. Moreover, it is intended that the LDAP daemon in the LDAP reference implementation will be updated in this manner in the near future.
LDAP implementers made it clear that the reference implementation of LDAP is mainly concerned with protocols.