|
|
(14 intermediate revisions by 2 users not shown) |
Line 2: |
Line 2: |
| <div style="width:100%;height:160px;border:0,margin:0;overflow: hidden;">[[File:Cheatsheets-header.jpg|link=]]</div> | | <div style="width:100%;height:160px;border:0,margin:0;overflow: hidden;">[[File:Cheatsheets-header.jpg|link=]]</div> |
| | | |
− | <b>WORK IN PROGRESS</b>
| + | The Cheat Sheet Series project has been moved to [https://github.com/OWASP/CheatSheetSeries GitHub]! |
| | | |
− | Last revision (mm/dd/yy): '''{{REVISIONMONTH}}/{{REVISIONDAY}}/{{REVISIONYEAR}}'''
| + | Please visit [https://cheatsheetseries.owasp.org/cheatsheets/LDAP_Injection_Prevention_Cheat_Sheet.html LDAP Injection Prevention Cheat Sheet] to see the latest version of the cheat sheet. |
− | = Introduction =
| |
− | __TOC__{{TOC hidden}}
| |
− | | |
− | This cheatsheet is focused on providing clear, simple, actionable guidance for preventing LDAP Injection flaws in your applications.
| |
− | | |
− | LDAP Injection is an attack used to exploit web based applications that construct LDAP statements based on user input. When an application fails to properly sanitize user input, it’s possible to modify LDAP statements through techniques similar to [[SQL Injection]]. LDAP injection attacks could result in the granting of permissions to unauthorized queries, and content modification inside the LDAP tree. For more information on LDAP Injection attacks, visit [[LDAP injection]].
| |
− | | |
− | [[LDAP injection]] attacks are common due to two factors:
| |
− | | |
− | # The lack of safer, parameterized LDAP query interfaces
| |
− | # The widespread use of LDAP to authenticate users to systems.
| |
− | | |
− | Primary Defenses:
| |
− | * Escape all variables using the right LDAP encoding function
| |
− | | |
− | Additional Defenses:
| |
− | * Use a framework (like LINQtoAD) that escapes automatically
| |
− | | |
− | =Primary Defenses=
| |
− | | |
− | ==Defense Option 1: Escape All Variables ==
| |
− | | |
− | ;Safe Java Escaping Example
| |
− | | |
− | 2008 Java article on LDAP injection defense: https://blogs.oracle.com/shankar/entry/what_is_ldap_injection
| |
− | | |
− | ESAPI for Java has two encoding functions for LDAP injection protection. http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html
| |
− | | |
− | /**
| |
− | * Encode data for use in LDAP queries.
| |
− | *
| |
− | * @param input the text to encode for LDAP
| |
− | *
| |
− | * @return input encoded for use in LDAP
| |
− | */
| |
− | String encodeForLDAP(String input);
| |
− | | |
− | /**
| |
− | * Encode data for use in an LDAP distinguished name.
| |
− | *
| |
− | * @param input the text to encode for an LDAP distinguished name
| |
− | *
| |
− | * @return input encoded for use in an LDAP distinguished name
| |
− | */
| |
− | String encodeForDN(String input);
| |
− | | |
− | | |
− | ;Safe C# .NET TBA Example
| |
− | | |
− | .NET AntiXSS (now the Encoder class) has LDAP encoding functions including Encoder.LdapFilterEncode(string), Encoder.LdapDistinguishedNameEncode(string) and Encoder.LdapDistinguishedNameEncode(string, bool, bool). http://blogs.msdn.com/b/securitytools/archive/2010/09/30/antixss_2d00_4_2d00_0_2d00_release_2d00_notes.aspx
| |
− | | |
− | Encoder.LdapFilterEncode encodes input according to RFC4515 where unsafe values are converted to \XX where XX is the representation of the unsafe character.
| |
− | | |
− | Encoder.LdapDistinguishedNameEncode encodes input according to RFC 2253 where unsafe characters are converted to #XX where XX is the representation of the unsafe character and the comma, plus, quote, slash, less than and great than signs are escaped using slash notation (\X). In addition to this a space or octothorpe (#) at the beginning of the input string is \ escaped as is a space at the end of a string.
| |
− | | |
− | LdapDistinguishedNameEncode(string, bool, bool) is also provided so you may turn off the initial or final character escaping rules, for example if you are concatenating the escaped distinguished name fragment into the midst of a complete distinguished name.
| |
− | | |
− | ==Defense Option 2: Frameworks that Automatically Protect from LDAP Injection ==
| |
− | | |
− | ;Safe NET Example
| |
− | | |
− | <i>LINQ to Active Directory</i> provides automatic LDAP encoding when building LDAP queries: https://linqtoad.codeplex.com/
| |
− | | |
− | ==Defense Option 3: Escaping All User Supplied Input==
| |
− | | |
− | TBA
| |
− | | |
− | = Additional Defenses =
| |
− | | |
− | Beyond adopting one of the three primary defenses, we also recommend adopting all of these additional defenses in order to provide defense in depth. These additional defenses are:
| |
− | | |
− | * '''Least Privilege'''
| |
− | * '''White List Input Validation'''
| |
− | | |
− | == Least Privilege ==
| |
− | | |
− | To minimize the potential damage of a successful LDAP injection attack, you should minimize the privileges assigned to the LDAP binding account in your environment.
| |
− | | |
− | TBA
| |
− | | |
− | == White List Input Validation ==
| |
− | | |
− | Input validation can be used to detect unauthorized input before it is passed to the SQL query. For more information please see the [[Input Validation Cheat Sheet]].
| |
− | | |
− | =Related Articles=
| |
− | | |
− | '''Description of LDAP Injection Vulnerabilities'''
| |
− | | |
− | * OWASP article on [[LDAP Injection]] Vulnerabilities
| |
− | | |
− | '''How to Avoid SQL Injection Vulnerabilities'''
| |
− | | |
− | * [[:Category:OWASP Guide Project|OWASP Developers Guide]] article on how to [[Guide to LDAP Injection | Avoid LDAP Injection]] Vulnerabilities
| |
− | * OWASP article on [[Preventing LDAP Injection in Java]]
| |
− | | |
− | | |
− | '''How to Review Code for LDAP Injection Vulnerabilities'''
| |
− | | |
− | * [[:Category:OWASP Code Review Project|OWASP Code Review Guide]] article on how to [[Reviewing Code for LDAP Injection|Review Code for LDAP Injection]] Vulnerabilities
| |
− | | |
− | '''How to Test for LDAP Injection Vulnerabilities'''
| |
− | | |
− | * [[:Category:OWASP Testing Project|OWASP Testing Guide]] article on how to [[Testing for LDAP Injection (OTG-INPVAL-006)|Test for LDAP Injection]] Vulnerabilities
| |
− | | |
− | = Authors and Primary Editors =
| |
− | | |
− | Jim Manico - jim[at]owasp.org<br/>
| |
− | | |
− | | |
− | == Other Cheatsheets ==
| |
− | | |
− | {{Cheatsheet_Navigation_Body}}
| |
− | | |
− | [[Category:Cheatsheets]]
| |
− | [[Category:Popular]]
| |