Postawa bezpieczeństwa
Ten serwer rozprowadza oprogramowanie do routerów stojących między domem a internetem. Jest napisany przy założeniu, że kiedyś zostanie przejęty, i ułożony tak, żeby wtedy szkoda była ograniczona.
Co napastnik zyskuje, przejmując ten serwer
- Wstrzymanie. Może przestać podawać aktualizację. Urządzenia zostają przy swojej wersji, a czas ostatniego sprawdzenia przestaje się przesuwać - co panel pokazuje.
- Uszkodzenie. Może podać śmieci. Urządzenia odrzucą je przy sprawdzaniu podpisu, zanim cokolwiek zostanie rozpakowane.
- Analiza ruchu. Widzi, które adresy pobierają które wersje. Właśnie dlatego logi są skracane do /24 i /48.
- Podszycie się pod transport, jeśli zabierze też klucz tożsamości Ed25519. Sesje od tego momentu da się sfałszować; wcześniejszych nie da się odczytać, bo ich sekrety pochodziły z kluczy efemerycznych.
Czego nie zyskuje, to możliwości opublikowania wydania. Klucz podpisujący SLH-DSA nigdy nie jest na tym hoście.
Zabezpieczenia
| Ryzyko | Zabezpieczenie |
|---|---|
| Błędna kontrola dostępu | Nic nie jest za logowaniem, bo nic tutaj nie jest prywatne. Jedyna uprzywilejowana czynność - publikacja - odbywa się poza pasmem, na systemie plików, nigdy po HTTP. |
| Wyjście poza katalog | Adresy URL nigdy nie są mapowane na system plików. Ścieżka żądania jest wyszukiwana na liście dozwolonych, zbudowanej ze zweryfikowanego manifestu - więc plik spoza manifestu jest nieosiągalny niezależnie od kodowania. |
| Błędy kryptograficzne | Wyłącznie HTTPS, HSTS, hybrydowe sesje X25519 + ML-KEM-768, HKDF-SHA-384, AES-256-GCM, porównanie MAC w stałym czasie. |
| Wstrzyknięcia | Brak bazy danych i brak powłoki. OpenSSL jest uruchamiany przez wektor argumentów, nigdy przez powłokę. Szablony automatycznie escapują; strona nie renderuje danych od użytkownika poza zwalidowanymi segmentami ścieżki. |
| XSS | Strona nie ma ani linijki JavaScriptu, a CSP to default-src 'none' z CSS-em, fontami i obrazami wyłącznie z własnego źródła. Artefakty są podawane jako application/octet-stream z nosniff, więc wgrany plik nigdy nie wyrenderuje się jako znaczniki. |
| CSRF / utrwalenie sesji | Brak ciasteczek, brak sesji w przeglądarkowym sensie, brak formularzy. Nie ma czego sfałszować. |
| Błędna konfiguracja bezpieczeństwa | Start odmawia bez kluczy; kanał, który nie przejdzie weryfikacji, jest wycofywany, a /ready zwraca 503. Interaktywna dokumentacja API jest wyłączona, a baner serwera stały. |
| Wstrzyknięcie nagłówka Host | Żądania, których Host nie jest skonfigurowaną domeną, dostają 421. Adresy bezwzględne są budowane z konfiguracji, nigdy z żądania. |
| Odmowa usługi | Kubełki tokenów per IP, z osobnym i znacznie mniejszym kubełkiem na wymianę kluczy, bo każdy handshake forkuje OpenSSL. Ograniczona tablica sesji, ograniczona tablica klientów, limit rozmiaru treści żądania. |
| Błędy logowania zdarzeń | Jedna ustrukturyzowana linia na żądanie. Znaki sterujące w ścieżkach są neutralizowane, żeby żądanie nie sfałszowało wpisu w logu. Adresy klientów są skracane. |
| Ujawnienie informacji | Ślady stosu nigdy nie wracają do klienta. Błędy walidacji nazywają wadliwe pole, ale nigdy nie odbijają jego wartości. Brakujący kanał i brakujący plik zwracają to samo 404. |
Postawa postkwantowa
Pochodzenie wydania opiera się na funkcjach skrótu (SLH-DSA-SHA2-128s, FIPS 205), więc jest już odporne kwantowo.
Wymiana kluczy sesji jest hybrydowa: X25519 + ML-KEM-768 (FIPS 203), więc nagranego ruchu nie odszyfruje później przeciwnik dysponujący komputerem kwantowym.
Zgłaszanie podatności
Dane kontaktowe są w /.well-known/security.txt (RFC 9116). Dołącz na tyle szczegółów, żeby dało się odtworzyć problem. Potwierdzimy odbiór i damy znać, kiedy poprawka trafi do wydania i do którego.