Normalizacja Unicode prowadzi do przejęcia konta
Witam wszystkich,
Znalazłem lukę, która dała mi dostęp do kont użytkowników za pomocą normalizacji Unicode podczas mojej analizy bezpieczeństwa aplikacji internetowej.
Streszczenie:
Luka w zabezpieczeniach systemu, która umożliwia atakującym przeprowadzenie ataku polegającego na przejęciu konta. Problem wynika z braku wystarczających testów normalizacji Unicode w systemie. Osoby atakujące mogą wykorzystać tę lukę do obejścia środków bezpieczeństwa i uzyskania nieautoryzowanego dostępu do kont użytkowników.
Co to jest znak Unicode?
Unicode to uniwersalny zestaw znaków lub standard definiujący w jednym miejscu wszystkie znaki wymagane do pisania większości żywych języków używanych na komputerach.
Aspiruje do bycia iw znacznym stopniu już jest nadzbiorem wszystkich innych zakodowanych zestawów znaków.
Szczegóły luki w zabezpieczeniach:
Wada tkwi w procedurze normalizacji Unicode systemu.
Normalizacja Unicode to proces standaryzacji różnych reprezentacji tego samego znaku w celu wyeliminowania problemów, takich jak liczne kodowania znaków dla tego samego znaku.
Ponieważ system nie wykonuje wystarczających kontroli normalizacji Unicode na danych wejściowych użytkownika, osoby atakujące mogą wykorzystać tę lukę.
Atakujący mogą wprowadzić specjalnie skonstruowany ciąg Unicode, który przypomina legalny ciąg znaków, ale zawiera inne znaki Unicode.
System nie jest w stanie rozróżnić tych dwóch łańcuchów, co pozwala atakującemu ominąć zabezpieczenia i uzyskać dostęp do konta ofiary.
Kroki ku reprodukcji:
- Utwórz konto w serwisie z adresem e-mail zawierającym znaki Unicode. Na przykład użyj adresu e-mail, takiego jak „té [email protected] ” zamiast „ [email protected] ”.
3. Korzystając z języka programowania obsługującego normalizację Unicode (takiego jak Python), wykonaj normalizację Unicode na adresie e-mail, używając formularza normalizacji, który różni się od formularza używanego przez witrynę internetową. Na przykład użyj formularza normalizacji NFKD zamiast formularza normalizacji NFC.
4. Użyj znormalizowanego adresu e-mail, aby ponownie zalogować się na konto. Tym razem próba logowania powinna zakończyć się powodzeniem, mimo że adres e-mail został zmodyfikowany w procesie normalizacji.
5. Jeśli próba logowania się powiedzie, atakujący pomyślnie przejął konto użytkownika.
6. Atakujący może teraz uzyskać dostęp do danych osobowych ofiary, szczegółów płatności i innych poufnych danych.
Dowód koncepcji:
- Utwórz konto z adresem e-mail zawierającym znaki Unicode
2. Wykonaj normalizację Unicode na adresie e-mail
normalized_email = unicodedata.normalize('NFKD', e-mail)
import unicodedata
email = "té[email protected]"
# Normalize the email address using NFKD
normalized_email = unicodedata.normalize('NFKD', email)
print(normalized_email)
3. Zaloguj się przy użyciu znormalizowanego adresu e-mail
data = {“email”: normalized_email, “password”: password} response = request.post(“https://example.com/api/login", json=dane)
4. System pomyślnie uwierzytelnia konto
potwierdzić odpowiedź. kod_statusu == 200
Rekomendacje:
Wszystkie znaki Unicode wprowadzane przez użytkowników powinny być weryfikowane przez serwis, a te, które są zabronione, powinny być odrzucane.
Problem można zmniejszyć, wdrażając białą listę dozwolonych znaków Unicode i formularzy normalizacji.
Dodanie uwierzytelniania dwuskładnikowego i obserwowanie nietypowych zachowań podczas logowania może również powstrzymać nielegalny dostęp do kont użytkowników.

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































