CRAM-MD5 richiede che il server conosca la password effettiva, non solo un'immagine della password tramite una funzione hash. Quindi, se il server deve supportare HMAC-MD5, deve memorizzare la password in testo semplice. (Il server può crittografare la password, ma dal momento che deve anche conoscere la chiave di crittografia, che non aiuta.)
CRAM-MD5 è stato progettato per evitare che la password passi in chiaro. Dà una certa quantità di protezione contro un attaccante passivo. Se l'utente malintenzionato può intercettare la comunicazione ma non inserire messaggi, tutto ciò che ottiene è una sfida C e il valore HMAC-MD5 (P, C) in cui P è la password. Non esiste un metodo migliore per trovare la password da queste informazioni con la forza bruta. La forza bruta è tuttavia un problema con le password: almeno una funzione lenta dovrebbe essere usato, e l'esposizione dell'hash dovrebbe essere comunque evitata e dovrebbe essere trattata come un compromesso.
Invece di una password memorabile scelta dall'uomo, la "password" (più precisamente un segreto condiviso) memorizzata sul server potrebbe essere un lento hash della password umana, come annotato da Adnan . Ciò escluderebbe gli attacchi di forza bruta dall'hash MD5, quindi fornirebbe una migliore protezione contro gli attaccanti passivi. (Tuttavia, chiunque lo faccia usa strumenti non standard, ed è presumibilmente abbastanza serio sulla sicurezza per usare SSL.)
CRAM-MD5 autentica solo la fase di autenticazione e non il resto della sessione. Quindi un attaccante attivo che è in grado di impersonare il client può consentire l'autenticazione, quindi tagliare il client (o inviarlo ai dati modificati) e inviare i propri comandi nella sessione. Nello specifico, l'utente malintenzionato deve essere in grado di ricevere pacchetti TCP destinati al client. In alternativa, l'utente malintenzionato deve essere in grado di ricevere pacchetti TCP destinati al server o inviare risposte DNS false che inducano il client a parlare con l'utente malintenzionato anziché con il server; tale aggressore agisce come un relè tra il client e il server durante la fase di autenticazione, quindi può continuare a parlare con il server. Nessuno di questi attacchi comporta una compromissione della password, a proposito, diversa dalla forza bruta come sopra.
L'utilizzo di CRAM-MD5 su SSL risolverebbe questo problema di autenticazione. SSL fornisce una sessione sicura (ovvero i partecipanti non possono cambiare durante la sessione) e autentica il server sul client (presumendo che l'utente non accetti ciecamente un certificato non valido). CRAM-MD5 porta la terza parte del problema di autenticazione: autenticare il client con il server.
CRAM-MD5 su SSL va bene se la password è una stringa abbastanza lunga generata a caso, abbastanza a lungo da resistere alla forza bruta. Se la password è generata a caso, non c'è ragione di non memorizzarla in chiaro sul server, è solo una chiave. CRAM-MD5 è cattivo se la password è quella che un umano può ricordare, perché la maggior parte delle password umane può essere violata dalla forza bruta e sono preziose oltre quel server in quanto vengono spesso riutilizzate.
Se si utilizza SSL, l'uso di CRAM-MD5 è piuttosto scarso rispetto al fatto che il client invia la password tramite la connessione SSL. C'è un piccolo vantaggio nel fatto che se il client invia inavvertitamente la password a un imitatore del server, la password stessa non viene compromessa immediatamente (solo se incrinata - si noti che un imitatore del server può inviare una sfida costante e quindi creare una tabella (arcobaleno o altro) dei valori HMAC-MD5 su password plausibili). Dove la password è una stringa casuale, questo può essere un vantaggio (l'attaccante non può utilizzare il valore inviato dal client per impersonarlo, a meno che il server non invii la stessa sfida dell'attaccante, cosa che non dovrebbe accadere). Laddove la password è umana, non vi è alcun vantaggio (dato che la password può essere violata in ogni caso) e dover memorizzare la password in chiaro è un chiaro svantaggio.