V2.2.2
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/.encbez 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
chmoddo0600, 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 uprawnieniami0600od 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
/tmpjest 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.commonpathzamiast sprawdzania przedrostka przezstartswith, co pozwala uniknąć klasycznego obejścia typuC:\outvsC:\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/subprocessoraz zduplikowany importLanguageManager.
⚠️ 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.