Skip to content

Conversation

@Nexonus
Copy link

@Nexonus Nexonus commented Nov 11, 2025

W aplikacji Flask_Book_Library znalezione zostały podatności typu cross site scripting (XSS), wektory ataku to między innymi:

- <BODY ONLOAD=alert(’XSS’)>
- <script>alert(1)</script>
- <div style="font-family:'foo&#10;;color:red;';">LOL
- <svg><script ?>alert(1)

Aby zreplikować atak, należy wpisać do dowolnego formularza (np. Add New Book) skrypt HTML'owy, który w chwili wstrzyknięcia wykonuje polecenie w nim zawarte (np. alert / obrazek / pokolorowany tekst LOL). Podatność ta wynika z wykorzystania w aplikacji niebezpiecznych modyfikatorów HTML'owych, jak np. |safe, dane takie nie są automatycznie analizowane przez silnik Jinja2, przez co możliwe jest wywołanie złośliwego kodu przez użytkowników.

Aplikacja posiada dodatkowo inne wady, jak np.: możliwe jest wpisywanie dowolnie długich ciągów znakowych, które nie są weryfikowane przez regex. W Pull Requeście został zaimplementowany prosty mechanizm działający od strony backendu, który ma za zadanie sprawdzić, czy długość ciągu nie przekracza 64 znaków (domyślnie w db tak ustawiono), a także czy nie zawiera znaków specjalnych, mogących być częścią ataku. Rozwiazanie to można ulepszyć, między innymi dostosowując aplikację do stosowania innego mechanizmu wprowadzania danych, jak np. przez Formularze WForms (są obecnie niewykorzystane, a ich wdrożenie jest na chwilę obecną problematyczne). Wykorzystanie Jsonify do wyrzucania błędu o niepoprawnych danych nie jest najlepszym rozwiązaniem ze względu na wyrzucany trace log dla operacji AddNewBook, jednakże skutecznie blokuje próbę wstrzyknięcia danych, które mogłyby wpłynąc na integralność bazy danych (IntegrityError, może wywołać crash całej aplikacji).

Aby temu zaradzić, w obecnej wersji aplikacji pozbyto się modyfikatorów |safe, które zakładały, że dane wejściowe są sterylizowane. Innymi sposobami na radzenie sobie z tym jest wykorzystanie funkcji takich jak bleach, które wykonają to zadanie w zbliżony sposób.

Więcej informacji znaleźć można w plikach XSS.md, oraz DDD.md, które opisują zrealizowane zadania.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant