Skip to content

V2.2.2

Choose a tag to compare

@Bleee411 Bleee411 released this 14 Aug 10:34
· 3 commits to Windows since this release

SafePad v2.2.2 - Łatka bezpieczeństwa

To wydanie poprawki skupiające się na bezpieczeństwie dla wersji na systemy Windows oraz Linux. Brak zmian w formacie plików czy schemacie konfiguracji pliki zaszyfrowane w poprzednich wersjach 2.2.x nadal otwierają się normalnie.

🔒 Bezpieczeństwo

  • Naprawiono podatność na atak typu CBC padding-oracle w trybie szyfrowania kaskadowego („high”). W trybie kaskadowym (AES-GCM + Serpent-CBC) niepowodzenie odszyfrowania zwracało wcześniej różne komunikaty o błędach w zależności od tego, który etap zakończył się niepowodzeniem nieprawidłowe dopełnienie (padding) w Serpent-CBC vs. nieudana weryfikacja uwierzytelniania w AES-GCM. To rozróżnialne zachowanie błędów jest klasycznym warunkiem wstępnym dla ataku padding-oracle typu Vaudenaya, co potencjalnie pozwalało napastnikowi na manipulację lub wyciągnięcie danych ze spreparowanego pliku .sscr/.enc bez znajomości hasła. Oba etapy odszyfrowywania zwracają teraz jeden identyczny, ogólny komunikat o błędzie.

  • Wzmocniono usuwanie dopełnienia (unpadding) PKCS7. Walidacja dopełnienia sprawdzała wcześniej jedynie wartość ostatniego bajtu. Teraz weryfikuje każdy bajt dopełnienia w stałym czasie (constant time), co zamyka powiązany kanał boczny (side channel).

  • Usunięto wspólne domyślne hasło do kopii zapasowych. Poprzednie stałe, zaszyte w kodzie (hardcoded) domyślne hasło chroniące automatycznie zapisywane kopie zapasowe sesji było w praktyce publiczne (kod open-source), pozostawiając auto-kopie bez ochrony dla każdego, kto nie ustawił własnego hasła. Każda instalacja generuje teraz i przechowuje własne, losowe i unikalne hasło do kopii zapasowych (Windows: chronione w spoczynku przez DPAPI; Linux: przechowywane w breloku kluczy systemowych, z plikiem o ograniczonych uprawnieniach jako rozwiązaniem zapasowym).

  • (Linux) Zamknięto krótkie okno podatności (race condition) w uprawnieniach plików podczas zapisu ustawień. Pliki konfiguracyjne (w tym zapasowe base64 dla breloka kluczy) były przez chwilę tworzone z domyślnym umask przed zastosowaniem chmod do 0600, co pozostawiało krótkie okno czasowe, w którym inny lokalny użytkownik lub proces mógł je odczytać. Pliki są teraz tworzone z uprawnieniami 0600 od momentu ich powstania.

  • (Linux) Pliki kopii zapasowych sesji są teraz osobne dla każdego użytkownika. Ścieżka do plików tymczasowych dla automatycznie zapisywanych kopii zapasowych sesji zawiera teraz UID, co zapobiega konfliktom na tym samym pliku kopii zapasowej między dwoma użytkownikami na wspólnym komputerze (gdzie /tmp jest współdzielony, w przeciwieństwie do %TEMP% w Windows, który jest osobny dla każdego użytkownika).

🐛 Naprawiono

  • Zastąpiono niebezpieczne anulowanie wątków. Anulowanie operacji szyfrowania/odszyfrowywania katalogu wywoływało wcześniej QThread.terminate(), co mogło zabić wątek roboczy w trakcie zapisu i pozostawić częściowe lub uszkodzone pliki. Anulowanie odbywa się teraz w sposób kooperacyjny: wątek roboczy sprawdza flagę anulowania pomiędzy porcjami danych (chunks), czyści po sobie w bezpieczny sposób, a ten sam proces sprzątania częściowo zapisanych danych uruchamia się teraz bezpiecznie za każdym razem.

  • Ochrona przed atakami Zip-slip / path traversal przy odszyfrowywaniu katalogów używa teraz os.path.commonpath zamiast sprawdzania przedrostka przez startswith, co pozwala uniknąć klasycznego obejścia typu C:\out vs C:\out_evil.

  • Odszyfrowywanie katalogu rozpakowuje teraz dane do katalogu tymczasowego (staging) i zastępuje katalog docelowy dopiero po pełnym sukcesie, dzięki czemu błędne hasło lub uszkodzone archiwum nie mogą już zniszczyć istniejących danych użytkownika.

  • Ustawienia są teraz scalane z istniejącą konfiguracją podczas zapisu zamiast jej nadpisywania, więc przełączenie jednej opcji nie usuwa już niepowiązanych przechowywanych danych (np. wyników benchmarku Argon2).

🧹 Porządki

  • Usunięto nieużywane importy hashlib / subprocess oraz zduplikowany import LanguageManager.

⚠️ Zalecane działanie

Jeśli używasz plików lub katalogów zaszyfrowanych w trybie wysokiego bezpieczeństwa / kaskadowym ("high"), nie musisz podejmować żadnych działań — to wydanie jest w pełni kompatybilne wstecznie z istniejącymi plikami .sscr/.enc. Poprawka zmienia sposób zgłaszania błędów odszyfrowywania, a nie sam format plików


Full Changelog: V2.2.1...V2.2.2 Jak zawsze, przed aktualizacją wykonaj kopię zapasową ważnych zaszyfrowanych plików.