Dopo aver parlato con il mio collega @owengot, ecco una descrizione più dettagliata del problema.
Esiste un’applicazione web basata su Vue.js che non dispone di un proprio componente lato server attivo. Piuttosto, è un’applicazione web autonoma che utilizza l’API di Discourse, quindi in un certo senso Discourse funge da server. I casi d’uso includono sondaggi o moduli autonomi, in cui i contenuti vengono pubblicati nei topic di Discourse sotto l’account dell’utente. Sembra un’architettura piacevole per questi utilizzi poter creare un tale software senza componenti lato server personalizzati, quindi idealmente vorremmo evitare di fare qualsiasi cosa “lato server”.
Ora, ottenere una chiave API utente funziona come previsto, ma @owengot ha scoperto che il passaggio di generazione di una chiave privata in JavaScript richiede molto tempo (fino a 10 secondi, è semplicemente inefficiente in JavaScript…). Poi ha scoperto l’hack secondo cui la stessa chiave privata può essere utilizzata per più utenti, quindi l’ha archiviata in un file sul server web che ospita anche gli altri file statici dell’applicazione web (JS, CSS, ecc.). Questo la rende veloce… ma ora quella chiave privata è (1) condivisa e (2) archiviata in modo accessibile, con un URL pubblicamente raggiungibile. Questo sembra, umh, spaventoso ![]()
Quindi ho detto che dobbiamo chiedere al team di Discourse quali siano le implicazioni di sicurezza di questo hack. Vedo due alternative di base:
-
Se quella chiave privata è utilizzata “solo” per la crittografia del payload, potremmo accettarlo perché abbiamo anche la comunicazione crittografata tramite SSL/HTTPS.
-
Ma se conoscere quella chiave privata permette in qualche modo di calcolare la risultante chiave API utente che viene poi utilizzata per pubblicare sotto l’account di qualcuno su Discourse, ovviamente renderebbe questo hack inaccettabile.