Questo è probabilmente un cattivo design, ma si capisce da dove viene il design.
È discutibilmente un cattivo design, perché fa affidamento su api.wordpress.org
per generare chiavi casuali e tenerle segrete. Se api.wordpress.org
viene compromesso, gli autori degli attacchi potrebbero organizzare la registrazione delle chiavi utilizzate dalle nuove installazioni di Wordpress. Sarebbe problematico.
(Sì, Wordpress potrebbe inviarti codice sorgente backdoor, ma ciò sarebbe rilevabile in linea di principio da chiunque esaminasse il codice sorgente - come hai fatto tu. Al contrario, se api.wordpress.org
sta registrando segretamente una copia delle chiavi invia a nuove installazioni Wordpress, che non è rilevabile da alcuna quantità di ispezione del codice sorgente o da qualsiasi altro meccanismo disponibile per terze parti interessate.)
È comprensibile, perché è difficile generare casualità di cripto-qualità in modo indipendente dalla piattaforma.
È ancora discutibilmente un po 'trascurato / pigro. Probabilmente, un design migliore sarebbe stato quello di raccogliere un po 'di casualità locale (se possibile), raccogliere un po' di casualità da api.wordpress.org
, e quindi mescolare i due in modo sicuro usando una funzione di hash crittografica. In questo modo, sarai sicuro finché uno di questi due valori è buono. Un compromesso di api.wordpress.org
non metterebbe in pericolo le installazioni di Wordpress in esecuzione su qualsiasi piattaforma in cui il codice fosse in grado di raccogliere una casualità locale; metterebbe solo in pericolo la piccola minoranza di installazioni che non erano in grado di ottenere una buona casualità.
Come si può generare una buona casualità a cripto-qualità, da fonti locali? Ci sono vari modi:
-
Legge 16 byte da /dev/urandom
, se esiste.
-
Chiama openssl_random_pseudo_bytes()
, che invoca OpenSSL per ottenere cripto- bit pseudocasuali di qualità .
-
Chiama mcrypt_create_iv()
, con il MCRYPT_DEV_URANDOM
flag.
-
Naturalmente, si possono provare tutte le opzioni disponibili e mescolare tutto ciò che si ottiene. Finché almeno una di queste opzioni funzionerà, starai bene. Ovviamente, se si mescola questo con l'output di api.wordpress.org
utilizzando una funzione crittografica, non sarà mai peggio dell'approccio di oggi, e sarà meglio se api.wordpress.org
venga mai compromesso.
Quindi, combinando la casualità locale e remota sarebbe stato un approccio migliore. Sfortunatamente, questo richiede un po 'più di lavoro e un po' più di codice. Forse gli sviluppatori hanno preso l'approccio più semplice di interrogare solo api.wordpress.org
. Si potrebbe discutere di questa decisione progettuale, ma è possibile capire come questo approccio potrebbe essere stato scelto.
Nel complesso, tuttavia, come sostiene Thomas Pornin, questo non è probabilmente il più grande rischio per la sicurezza di Wordpress. Stiamo parlando di software con una lunga storia di vulnerabilità della sicurezza. Quindi, il rischio incrementale aggiunto da questo aspetto della generazione di numeri casuali potrebbe essere piccolo, rispetto al rischio che stai già prendendo in entrambi i modi.
Vedi anche Generazione sicura di numeri casuali in PHP per ulteriori informazioni sulla generazione casuale di qualità crittografica numeri da PHP e Sarebbe sicuro usare numeri casuali da random.org in una soluzione crittografica? per ulteriori informazioni sul motivo per cui non è una buona idea affidarsi a una fonte remota di numeri casuali per le tue chiavi crittografiche.