Modifica delle password degli account utente dallo script PHP: vulnerabilità? [chiuso]

-1

Ho iniziato un thread qualche tempo fa chiedendo suggerimenti su un buon (buono = abbastanza sicuro) modo per consentire agli utenti di cambiare le password dei loro account tramite uno script PHP. (PERCHÉ? Perché su questo server particolare, ho un sacco di utenti solo email senza accesso alla shell che hanno bisogno di essere in grado di cambiare le loro password senza chiedermi di farlo per loro.)

Le poche risposte fornite non sono state di grande aiuto. Non voglio scaricare le password in un file, o fare una sorta di aggiornamento in batch ogni x secondi. Deve essere un sistema immediato, thread-safe che 1) richiede che l'utente verifichi la sua password esistente, e 2) cambia la password immediatamente (senza batch).

Quindi ho creato un'utilità eseguibile e un piccolo script PHP per realizzare questo. Li sto sottoponendo a revisione, nella speranza che la comunità possa indicare cose che ho fatto di sbagliato / modi in cui questo possa essere vulnerabile agli attacchi e nella speranza che possa aiutare qualcun altro.

Informazioni sulla configurazione: L'utilità 'chpwd' è impostata per eseguire SUID root - richiesta per l'accesso al file / etc / shadow. Non riesco a vedere in alcun modo intorno a questo. Nota che il codice "cambia password" che accede al file / etc / shadow viene copiato direttamente dall'origine dell'utilità "passwd".

Lo script chpasswd.php viene eseguito con autorizzazioni standard sul server Web.

Ecco il codice di esempio:

chpwd.c: link

chpasswd.php: link

Grazie in anticipo per tutte le critiche e i suggerimenti costruttivi.

    
posta Ryan Griggs 18.12.2012 - 21:58
fonte

1 risposta

9

/ me fa un respiro profondo

Per prima cosa iniziamo con il concetto. Questo è un po 'sospetto. far sì che gli utenti ricordino una password che usano ogni giorno è abbastanza difficile - se usano un MUA che ricordi la loro password per loro questo non ti farà risparmiare tempo / fatica.

La prossima domanda è perché stai reinventando la ruota? chpasswd viene fornito con la maggior parte delle versioni di Linux e alcuni Unix, e la fonte il codice è disponibile gratuitamente. Inoltre, a differenza del tuo codice, usa correttamente PAM per manipolare i token di autenticazione in modo appropriato. O anche solo usando passwd per gestire l'operazione (quest'ultima richiede un wrapper di script previsto o un controllo PHP , mentre entrambi gli approcci userebbero sudo o potrebbero essere invocati su una sessione ssh autenticata con il nome utente / la vecchia password forniti).

Ma anche se non cambierai mai il tuo backend di autenticazione né i tuoi algoritmi di crittografia e non ti preoccuperai di bypassare i controlli delle policy (come gli account bloccati / scaduti) e sei abbastanza felice di interrompere completamente PAM perché stai implementando il parser per il codice anziché utilizzare le funzioni getpwent / setpwent ?

    
risposta data 18.12.2012 - 22:51
fonte

Leggi altre domande sui tag