2012-04-10 25 views
6

Przegląd bezpieczeństwa Fortify poinformował nas o lukach w manipulowaniu ścieżkami. Większość z nich była łatwa i łatwa, ale nie rozumiem, jak naprawić następującą.Manipulacja ścieżką (luka w zabezpieczeniach)

string[] wsdlFiles = System.IO.Directory.GetFiles(wsdlPath, "*.wsdl"); 

"wsdlPath" jest wprowadzane z pola tekstowego. Czy to coś, czego po prostu nie da się naprawić? Potrafię potwierdzić, że ścieżka istnieje itp., Ale w jaki sposób pomaga to w usuwaniu luk?

+1

Jak działa ten kod? Jeśli jest to aplikacja Windows, która działa z poświadczeniami użytkownika wprowadzającego 'wsdlPath', nie widzę niczego złego. Jeśli działa w usłudze systemu Windows lub jako część witryny sieci Web, jest to problem. –

+0

Czy przegląd Fortify zawiera wstrzyknięty ciąg? – Tung

+0

@AndersAbel - aplikacja internetowa. uwierzytelniony użytkownik wprowadza ścieżkę, a jeśli jest to poprawna ścieżka, to jest akceptowana. – Induster

Odpowiedz

8

Jeśli dane są zawsze uzyskiwane z pola tekstowego, którego zawartość jest określona przez użytkownika, a kod działa z uprawnieniami tego użytkownika, jedynym zagrożeniem jest atakowanie użytkownika sami. to nie jest interesującym zagrożeniem.

luka którym narzędzie stara się ostrzeżenia o to, że jeśli niskiego zaufania wrogi kod można określić zawartość tego łańcucha następnie wrogi kod można zamontować próbą odkryj fakty o maszyna użytkownika, taka jak "czy taki i taki program, który zdaję sobie sprawę, ma lukę bezpieczeństwa zainstalowaną i niezałatwioną?" lub "czy na tym komputerze jest użytkownik o nazwie" admin "? i tak dalej.

+0

Jedynym użytkownikiem, który ma dostęp do tej strony, jest administrator systemu. Jest tylko kilka osób z dostępem na poziomie administratora. Przypuszczam, że to wystarczająca "kontrola szkód", aby uznać tę lukę za "niską". Po prostu nie widzę sposobu, aby uczynić to silniejszym niż jest. Dzięki za wkład. – Induster

+0

Zaznaczam to jako odpowiedź, ponieważ uwierzytelniony użytkownik wprowadzający te informacje nie uzyska dla nich żadnych przydatnych informacji. Użytkownik końcowy, tak absolutnie ...ale tak nie jest w tym przypadku. – Induster

+0

@Induster - wzmacniasz go, upewniając się, że dane wejściowe są filtrowane, aby zezwalać tylko na prawidłową ścieżkę i nazwy plików. Tak, dostęp administracyjny ogranicza tylko to, co się dzieje, ale jeśli atakujący uzyska dostęp administratora, może to pozwolić im uzyskać dostęp do samego serwera, a nie tylko do aplikacji. –

2

Nigdy nie należy niczego karmić bezpośrednio w niefiltrowanym interfejsie systemu operacyjnego. Powinieneś odkażać dane wejściowe, upewnij się, że nie zawierają ścieżek (np. "../../../somefile") i upewnij się, że skraca długie nazwy i zawiera tylko poprawne nazwy plików (na przykład były różne błędy związane ze znakami międzynarodowymi)

+0

Dane wejściowe są obsługiwane tak, jak powinny. Było to oczywiście oznaczone czerwoną flagą, ponieważ pochodzi z danych wprowadzonych przez użytkownika. Ale to musi pozostać nietknięte. Dla mnie wygląda na to, że nic nie możemy tu zrobić bez wyeliminowania danych wprowadzanych przez użytkownika, co nie jest możliwe. Może ktoś może zobaczyć tutaj coś, czego nie mogę. – Induster

+1

@Induster - Twoja odpowiedź jest kłopotliwa. Co masz na myśli mówiąc, że "dane wejściowe są traktowane tak, jak powinny"? Twoje komentarze wskazują, że tak nie jest. Musisz odkażać dane wejściowe, aby upewnić się, że nie karmisz nielegalnymi danymi w interfejsie systemu operacyjnego lub ścieżkami do plików, które nie powinny być dozwolone. Jeśli uważasz, że jest to całkowicie akceptowalne, aby użytkownik wprowadził, powiedz systemowy plik haseł, a następnie hej ... zapomniałem powiedzieć cokolwiek. –

1

Za pomocą tego kodu każdy użytkownik uwierzytelniony i uprawniony do korzystania z tej funkcji może uzyskać dostęp do systemu plików na serwerze. Dostęp zostanie zrealizowany przy użyciu poświadczeń konta usługi, które uruchamia aplikację internetową.

W zależności od sposobu wykorzystania zwracanych danych złośliwy użytkownik może uzyskać więcej informacji lub sprawić, by serwer zachowywał się w sposób niezgodny z zamierzeniami.

Należy ograniczyć zestaw dozwolonych ścieżek do składać się tylko z jednego lub kilku starannie wybranych katalogów. Korzystaj z funkcji klasy Path, aby łączyć ciągi znaków w ścieżki - zajmują się one takimi sprawami, jak użytkownik wprowadzający dla ciebie c:\allowedpath\..\windows\system32.