Open Source im professionellen Einsatz

OpenLDAP

OpenLDAP stelle eine freie Implementiertung des Lightweight Directory Access Protocols bereit. Eine nun entdeckte  Sicherheitslücke in der OpenLDAP-Software hat zur Folge, dass ein entfernter, angemeldeter Angreifer den Dienst zumAbsturz bringen kann. Der Angreifer muss hierzu lediglich eine spezielle Suchanfrage an das System richten. Dabei muss er die Page-Size auf 0 setzen.Das hat dann zur Folge, dass im OpenLDAP-Code ein Speicherbereich zweimal freigegeben wird. Solch ein Double-Free-Fehler löst dann einen Absturz des Programms aus. Auf diese Weise ist es füreinen Angreifer sehr einfach möglich Denial-of-Service-Attacken auszuführen.

Der verantwortliche Programmierfehler befindet sich in der Datei »servers/slapd/back-mdb/search.c«. Der fehlerhafte Code liest sich wie folgt:

/* check size limit */
if ( get_pagedresults(op) > SLAP_CONTROL_IGNORED ) { 
   if ( rs->sr_nentries >= ((PagedResultsState *)op->o_pagedresults_state)->ps_size ) { 
      mdb_entry_return( op, e );
      e = NULL;
      send_paged_response( op, rs, &lastid, tentries );
      goto done;

Problematisch ist hier der »mdb_entry_return()«-Aufruf, da es hier ohne vorherige Kontrolle der »e«-Variable zu dem Double-Free-Fehler kommen kann. Dieser tritt immer dann auf, wenn die »e«-Variable mit der »base«-Variable übereinstimmt. Der Patch für diesen Fehler ist entsprechend einfach: es muss lediglich eine If-Abfrage vor den »mdb_entry_return()«-Aufruf gesetzt werden, der die »e«-Variable kontrolliert und damit den Double-Free-Aufruf vermeidet. Damit sind dann keine Attacken mehr möglich.

comments powered by Disqus

Ausgabe 09/2017

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.