-
Notifications
You must be signed in to change notification settings - Fork 136
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Błędy typu XSS w różnych formularzach #1910
Comments
Dzięki za informację. Tak - zapewne wszystkie pola są na to podatne - sprawdzałem przed chwilą dla pól adresu - tam gdzie wpisać się tekst daje się wpisać dowolny element HTML łącznie z |
Od strony JS, a konkretnie jQuery jest to banalnie proste - |
Przy zapisie pól informacji, notatek, wiadomości i notatki na dokumencie w kartotece klienta również są już usuwane niebezpieczne elementy HTML (na razie |
samo <script> zbyt wiele nie da, jednym z wyjsc jest zamiana znakow tutaj masz inne przyklady ktore beda dzialac rownie dobrze
|
Używamy już przy parsingu maili HTML od klientów: |
No i, co istotne, HTMLPurifier używamy od 26.x, więc nikłe są szanse, żeby mocniejsze zabezpieczenia oparte o tą bibliotekę trafiły do starszych wersji LMS+ :( |
w sekcji nie twierdze ze onload w ahref zadziala, ale to tylko przyklad obrazujacy wstrzykiwanie tagow
implementacje zabezpieczenia i wszelkie decyzje zostawiam Wam ;) |
O które dokładnie pole chodzi? Możesz podać jego nazwę, id lub coś innego charakterystycznego z inspektora DOM przeglądark i www? W polu numeru telefonu próbowałem wpisywać dziwne znaki i nie przechodziło walidacji, ale może robiłem to w innym polu niż Ty? :) Na pola typowo tekstowe wystarczy htmlspecialchars() (po stronie serwera) lub |
query selector: html: |
Już widzę jak można tego użyć - wystarczy wpisać zdarzenie dla elementu html, które przeglądarka dla danego elementu wygeneruje. Zdecydowanie trzeba wszystkie formatowania kontaktu opakować w htmlspecialchars(). |
nie nie, nie chodzilo mi o to ze to zadziala, bo sam ahref nie wspiera atrybutu onload i to sie w ogole nie wykona. To tylko przyklad jak bez uzywania znakow calosc na koncu sprowadzi sie tylko do odszukania jakiegos elementu ktory wspiera |
Jeszcze raz dzięki za demonstrację podatności XSS, które dostarczamy ;-) |
…nation based on htmlpurifer (LMS #1910)
Poszła kolejna zmiana - od 26.x mamy metodę publiczną statyczną removeInsecureHtml(), która eliminuje niebezpieczny kod w HTML w oparciu o HTMLPurifier. W 25.x i 24.x mamy również tą metodą, ale opiera się ona na prostym usuwaniu elementów |
@rafalpietraszewicz @awbnet @interduo poprawiamy hurtowo poprzez pseudoaktualizację schematu bazy danych (lib/upgradedb) zawartości pól customerinfo: notes, info, message i docmemo? One do tej pory mogły zawierać niebezpieczny kod HTML. Po dzisiejszych zmianach już temu zapobiegamy. |
@chilek Z pól: notes, info wyleci kod HTML? Bo nie wiem czy dobrze zrozumiałem. |
Nie tyle wyleci co zostanie pozbawiony potencjalnie niebezpiecznych elementów. |
My używamy tam akurat podstawowych tagów typu |
Ciekawe czy HTMLPurifier (przez Utils::removeInsecureHtml()) by tego nie uszkodził... |
z tego co widze to htmlpurifier ma whiteliste połączen tag-atrybut http://htmlpurifier.org/live/configdoc/plain.html#CSS.AllowedProperties
mozna dozwolic |
I tak przy okazji ode mnie również podziękowania @kosaa za znalezienie podatności. Dobra robota! 👍🏻 |
Ciekawe czy domyślnie nie dopuszcza elementu |
Powiązane: Czy ten chmod 777 nie powinien trafić do procedury instalacji lub do skryptu composera? |
Trudno powiedzieć - może wystarczy zrobić dodatkowym ustawieniem tej biblioteki wskazanie jej cache-u. |
Może to jest to: |
Wrzuciłem do master rozwiązanie tego problemu - trzeba potestować. Jeśli sprawdzi się to pójdzie do stable-ów. |
@chilek co do: #1890 (comment) Rozwiązanie systemowe wg to każdorazowe czasanie wszystkiego z GET, POST hurtem przy przesyłaniu żądań gdzieś nawet w index.php np. za pomocą właśnie niedawno stworzonej funkcji
Pierwsze co zrobiłem to zajrzałem do HTMLPurifiera czy łapie wszystkie XSS z CheatSheet także cośtam wiem o tym a <script> podałem jako przykład. Dziękuję mimo to za pięknie wyjaśniony przykład. |
Zdajesz sobie sprawę, że to nie jest zero-kosztowe zwłaszcza Utils::removeInsecureHtml()? Poza tym i tak dla każdego zapytania trzeba by było trzymać macierz sposobów walidacji poszczególnych pól, przy czym Utils::removeInsecureHtml() i tak mogłoby mocno dawać w kość serwerowi, bo to nie jest proste preg_match()! |
Tak - trzeba byłoby przejrzeć całą zawartość bazy pod kątem potencjalnie niebezpiecznych wartości już zapisanych w wybranych polach. |
Opis błędu
osoba z dostepem do edycji klienta moze wykonac dowolny kod po stronie przegladarki osoby, ktora wchodzi na profil tego klienta
Odtworzenie problemu
Oczekiwane zachowanie
zostanie wyswietlone okno o tresci 1
Zrzuty ekranu
p.s.
taki sam efekt maja pola:
@edit
/?m=netinfo&id=x - pole description
/?m=whproductiteminfo&id=x - pole product item info
wiecej nie sprawdzalem i dlugo tez nie szuklem, ale sadzac po latwosci znalezienia tego typu miejsc, mozna sadzic ze jest ich wiecej
The text was updated successfully, but these errors were encountered: