From dc634f476b3d81b1ad2ccc3ded62a6d0137a20f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kyle=20=F0=9F=90=86?= Date: Tue, 6 Oct 2026 01:10:29 -0400 Subject: [PATCH] Update wisp to v0.7.0 (auth bypass and remote crash fixes) --- Dockerfile | 4 ++-- startos/versions/current.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2e19cc7..7d4b041 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,8 @@ RUN case "${TARGETARCH}" in \ # Pinned to the latest upstream release. Bump WISP_VERSION and WISP_COMMIT to # update (see UPDATING.md). WISP_COMMIT is the immutable commit the tag points # to; the guard below fails the build if the tag is ever re-pointed. -ARG WISP_VERSION=v0.6.0 -ARG WISP_COMMIT=6f47ec4e04bacf75ffe02fb6462cfbe41222b0d3 +ARG WISP_VERSION=v0.7.0 +ARG WISP_COMMIT=f5f3dbbec55392b45c380782d1cb0c74e371f873 RUN git clone --branch ${WISP_VERSION} --depth 1 https://github.com/privkeyio/wisp.git /src && \ HEAD_SHA="$(git -C /src rev-parse HEAD)" && \ if [ "${HEAD_SHA}" != "${WISP_COMMIT}" ]; then \ diff --git a/startos/versions/current.ts b/startos/versions/current.ts index 983706e..8dbd5e8 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,18 +1,18 @@ import { VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '0.6.0:0', + version: '0.7.0:0', releaseNotes: { en_US: - 'Updates wisp to v0.6.0, skipping v0.5.15 which was never packaged. Adds a watchdog that restarts the relay if its accept loop ever stops accepting connections. Fixes several cases where the relay reported an incomplete answer as a complete one: a failed database read ended a query as though it had finished, and a negentropy sync could seal a partial set, which made the relay report events as missing that it actually held. Settings that could never take effect are now refused at startup with a warning naming them instead of being accepted silently, which matters most for the IP deny list, where an entry written as a CIDR range blocked nothing at all. Negentropy sync over large event sets is substantially faster, and a connection whose write fails is now closed instead of being left to receive a corrupted stream.', + 'Updates wisp to v0.7.0, a security release that also carries v0.6.1, which was never packaged. Fixes an authentication bypass: an AUTH event a user had signed for another relay could be altered to log in as that user here, and the same flaw affected the management API and protected events. Fixes requests that could crash the relay or pin a CPU core (an out of range limit or kind in a subscription, or a malformed sync message), and connection lifecycle bugs that could leak connections or crash the relay. Subscriptions with several filters now return matches from every filter, limit 0 returns no stored events as the protocol now requires, and multi-kind queries respect since and until. Private app data (NIP-78) is only stored for and served to its authenticated author. The management API gains the new unban, unallow and list methods, disallowkind now blocks a kind outright, and events synced from other relays follow the same bans, allowlists and limits as published ones. No settings change and no migration is needed.', es_ES: - 'Actualiza wisp a v0.6.0, omitiendo v0.5.15 que nunca se empaquetó. Añade un vigilante que reinicia el relé si su bucle de aceptación deja de aceptar conexiones. Corrige varios casos en los que el relé informaba una respuesta incompleta como completa: una lectura fallida de la base de datos terminaba una consulta como si hubiera concluido, y una sincronización negentropy podía sellar un conjunto parcial, lo que hacía que el relé informara como ausentes eventos que sí tenía. Los ajustes que nunca podrían surtir efecto ahora se rechazan al iniciar con una advertencia que los nombra, en lugar de aceptarse en silencio; esto importa sobre todo en la lista de IP denegadas, donde una entrada escrita como rango CIDR no bloqueaba nada. La sincronización negentropy sobre conjuntos grandes de eventos es mucho más rápida, y una conexión cuya escritura falla ahora se cierra en lugar de quedar recibiendo un flujo corrupto.', + 'Actualiza wisp a v0.7.0, una versión de seguridad que incluye también v0.6.1, que nunca se empaquetó. Corrige una omisión de autenticación: un evento AUTH que un usuario había firmado para otro relé podía modificarse para iniciar sesión aquí como ese usuario, y el mismo fallo afectaba a la API de administración y a los eventos protegidos. Corrige solicitudes que podían bloquear el relé o dejar un núcleo de CPU al máximo (un límite o tipo fuera de rango en una suscripción, o un mensaje de sincronización mal formado), y errores del ciclo de vida de las conexiones que podían perder conexiones o bloquear el relé. Las suscripciones con varios filtros devuelven ahora coincidencias de todos ellos, limit 0 no devuelve eventos almacenados como exige ahora el protocolo, y las consultas de varios tipos respetan since y until. Los datos privados de aplicaciones (NIP-78) solo se guardan para su autor autenticado y solo se le entregan a él. La API de administración incorpora los nuevos métodos para retirar prohibiciones, retirar permisos y listar, disallowkind ahora bloquea un tipo por completo, y los eventos sincronizados desde otros relés siguen las mismas prohibiciones, listas de permitidos y límites que los publicados. No cambia ningún ajuste y no hace falta ninguna migración.', de_DE: - 'Aktualisiert wisp auf v0.6.0 und überspringt v0.5.15, das nie paketiert wurde. Fügt einen Watchdog hinzu, der das Relay neu startet, falls seine Accept-Schleife keine Verbindungen mehr annimmt. Behebt mehrere Fälle, in denen das Relay eine unvollständige Antwort als vollständig meldete: ein fehlgeschlagener Datenbanklesevorgang beendete eine Abfrage, als wäre sie fertig, und eine Negentropy-Synchronisation konnte eine unvollständige Menge versiegeln, wodurch das Relay Ereignisse als fehlend meldete, die es tatsächlich besitzt. Einstellungen, die niemals wirksam werden können, werden beim Start mit einer Warnung abgelehnt, die sie benennt, statt stillschweigend akzeptiert zu werden. Das ist vor allem für die IP-Sperrliste wichtig, wo ein als CIDR-Bereich geschriebener Eintrag überhaupt nichts blockierte. Die Negentropy-Synchronisation großer Ereignismengen ist deutlich schneller, und eine Verbindung, deren Schreibvorgang fehlschlägt, wird jetzt geschlossen, statt einen beschädigten Datenstrom weiter zu empfangen.', + 'Aktualisiert wisp auf v0.7.0, eine Sicherheitsversion, die auch v0.6.1 enthält, das nie paketiert wurde. Behebt eine Umgehung der Authentifizierung: Ein AUTH-Ereignis, das ein Nutzer für ein anderes Relay signiert hatte, konnte so verändert werden, dass man sich hier als dieser Nutzer anmeldete; derselbe Fehler betraf die Verwaltungs-API und geschützte Ereignisse. Behebt Anfragen, die das Relay zum Absturz bringen oder einen CPU-Kern dauerhaft auslasten konnten (ein Limit oder eine Art außerhalb des gültigen Bereichs in einem Abonnement oder eine fehlerhafte Synchronisationsnachricht), sowie Fehler im Verbindungslebenszyklus, durch die Verbindungen verloren gehen oder das Relay abstürzen konnte. Abonnements mit mehreren Filtern liefern jetzt Treffer aus allen Filtern, limit 0 liefert wie vom Protokoll nun verlangt keine gespeicherten Ereignisse, und Abfragen über mehrere Arten beachten since und until. Private App-Daten (NIP-78) werden nur für ihren authentifizierten Autor gespeichert und nur an ihn ausgeliefert. Die Verwaltungs-API erhält die neuen Methoden zum Aufheben von Sperren und Freigaben sowie zum Auflisten, disallowkind sperrt eine Art jetzt vollständig, und von anderen Relays synchronisierte Ereignisse unterliegen denselben Sperren, Freigabelisten und Grenzen wie veröffentlichte. Keine Einstellung ändert sich und es ist keine Migration nötig.', pl_PL: - 'Aktualizuje wisp do v0.6.0, pomijając v0.5.15, które nigdy nie zostało spakowane. Dodaje watchdoga, który restartuje przekaźnik, jeśli jego pętla akceptowania przestanie przyjmować połączenia. Naprawia kilka przypadków, w których przekaźnik zgłaszał niepełną odpowiedź jako pełną: nieudany odczyt z bazy danych kończył zapytanie tak, jakby się zakończyło, a synchronizacja negentropy mogła zapieczętować niepełny zbiór, przez co przekaźnik zgłaszał jako brakujące zdarzenia, które w rzeczywistości posiadał. Ustawienia, które nigdy nie mogłyby zadziałać, są teraz odrzucane przy starcie z ostrzeżeniem wskazującym je z nazwy, zamiast być po cichu przyjmowane. Ma to największe znaczenie dla listy blokowanych adresów IP, gdzie wpis zapisany jako zakres CIDR nie blokował niczego. Synchronizacja negentropy dużych zbiorów zdarzeń jest znacznie szybsza, a połączenie, którego zapis się nie powiódł, jest teraz zamykane zamiast pozostawać z uszkodzonym strumieniem.', + 'Aktualizuje wisp do v0.7.0, wydania bezpieczeństwa, które obejmuje też v0.6.1, nigdy wcześniej nie spakowane. Naprawia obejście uwierzytelniania: zdarzenie AUTH podpisane przez użytkownika dla innego przekaźnika można było zmodyfikować tak, by zalogować się tutaj jako ten użytkownik; ta sama luka dotyczyła API zarządzania i zdarzeń chronionych. Naprawia żądania, które mogły zawiesić przekaźnik lub trwale obciążyć rdzeń procesora (limit lub rodzaj spoza zakresu w subskrypcji albo niepoprawna wiadomość synchronizacji), oraz błędy cyklu życia połączeń, które mogły powodować utratę połączeń lub awarię przekaźnika. Subskrypcje z wieloma filtrami zwracają teraz wyniki ze wszystkich filtrów, limit 0 zgodnie z obecnym wymogiem protokołu nie zwraca zapisanych zdarzeń, a zapytania o wiele rodzajów uwzględniają since i until. Prywatne dane aplikacji (NIP-78) są zapisywane i udostępniane wyłącznie ich uwierzytelnionemu autorowi. API zarządzania zyskuje nowe metody cofania blokad i zezwoleń oraz listowania, disallowkind blokuje teraz rodzaj całkowicie, a zdarzenia synchronizowane z innych przekaźników podlegają tym samym blokadom, listom dozwolonych i limitom co publikowane. Żadne ustawienie się nie zmienia i nie jest potrzebna migracja.', fr_FR: - "Met à jour wisp vers v0.6.0, en sautant v0.5.15 qui n'a jamais été empaqueté. Ajoute une surveillance qui redémarre le relais si sa boucle d'acceptation cesse d'accepter les connexions. Corrige plusieurs cas où le relais signalait une réponse incomplète comme complète : une lecture de base de données en échec terminait une requête comme si elle avait abouti, et une synchronisation negentropy pouvait sceller un ensemble partiel, ce qui amenait le relais à signaler comme manquants des événements qu'il possédait réellement. Les paramètres qui ne pouvaient jamais prendre effet sont désormais refusés au démarrage avec un avertissement les nommant, au lieu d'être acceptés en silence ; cela compte surtout pour la liste de blocage d'IP, où une entrée écrite sous forme de plage CIDR ne bloquait rien. La synchronisation negentropy sur de grands ensembles d'événements est nettement plus rapide, et une connexion dont l'écriture échoue est maintenant fermée au lieu de rester à recevoir un flux corrompu.", + "Met à jour wisp vers v0.7.0, une version de sécurité qui inclut aussi v0.6.1, jamais empaquetée. Corrige un contournement de l'authentification : un événement AUTH qu'un utilisateur avait signé pour un autre relais pouvait être modifié pour se connecter ici sous son identité, et la même faille touchait l'API d'administration et les événements protégés. Corrige des requêtes qui pouvaient faire planter le relais ou monopoliser un cœur de processeur (une limite ou un type hors plage dans un abonnement, ou un message de synchronisation malformé), ainsi que des erreurs du cycle de vie des connexions qui pouvaient en perdre ou faire planter le relais. Les abonnements à plusieurs filtres renvoient désormais les correspondances de chaque filtre, limit 0 ne renvoie aucun événement stocké comme le protocole l'exige maintenant, et les requêtes sur plusieurs types respectent since et until. Les données privées d'applications (NIP-78) ne sont stockées et servies que pour leur auteur authentifié. L'API d'administration ajoute les nouvelles méthodes pour lever un bannissement, retirer une autorisation et lister, disallowkind bloque désormais un type entièrement, et les événements synchronisés depuis d'autres relais suivent les mêmes bannissements, listes d'autorisation et limites que ceux publiés. Aucun réglage ne change et aucune migration n'est nécessaire.", }, migrations: { up: async ({ effects }) => {},